Skip to content
Preview. The endpoints on this page are illustrative and are likely to change as they move toward general availability. Documentation is published in advance so you can start shaping your integration; treat request and response details as subject to revision.

Q&A item

A QnaItem represents one question in a deal's Q&A backlog. Every item has a direction (Discovery or RFI) and a state (Open, Answered, or Dismissed).

Returned by the endpoints under /api/v1alpha1/deals/{id}/qnas and /api/v1alpha1/qnas/{id}.

The QnaItem schema

json
{
  "id": "qna_...",
  "direction": "discovery",
  "state": "open",
  "questionText": "What's the buyer's role tenure?",
  "answerText": null,
  "importance": "high",
  "linkedInsight": {
    "schemaType": "profile",
    "fieldKey": "tenure"
  },
  "contact": null,
  "occurrences": [
    {
      "meetingId": "mtg_...",
      "occurredAt": "2026-06-16T17:03:22Z",
      "source": "cortex-agent"
    }
  ],
  "createdAt": "2026-06-16T17:03:22Z",
  "updatedAt": "2026-06-16T17:03:22Z"
}

Fields

id string

Q&A item id, prefixed qna_.

direction string

  • discovery — the sales team hasn't yet learned about a 8P field. Points at a specific field via linkedInsight. Auto-transitions to answered when the field gets an insight.
  • rfi — the buyer asked a question. Attached to a contact via the contact field.

Direction is set at creation and never changes.

state string

  • open — new / unanswered.
  • answered — an answer is attached. Transitions here automatically when POST /qnas/{id}/answer is called with confidence ≥ 0.6; can also be set explicitly.
  • dismissed — won't-answer. Preserves audit trail.

Allowed transitions:

From→ allowed target states
openanswered, dismissed
answeredopen, dismissed
dismissedopen

questionText string

The question. Free-text.

answerText string

The answer, or null when unanswered. Populated via POST /qnas/{id}/answer.

An Answered Q&A may still have answerText: null when the item was transitioned externally (a partner marked it answered in their own system) without capturing an answer in Cirrus. Downstream consumers should treat this as "the item is resolved, but the answer body isn't captured here."

importance string

low / medium / high. Author-supplied significance. Default medium.

linkedInsight object

Discovery Q&As only; null on RFI. Points at the 8P field the Q&A is asking about.

AttributeTypeDescription
schemaTypestringLowercase 8P type — profile, problem, etc.
fieldKeystringSchema-defined field key (e.g., tenure, decisionMakers).

When this field gets an insight appended via the 8P endpoints, Cirrus auto-transitions the Q&A to answered.

contact object

RFI Q&As only; null on Discovery. {id, displayName} reference to the contact who asked. Same shape as the reference on the Contact model.

occurrences list

Every time the Q&A was raised — the same question can arise in multiple meetings, and each is captured.

AttributeTypeDescription
meetingIdstringMeeting where the Q&A was raised, prefixed mtg_.
occurredAtstringISO 8601 UTC.
sourcestringcortex-agent | user | webhook. Who / what added the occurrence.

At least one occurrence is required on creation — a Q&A that didn't come from anywhere is a note, not a Q&A.

createdAt, updatedAt string

ISO 8601 UTC.

json
{
  "meetingId": "mtg_...",
  "occurredAt": "2026-06-16T17:03:22Z",
  "source": "cortex-agent"
}

Direction-specific validation

Creating a Q&A validates the direction-specific required fields:

  • Discovery requires linkedInsight.schemaType + linkedInsight.fieldKey.
  • RFI requires contactId.

Missing the required field for the direction returns 422 qna-shape-invalid.

  • Deal — the parent object.
  • Insight (8P) record — Discovery Q&As reference 8P fields; those fields' insights auto-close the Q&A.
  • Contact — RFI Q&As reference the asker.
  • Meeting — every occurrence points at a meeting.

Raleigh, NC — a Cirruspath, Inc. company