API reference

Your AI teammates — knowledge, rooms, action items and meetings — from your own systems. Base URL https://api.zeriq.app; authenticate with Authorization: Bearer zqt_sk_…. Conventions, errors and limits are in the guide. Machine-readable: openapi.json.

account

The org and API key this request is authenticated as

GET/v1/me

Returns 200 with Me.

knowledge

List documents

GET/v1/knowledge/documents

Newest first. Room documents are included only for rooms you can use.

Query parameters

limitintegerdefault 20
cursorstring | null
external_idstring | null
room_idstring | null
sourcestring | null

Returns 200 with DocumentList.

Add or upsert a document

POST/v1/knowledge/documents

Upload a file (multipart), or send JSON with text + title or a url. It's searchable once status is ready. With an external_id that already exists, this replaces that document.

Body (application/json or multipart/form-data)

external_idstring | null
Upsert: replaces your document with this id.
metadataobject | null
Your own key/values, up to 16 KB.
room_idstring | null
Only that room's participants (and its AI teammates) can use it.
textstring | null
Plain text or Markdown, up to 5 MB.
titlestring | null
urlstring | null
A public web page to fetch.

Returns 202 with Document.

Get a document

GET/v1/knowledge/documents/{document_id}

Path parameters

document_idstringrequired

Returns 200 with Document.

Delete a document

DELETE/v1/knowledge/documents/{document_id}

Path parameters

document_idstringrequired

Returns 200 with Deleted.

Search knowledge (no AI model, no credits)

POST/v1/knowledge/search

The most relevant passages from your workspace's knowledge, best first.

Body

querystringrequired
room_idstring | null
Also search this room's documents.
sourcesstring[] | null
Only these sources, e.g. ["upload", "jira"].
top_kintegerdefault 5

Returns 200 with SearchResponse.

personas

List this key's conversations

GET/v1/conversations

Query parameters

limitintegerdefault 20

Returns 200 with ConversationList.

Get a conversation with its messages

GET/v1/conversations/{conversation_id}

Path parameters

conversation_idstringrequired

Returns 200 with ConversationDetail.

List AI teammates

GET/v1/personas

Returns 200 with PersonaList.

Get an AI teammate

GET/v1/personas/{persona_id}

Path parameters

persona_idstringrequired

Returns 200 with Persona.

Ask an AI teammate

POST/v1/personas/{persona_id}/ask

One answer from the teammate, grounded in your knowledge, with citations and usage.

Path parameters

persona_idstringrequired

Body

inputstringrequired
Your question or instruction.
allow_downgradebooleandefault false
Use the free model instead of failing when credits run out.
conversation_idstring | null
Continue a conversation this key started.
modelstring | null
A model id from your plan; defaults to the free model.
tools"none" | "read_only" | "allowed"default "none"
What the teammate may use; see above.
use_knowledgebooleandefault true
Search your workspace's knowledge for context.

Returns 200 with Answer.

rooms

List rooms

GET/v1/rooms

Rooms this key created (all rooms with rooms:read:all), newest first.

Query parameters

status"active" | "scheduled" | "ended" | "archived" | null
limitintegerdefault 20
cursorstring | null

Returns 200 with RoomList.

Create a room

POST/v1/rooms

A room run by this API key with the AI teammates you choose, and optionally people from your workspace. With first_message, the teammates start replying. Anyone who isn't a current member is rejected with 400 not_an_org_member.

Body

titlestringrequired
first_messagestring | null
Posted right away; the personas reply.
hostMemberRef | null
A member who can also manage and end the room in the web app.
membersMemberRef[]
People to add: current workspace members only.
modelstring | null
Model for the personas' replies; defaults to the free model.
notify"email" | "none"default "email"
Email the people you add an invite.
personasstring[]
Persona ids (prs_…), up to 6.
topicstring | null

Returns 201 with Room.

Get a room

GET/v1/rooms/{room_id}

Path parameters

room_idstringrequired

Returns 200 with Room.

End a room

POST/v1/rooms/{room_id}/end

Ends it; a title, summary and action items follow in the background.

Path parameters

room_idstringrequired

Body

outcome"success" | "followup" | "failure" | "cancelled" | null

Returns 200 with Room.

Stream room events

GET/v1/rooms/{room_id}/events

Live events for a room you can read: - persona.thinking: which AI teammates are working on a reply - message.created: a message from a person, an AI teammate or an API key - run.completed / run.failed: a reply run finished With run_id it replays that run from the start, then ends when the run does. Without it, it streams live; after Last-Event-ID it first replays what you missed. A : keep-alive comment comes every 15 seconds, and a stream closes after 10 minutes (reconnect with Last-Event-ID).

Path parameters

room_idstringrequired

Query parameters

run_idstring | null
Only this reply run's events; the stream ends when the run does.

Returns 200.

List messages

GET/v1/rooms/{room_id}/messages

Path parameters

room_idstringrequired

Query parameters

afterstring | null
Only messages after this message id (msg_…).

Returns 200 with MessageList.

Post a message

POST/v1/rooms/{room_id}/messages

Posted as this API key. The room's AI teammates reply in the background: stream them with GET /rooms/{id}/events?run_id=<run_id>, or poll GET /rooms/{id}/messages?after=.

Path parameters

room_idstringrequired

Body

contentstringrequired

Returns 201 with PostedMessage.

Generate a report

POST/v1/rooms/{room_id}/reports

Path parameters

room_idstringrequired

Body

save_to_knowledgebooleandefault false
Also add the report to your knowledge base.
type"summary" | "plan" | "pitch" | "security" | "funding"default "summary"

Returns 200 with Report.

Summarize a room

POST/v1/rooms/{room_id}/summarize

Path parameters

room_idstringrequired

Returns 200 with Room.

action items

List action items

GET/v1/action-items

Across every room you can read, newest first.

Query parameters

room_idstring | null
status"open" | "done" | null
assigneestring | null
sincedatetime | null
Created at or after this time (ISO 8601).
limitintegerdefault 50
cursorstring | null

Returns 200 with ActionItemList.

Create an action item

POST/v1/action-items

Body

room_idstringrequired
titlestringrequired
assigneestring | null
external_refstring | null

Returns 201 with ActionItem.

Update an action item

PATCH/v1/action-items/{item_id}

Mark it done or open, and/or link where it's tracked (external_ref).

Path parameters

item_idstringrequired

Body

external_refstring | null
Set to an empty string to clear it.
status"open" | "done" | null

Returns 200 with ActionItem.

meetings

List meeting bots

GET/v1/meetings/bots

Returns 200 with BotList.

Get a meeting bot

GET/v1/meetings/bots/{bot_id}

Path parameters

bot_idstringrequired

Returns 200 with Bot.

Get a meeting report

GET/v1/meetings/bots/{bot_id}/report

Path parameters

bot_idstringrequired

Returns 200 with MeetingReport.

Get a transcript

GET/v1/meetings/bots/{bot_id}/transcript

Path parameters

bot_idstringrequired

Returns 200 with Transcript.

webhooks

List deliveries

GET/v1/webhooks/deliveries

Newest first.

Query parameters

endpoint_idstring | null
status"pending" | "succeeded" | "failed" | "skipped" | null
limitintegerdefault 50
cursorstring | null

Returns 200 with WebhookDeliveryList.

Send a delivery again

POST/v1/webhooks/deliveries/{delivery}/redeliver

A fresh round of attempts, e.g. after you've fixed your endpoint.

Path parameters

deliverystringrequired

Returns 200 with WebhookDelivery.

Create a webhook endpoint

POST/v1/webhooks/endpoints

The response is the only time the signing secret is shown.

Body

urlstringrequired
https, on a public host.
descriptionstring | null
event_types("document.ready" | "document.failed" | "room.created" | "room.message.created" | "room.ended" | "room.summary.ready" | "room.report.ready" | "action_item.created" | "action_item.updated" | "meeting.bot.status_changed" | "meeting.report.ready" | "credits.low")[]
Empty means every event.

Returns 201 with WebhookEndpointWithSecret.

Get a webhook endpoint

GET/v1/webhooks/endpoints/{endpoint}

Path parameters

endpointstringrequired

Returns 200 with WebhookEndpoint.

Update a webhook endpoint

PATCH/v1/webhooks/endpoints/{endpoint}

Change the URL or events, or turn it off and on (status).

Path parameters

endpointstringrequired

Body

descriptionstring | null
event_types("document.ready" | "document.failed" | "room.created" | "room.message.created" | "room.ended" | "room.summary.ready" | "room.report.ready" | "action_item.created" | "action_item.updated" | "meeting.bot.status_changed" | "meeting.report.ready" | "credits.low")[] | null
status"active" | "disabled" | null
active turns a disabled endpoint back on.
urlstring | null

Returns 200 with WebhookEndpoint.

Delete a webhook endpoint

DELETE/v1/webhooks/endpoints/{endpoint}

Path parameters

endpointstringrequired

Returns 200 with DeletedWebhookEndpoint.

Rotate an endpoint's signing secret

POST/v1/webhooks/endpoints/{endpoint}/rotate-secret

A new secret, shown only now. For 24 hours deliveries are signed with both.

Path parameters

endpointstringrequired

Returns 200 with WebhookEndpointWithSecret.

Send a test event

POST/v1/webhooks/endpoints/{endpoint}/test

Sends a webhook.test event right away and returns the result (not retried).

Path parameters

endpointstringrequired

Returns 200 with WebhookDelivery.

List event types

GET/v1/webhooks/event-types

Returns 200 with EventTypeList.

Models

ActionItem

Fields

created_atdatetimerequired
created_bystringrequired
idstringrequired
room_idstringrequired
status"open" | "done" | stringrequired
titlestringrequired
assigneestring | null
external_refstring | null
Where it's tracked elsewhere, e.g. a PR or ticket URL.
object"action_item"default "action_item"

ActionItemList

Fields

dataActionItem[]required
next_cursorstring | null
object"list"default "list"

Actor

Fields

namestringrequired
type"user" | "persona" | "api_key" | "system"required
idstring | null

Answer

Fields

answerstringrequired
citationsCitation[]required
conversation_idstringrequired
tools_usedstring[]required
usageUsagerequired
object"answer"default "answer"

AskRequest

Fields

inputstringrequired
Your question or instruction.
allow_downgradebooleandefault false
Use the free model instead of failing when credits run out.
conversation_idstring | null
Continue a conversation this key started.
modelstring | null
A model id from your plan; defaults to the free model.
tools"none" | "read_only" | "allowed"default "none"
What the teammate may use; see above.
use_knowledgebooleandefault true
Search your workspace's knowledge for context.

Bot

Fields

created_atdatetimerequired
idstringrequired
meeting_urlstringrequired
persona_namestringrequired
statusstringrequired
object"meeting_bot"default "meeting_bot"
themestring | null

BotList

Fields

dataBot[]required
object"list"default "list"

Citation

Fields

chunk_idstringrequired
document_idstringrequired
scorenumberrequired
snippetstringrequired
sourcestringrequired
titlestringrequired
source_urlstring | null

Conversation

Fields

created_atdatetimerequired
idstringrequired
titlestringrequired
object"conversation"default "conversation"
persona_idstring | null
updated_atdatetime | null

ConversationDetail

Fields

created_atdatetimerequired
idstringrequired
messagesConversationMessage[]required
titlestringrequired
object"conversation"default "conversation"
persona_idstring | null
updated_atdatetime | null

ConversationList

Fields

dataConversation[]required
object"list"default "list"

ConversationMessage

Fields

contentstringrequired
created_atdatetimerequired
rolestringrequired

CreateActionItem

Fields

room_idstringrequired
titlestringrequired
assigneestring | null
external_refstring | null

CreateDocument

JSON body: exactly one of text (with title) or url. Files use multipart/form-data.

Fields

external_idstring | null
Upsert: replaces your document with this id.
metadataobject | null
Your own key/values, up to 16 KB.
room_idstring | null
Only that room's participants (and its AI teammates) can use it.
textstring | null
Plain text or Markdown, up to 5 MB.
titlestring | null
urlstring | null
A public web page to fetch.

CreateRoom

Fields

titlestringrequired
first_messagestring | null
Posted right away; the personas reply.
hostMemberRef | null
A member who can also manage and end the room in the web app.
membersMemberRef[]
People to add: current workspace members only.
modelstring | null
Model for the personas' replies; defaults to the free model.
notify"email" | "none"default "email"
Email the people you add an invite.
personasstring[]
Persona ids (prs_…), up to 6.
topicstring | null

CreateWebhookEndpoint

Fields

urlstringrequired
https, on a public host.
descriptionstring | null
event_types("document.ready" | "document.failed" | "room.created" | "room.message.created" | "room.ended" | "room.summary.ready" | "room.report.ready" | "action_item.created" | "action_item.updated" | "meeting.bot.status_changed" | "meeting.report.ready" | "credits.low")[]
Empty means every event.

Deleted

Fields

idstringrequired
deletedtruedefault true
object"document"default "document"

DeletedWebhookEndpoint

Fields

idstringrequired
deletedtruedefault true
object"webhook_endpoint"default "webhook_endpoint"

Document

Fields

chunk_countintegerrequired
created_atdatetimerequired
idstringrequired
mime_typestringrequired
size_bytesintegerrequired
sourcestringrequired
upload for files, URLs and text; otherwise the integration it was synced from.
status"processing" | "ready" | "empty" | "failed"required
processing until it's searchable; empty if no text was found.
titlestringrequired
errorstring | null
external_idstring | null
Your own id for this document (unique in the workspace).
metadataobject | null
object"document"default "document"
replacingbooleandefault false
True while this new version waits to replace the one with the same external_id.
room_idstring | null
Set when the document belongs to one room.
source_urlstring | null
updated_atdatetime | null

DocumentList

Fields

dataDocument[]required
next_cursorstring | null
Pass as cursor for the next page; null on the last page.
object"list"default "list"

EndRoom

Fields

outcome"success" | "followup" | "failure" | "cancelled" | null

EventTypeInfo

Fields

descriptionstringrequired
typestringrequired

EventTypeList

Fields

dataEventTypeInfo[]required
object"list"default "list"

Me

Fields

api_key_idstringrequired
org_idstringrequired
scopesstring[]required
tool_accessstringrequired

MeetingReport

Fields

bot_idstringrequired
contentstringrequired
generated_atdatetime | null
object"meeting_report"default "meeting_report"
themestring | null

MemberRef

A current member of the workspace: exactly one of email or member_id.

Fields

emailstring | null
member_idstring | null

Message

Fields

contentstringrequired
created_atdatetimerequired
idstringrequired
room_idstringrequired
senderActorrequired
type"human" | "ai" | "system" | stringrequired
object"message"default "message"

MessageList

Fields

dataMessage[]required
object"list"default "list"

Participant

Fields

member_idstringrequired
namestringrequired
role"host" | "member" | stringrequired

Persona

Fields

descriptionstringrequired
idstringrequired
namestringrequired
rolestringrequired
avatar_urlstring | null
object"persona"default "persona"

PersonaList

Fields

dataPersona[]required
object"list"default "list"

PostMessage

Always posted as this API key: there's no way to post as a member.

Fields

contentstringrequired

PostedMessage

Fields

contentstringrequired
created_atdatetimerequired
idstringrequired
room_idstringrequired
senderActorrequired
type"human" | "ai" | "system" | stringrequired
object"message"default "message"
run_idstring | null
The AI teammates' reply run, when they'll answer: stream it with GET /rooms/{id}/events?run_id=.

Report

Fields

contentstringrequired
typestringrequired
document_idstring | null
Set when it was saved to the knowledge base.
object"report"default "report"

ReportRequest

Fields

save_to_knowledgebooleandefault false
Also add the report to your knowledge base.
type"summary" | "plan" | "pitch" | "security" | "funding"default "summary"

Room

Fields

created_atdatetimerequired
created_byActorrequired
idstringrequired
message_countintegerrequired
participantsParticipant[]required
personasRoomPersona[]required
status"active" | "scheduled" | "ended" | "archived" | stringrequired
titlestringrequired
action_planstring | null
ended_atdatetime | null
object"room"default "room"
outcomestring | null
summarystring | null
topicstring | null

RoomList

Fields

dataRoom[]required
next_cursorstring | null
object"list"default "list"

RoomPersona

Fields

namestringrequired
idstring | null
Null for one-off guest experts added in the web app.
rolestring | null

SearchRequest

Fields

querystringrequired
room_idstring | null
Also search this room's documents.
sourcesstring[] | null
Only these sources, e.g. ["upload", "jira"].
top_kintegerdefault 5

SearchResponse

Fields

dataSearchResult[]required
object"list"default "list"

SearchResult

Fields

chunk_idstringrequired
contentstringrequired
document_idstringrequired
scorenumberrequired
Similarity, 0–1.
sourcestringrequired
titlestringrequired
external_idstring | null
source_urlstring | null

Transcript

Fields

bot_idstringrequired
dataTranscriptLine[]required
object"transcript"default "transcript"

TranscriptLine

Fields

speakerstringrequired
textstringrequired
timestampdatetime | null

UpdateActionItem

Fields

external_refstring | null
Set to an empty string to clear it.
status"open" | "done" | null

UpdateWebhookEndpoint

Fields

descriptionstring | null
event_types("document.ready" | "document.failed" | "room.created" | "room.message.created" | "room.ended" | "room.summary.ready" | "room.report.ready" | "action_item.created" | "action_item.updated" | "meeting.bot.status_changed" | "meeting.report.ready" | "credits.low")[] | null
status"active" | "disabled" | null
active turns a disabled endpoint back on.
urlstring | null

Usage

Fields

credits_chargedintegerrequired
downgradedbooleanrequired
True when allow_downgrade was used.
modelstringrequired

WebhookDelivery

Fields

attemptsintegerrequired
created_atdatetimerequired
endpoint_idstringrequired
event_idstringrequired
event_typestringrequired
idstringrequired
status"pending" | "succeeded" | "failed" | "skipped"required
last_errorstring | null
last_responsestring | null
The start of your endpoint's last response body.
last_response_msinteger | null
last_status_codeinteger | null
next_attempt_atdatetime | null
object"webhook_delivery"default "webhook_delivery"
updated_atdatetime | null

WebhookDeliveryList

Fields

dataWebhookDelivery[]required
next_cursorstring | null
object"list"default "list"

WebhookEndpoint

Fields

created_atdatetimerequired
event_typesstring[]required
Event types it receives; empty means all.
idstringrequired
status"active" | "disabled"required
urlstringrequired
descriptionstring | null
disabled_reasonstring | null
failing_sincedatetime | null
Deliveries have failed since then; 3 days disables it.
object"webhook_endpoint"default "webhook_endpoint"
previous_secret_expires_atdatetime | null
Until then the old secret also signs.

WebhookEndpointList

Fields

dataWebhookEndpoint[]required
limitintegerrequired
How many endpoints your plan allows.
object"list"default "list"

WebhookEndpointWithSecret

Fields

created_atdatetimerequired
event_typesstring[]required
Event types it receives; empty means all.
idstringrequired
secretstringrequired
whsec_…: shown only now. Keep it on your server.
status"active" | "disabled"required
urlstringrequired
descriptionstring | null
disabled_reasonstring | null
failing_sincedatetime | null
Deliveries have failed since then; 3 days disables it.
object"webhook_endpoint"default "webhook_endpoint"
previous_secret_expires_atdatetime | null
Until then the old secret also signs.
You're back online