GenuineAIGenuineAI
For usersFor developers
  • Overview
  • Guides
  • How-to
  • API reference
Documentation
  • Quickstart
  • Authentication
  • Errors
  • Rate limits
  • API reference
Platform
  • Platform overview
  • Solutions
  • Pricing
  • Sign in
Company
  • Status
  • Trust Center
  • Contact
  • Terms of Service
  • Privacy Policy

© 2026 GenuineAI Ventures LLC

support@genuinehq.com
Overview
Core
Media library
AI
    Agents
    Threads
      List threadsgetCreate a threadpostGet a threadgetDelete a threaddeleteUpdate a threadpatchStream thread eventsgetList thread filesgetList membersgetAdd a memberpostRemove a memberdeleteReport presencepostFind or create a threadpostSearch threadsget
    Messages
    Spaces
    Prompts
    Prompt categories
    Wildcards
    Memories
    Assist
Documents
Knowledge
Creative
Website & content
Automation
Customer channels
Administration
Schemas
GenuineAI API
GenuineAI API

Threads

Conversations, who they are shared with, and their live event stream.


List threads

GET
https://api.genuineai.app/api/v1
/threads

Returns the conversations the caller can see — their own, plus any shared with them or with a space they belong to. Context-agent threads are excluded unless thread_type asks for them.

List threads › query Parameters

thread_ids.*
​string · uuid · required
cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
full_text_search
​string
limit
​integer
offset
​integer · min: 0
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$
thread_active
​boolean
thread_agent
​string · uuid
thread_created
​array
thread_id
​string · uuid
thread_ids
​array
​object · style: deepObject · explode: true
thread_space
​string
thread_status
​string
thread_title
​string
thread_type
​string
thread_updated
​array
thread_user
​string · uuid

List threads › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

List threads › Responses

Success

​Thread[] · required
has_more
​boolean · required

Whether more rows exist past this page.

next_cursor
​string | null · required

Pass back as cursor for the next page. Null on the last page.

GET/threads
curl 'https://api.genuineai.app/api/v1/threads?thread_ids.*=<string>' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "thread_id": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_type": "thread_type", "thread_status": "thread_status", "thread_summary": "thread_summary", "thread_context": "thread_context", "thread_ref": "thread_ref", "thread_agent": "thread_agent", "thread_user": "thread_user", "thread_space": "thread_space", "thread_share_mode": "thread_share_mode", "thread_generating_for": "thread_generating_for", "thread_metadata": {}, "thread_active": true, "thread_created": "2024-08-25T15:00:00Z", "thread_updated": "2024-08-25T15:00:00Z", "agent_id": "00000000-0000-0000-0000-000000000000", "agent_name": "agent_name", "agent_icon": "agent_icon", "agent_active": true, "prompt_id": "00000000-0000-0000-0000-000000000000", "prompt_name": "prompt_name" } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Create a thread

POST
https://api.genuineai.app/api/v1
/threads

Pass thread_space to create it inside a space, which requires write access to that space. Without one it is personal to the caller.

Create a thread › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Create a thread › Request Body

thread_id
​string · required
thread_ref
​object
thread_agent
​string · uuid
thread_title
​string
thread_active
​boolean
thread_user
​string · pattern: ^-?[0-9]+(\.[0-9]+)?…
thread_acl
​object
thread_type
​string
thread_space
​string · uuid
thread_share_mode
​string · enum
Enum values:
private
space
collab

Create a thread › Responses

Created

One conversation — the agent answering it, what it is about, and where it is filed.
Thread
thread_id
​string · uuid
thread_title
​string
thread_type
​string
thread_status
​string
thread_summary
​string
thread_context
​string
thread_ref
​string
thread_agent
​string
thread_user
​string
thread_space
​string
thread_share_mode
​string
thread_generating_for
​string
thread_metadata
​object
thread_active
​boolean
thread_created
​string · date-time
thread_updated
​string · date-time
agent_id
​string · uuid
agent_name
​string
agent_icon
​string
agent_active
​boolean
prompt_id
​string · uuid
prompt_name
​string
POST/threads
curl https://api.genuineai.app/api/v1/threads \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "thread_id": "thread_id", "thread_ref": {}, "thread_agent": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_active": true, "thread_user": "thread_user", "thread_acl": {}, "thread_type": "thread_type", "thread_space": "00000000-0000-0000-0000-000000000000", "thread_share_mode": "private" }'
Example Request Body
{ "thread_id": "thread_id", "thread_ref": {}, "thread_agent": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_active": true, "thread_user": "thread_user", "thread_acl": {}, "thread_type": "thread_type", "thread_space": "00000000-0000-0000-0000-000000000000", "thread_share_mode": "private" }
json
Example Responses
{ "thread_id": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_type": "thread_type", "thread_status": "thread_status", "thread_summary": "thread_summary", "thread_context": "thread_context", "thread_ref": "thread_ref", "thread_agent": "thread_agent", "thread_user": "thread_user", "thread_space": "thread_space", "thread_share_mode": "thread_share_mode", "thread_generating_for": "thread_generating_for", "thread_metadata": {}, "thread_active": true, "thread_created": "2024-08-25T15:00:00Z", "thread_updated": "2024-08-25T15:00:00Z", "agent_id": "00000000-0000-0000-0000-000000000000", "agent_name": "agent_name", "agent_icon": "agent_icon", "agent_active": true, "prompt_id": "00000000-0000-0000-0000-000000000000", "prompt_name": "prompt_name" }
json
application/json

Get a thread

GET
https://api.genuineai.app/api/v1
/threads/{id}

Returns the conversation with its agent, its subject and who it is shared with. The messages in it are read separately.

Get a thread › path Parameters

id
​string · required

Get a thread › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Get a thread › Responses

Success

One conversation — the agent answering it, what it is about, and where it is filed.
Thread
thread_id
​string · uuid
thread_title
​string
thread_type
​string
thread_status
​string
thread_summary
​string
thread_context
​string
thread_ref
​string
thread_agent
​string
thread_user
​string
thread_space
​string
thread_share_mode
​string
thread_generating_for
​string
thread_metadata
​object
thread_active
​boolean
thread_created
​string · date-time
thread_updated
​string · date-time
agent_id
​string · uuid
agent_name
​string
agent_icon
​string
agent_active
​boolean
prompt_id
​string · uuid
prompt_name
​string
GET/threads/{id}
curl https://api.genuineai.app/api/v1/threads/:id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "thread_id": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_type": "thread_type", "thread_status": "thread_status", "thread_summary": "thread_summary", "thread_context": "thread_context", "thread_ref": "thread_ref", "thread_agent": "thread_agent", "thread_user": "thread_user", "thread_space": "thread_space", "thread_share_mode": "thread_share_mode", "thread_generating_for": "thread_generating_for", "thread_metadata": {}, "thread_active": true, "thread_created": "2024-08-25T15:00:00Z", "thread_updated": "2024-08-25T15:00:00Z", "agent_id": "00000000-0000-0000-0000-000000000000", "agent_name": "agent_name", "agent_icon": "agent_icon", "agent_active": true, "prompt_id": "00000000-0000-0000-0000-000000000000", "prompt_name": "prompt_name" }
json
application/json

Delete a thread

DELETE
https://api.genuineai.app/api/v1
/threads/{id}

Deactivates the thread and the messages in it.

Delete a thread › path Parameters

id
​string · uuid · required

Delete a thread › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Delete a thread › Responses

Success. No content.

No data returned
DELETE/threads/{id}
curl https://api.genuineai.app/api/v1/threads/:id \ --request DELETE \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Update a thread

PATCH
https://api.genuineai.app/api/v1
/threads/{id}

Applies the thread_-prefixed fields present in the body. Only an owner may change who the thread is shared with.

Update a thread › path Parameters

id
​string · uuid · required

Update a thread › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Update a thread › Request Body optional

thread_status
​string
thread_active
​boolean
thread_agent
​string · uuid
thread_user
​string · uuid
thread_acl
​object
thread_space
​string · uuid
thread_share_mode
​string · enum
Enum values:
private
space
collab

Update a thread › Responses

Success

One conversation — the agent answering it, what it is about, and where it is filed.
Thread
thread_id
​string · uuid
thread_title
​string
thread_type
​string
thread_status
​string
thread_summary
​string
thread_context
​string
thread_ref
​string
thread_agent
​string
thread_user
​string
thread_space
​string
thread_share_mode
​string
thread_generating_for
​string
thread_metadata
​object
thread_active
​boolean
thread_created
​string · date-time
thread_updated
​string · date-time
agent_id
​string · uuid
agent_name
​string
agent_icon
​string
agent_active
​boolean
prompt_id
​string · uuid
prompt_name
​string
PATCH/threads/{id}
curl https://api.genuineai.app/api/v1/threads/:id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "thread_status": "thread_status", "thread_active": true, "thread_agent": "00000000-0000-0000-0000-000000000000", "thread_user": "00000000-0000-0000-0000-000000000000", "thread_acl": {}, "thread_space": "00000000-0000-0000-0000-000000000000", "thread_share_mode": "private" }'
Example Request Body
{ "thread_status": "thread_status", "thread_active": true, "thread_agent": "00000000-0000-0000-0000-000000000000", "thread_user": "00000000-0000-0000-0000-000000000000", "thread_acl": {}, "thread_space": "00000000-0000-0000-0000-000000000000", "thread_share_mode": "private" }
json
Example Responses
{ "thread_id": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_type": "thread_type", "thread_status": "thread_status", "thread_summary": "thread_summary", "thread_context": "thread_context", "thread_ref": "thread_ref", "thread_agent": "thread_agent", "thread_user": "thread_user", "thread_space": "thread_space", "thread_share_mode": "thread_share_mode", "thread_generating_for": "thread_generating_for", "thread_metadata": {}, "thread_active": true, "thread_created": "2024-08-25T15:00:00Z", "thread_updated": "2024-08-25T15:00:00Z", "agent_id": "00000000-0000-0000-0000-000000000000", "agent_name": "agent_name", "agent_icon": "agent_icon", "agent_active": true, "prompt_id": "00000000-0000-0000-0000-000000000000", "prompt_name": "prompt_name" }
json
application/json

Stream thread events

GET
https://api.genuineai.app/api/v1
/threads/{id}/events

A server-sent event stream: user_message, assistant_message, lock and presence. This is how a client follows a reply as it is generated rather than polling for it.

Responds with text/event-stream, not JSON — use an SSE client.

Stream thread events › path Parameters

id
​string · uuid · required

Stream thread events › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Stream thread events › Responses

Success

No data returned
GET/threads/{id}/events
curl https://api.genuineai.app/api/v1/threads/:id/events \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

List thread files

GET
https://api.genuineai.app/api/v1
/threads/{id}/files

Files belonging to this conversation — what was attached to it, and what was generated in it.

Requires any one of media:view, document:view, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

List thread files › path Parameters

id
​string · uuid · required

List thread files › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
file_added_by
​string · uuid
file_created
​array
file_hash
​string
file_id
​string · uuid
file_name
​string
file_provider_id
​string
​object · style: deepObject · explode: true
file_status
​string
file_type
​string
file_updated
​array
limit
​integer
offset
​integer · min: 0
repo_id
​string · uuid
repo_type
​string · enum
Enum values:
media
generated
docs
ds
thread
design
prompt
ppt
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List thread files › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

List thread files › Responses

Success

​File[] · required
has_more
​boolean · required

Whether more rows exist past this page.

next_cursor
​string | null · required

Pass back as cursor for the next page. Null on the last page.

GET/threads/{id}/files
curl https://api.genuineai.app/api/v1/threads/:id/files \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "file_repo": { "library": [ "media" ], "ds": "00000000-0000-0000-0000-000000000000", "thread": "00000000-0000-0000-0000-000000000000", "design": "00000000-0000-0000-0000-000000000000", "prompt": "00000000-0000-0000-0000-000000000000", "ppt": "00000000-0000-0000-0000-000000000000", "ppt_template": "00000000-0000-0000-0000-000000000000", "form": "00000000-0000-0000-0000-000000000000", "submission": "00000000-0000-0000-0000-000000000000", "field": "field", "infographic": "00000000-0000-0000-0000-000000000000", "sitemap": "00000000-0000-0000-0000-000000000000", "node": "00000000-0000-0000-0000-000000000000", "wf_instance": "00000000-0000-0000-0000-000000000000", "wf_name": "wf_name" }, "file_id": "00000000-0000-0000-0000-000000000000", "file_name": "file_name", "file_type": "file_type", "file_size": 0, "file_created": "2024-08-25T15:00:00Z", "file_updated": "2024-08-25T15:00:00Z", "file_metadata": {}, "file_provider_id": "00000000-0000-0000-0000-000000000000", "file_bucket": "file_bucket", "file_folder": "file_folder", "file_hash": "file_hash", "file_status": "file_status", "file_added_by": "file_added_by", "file_replicas": "file_replicas", "file_summary": "file_summary", "file_pref": {} } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

List members

GET
https://api.genuineai.app/api/v1
/threads/{id}/members

Returns who the thread is shared with, and what each of them may do with it.

List members › path Parameters

id
​string · uuid · required

List members › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

List members › Responses

Success

No data returned
GET/threads/{id}/members
curl https://api.genuineai.app/api/v1/threads/:id/members \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Add a member

POST
https://api.genuineai.app/api/v1
/threads/{id}/members

Only the owner of a personal thread may share it. A thread that lives in a space takes its access from the space instead, so this does not apply to one.

Add a member › path Parameters

id
​string · uuid · required

Add a member › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Add a member › Request Body

usr_id
​string · uuid · required
role
​string · enum · required
Enum values:
viewer
member
owner

Add a member › Responses

Success

No data returned
POST/threads/{id}/members
curl https://api.genuineai.app/api/v1/threads/:id/members \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "usr_id": "00000000-0000-0000-0000-000000000000", "role": "viewer" }'
Example Request Body
{ "usr_id": "00000000-0000-0000-0000-000000000000", "role": "viewer" }
json
Example Responses
No example specified for this content type

Remove a member

DELETE
https://api.genuineai.app/api/v1
/threads/{id}/members/{user_id}

The owner cannot be removed from their own thread.

Remove a member › path Parameters

id
​string · uuid · required
user_id
​string · uuid · required

Remove a member › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Remove a member › Responses

Success. No content.

No data returned
DELETE/threads/{id}/members/{user_id}
curl https://api.genuineai.app/api/v1/threads/:id/members/:user_id \ --request DELETE \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Report presence

POST
https://api.genuineai.app/api/v1
/threads/{id}/presence

Heartbeat behind the presence events. Send it periodically while the thread is open.

Report presence › path Parameters

id
​string · uuid · required

Report presence › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Report presence › Request Body optional

state
​string · enum
Enum values:
viewing
typing

Report presence › Responses

Success

No data returned
POST/threads/{id}/presence
curl https://api.genuineai.app/api/v1/threads/:id/presence \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "state": "viewing" }'
Example Request Body
{ "state": "viewing" }
json
Example Responses
No example specified for this content type

Find or create a thread

POST
https://api.genuineai.app/api/v1
/threads/actions/find-or-create

For conversations attached to something else — a file, a task. Returns the existing thread or starts one.

It is a POST because it writes. If you only want to look, GET /threads?thread_ref=… reads and never creates.

Requires both thread:create and thread:view.

Find or create a thread › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Find or create a thread › Request Body

thread_ref
​object · required
thread_agent
​string · uuid
thread_status
​string
thread_title
​string

Find or create a thread › Responses

Success

One conversation — the agent answering it, what it is about, and where it is filed.
Thread
thread_id
​string · uuid
thread_title
​string
thread_type
​string
thread_status
​string
thread_summary
​string
thread_context
​string
thread_ref
​string
thread_agent
​string
thread_user
​string
thread_space
​string
thread_share_mode
​string
thread_generating_for
​string
thread_metadata
​object
thread_active
​boolean
thread_created
​string · date-time
thread_updated
​string · date-time
agent_id
​string · uuid
agent_name
​string
agent_icon
​string
agent_active
​boolean
prompt_id
​string · uuid
prompt_name
​string
POST/threads/actions/find-or-create
curl https://api.genuineai.app/api/v1/threads/actions/find-or-create \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "thread_ref": {}, "thread_agent": "00000000-0000-0000-0000-000000000000", "thread_status": "thread_status", "thread_title": "thread_title" }'
Example Request Body
{ "thread_ref": {}, "thread_agent": "00000000-0000-0000-0000-000000000000", "thread_status": "thread_status", "thread_title": "thread_title" }
json
Example Responses
{ "thread_id": "00000000-0000-0000-0000-000000000000", "thread_title": "thread_title", "thread_type": "thread_type", "thread_status": "thread_status", "thread_summary": "thread_summary", "thread_context": "thread_context", "thread_ref": "thread_ref", "thread_agent": "thread_agent", "thread_user": "thread_user", "thread_space": "thread_space", "thread_share_mode": "thread_share_mode", "thread_generating_for": "thread_generating_for", "thread_metadata": {}, "thread_active": true, "thread_created": "2024-08-25T15:00:00Z", "thread_updated": "2024-08-25T15:00:00Z", "agent_id": "00000000-0000-0000-0000-000000000000", "agent_name": "agent_name", "agent_icon": "agent_icon", "agent_active": true, "prompt_id": "00000000-0000-0000-0000-000000000000", "prompt_name": "prompt_name" }
json
application/json

Search threads

GET
https://api.genuineai.app/api/v1
/threads/search

Searches titles and message text, returning matching threads with a highlighted snippet and the message that produced it.

Unless you narrow it yourself, the search covers roughly the last 60 days. Messages are stored in time-partitioned tables, and an unbounded search would read every partition — the window is what keeps it fast.

Search threads › query Parameters

q
​string · minLength: 2 · required
deep
​boolean
limit
​integer · min: 1 · max: 50
thread_space
​string

Search threads › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Search threads › Responses

Success

No data returned
GET/threads/search
curl 'https://api.genuineai.app/api/v1/threads/search?q=<string>' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

AgentsMessages