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
Documents
Knowledge
Creative
Website & content
Automation
    Workflows
    Workflow instances
    Tasks
    Scheduled jobs
    Integrations
    Extensions
      List extensionsgetList state documentsgetGet a state documentgetWrite a state documentputDelete a state documentdelete
Customer channels
Administration
Schemas
GenuineAI API
GenuineAI API

Extensions

Features built for one workspace that run outside the platform, and the small documents each keeps in the workspace.


List extensions

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

Beta — this operation may change on 30 days notice. See versioning.

The extensions enabled in this workspace, with the scopes each was granted.

Requires the module-extensions license feature. Without it the request is refused with 403 license_required — see plans and modules.

List extensions › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
inst_status
​string
limit
​integer
offset
​integer · min: 0
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List extensions › 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 extensions › Responses

Success

​ExtensionInstall[] · 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/extensions
curl https://api.genuineai.app/api/v1/extensions \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "inst_id": "00000000-0000-0000-0000-000000000000", "inst_status": "inst_status", "inst_version": "inst_version", "inst_scopes": "inst_scopes", "inst_created": "2024-08-25T15:00:00Z", "inst_updated": "2024-08-25T15:00:00Z", "ext_slug": "ext_slug", "ext_name": "ext_name", "ext_description": "ext_description" } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

List state documents

GET
https://api.genuineai.app/api/v1
/extensions/{slug}/state

Beta — this operation may change on 30 days notice. See versioning.

The documents an extension keeps in this workspace, ordered by key. An extension calling with its own key or token sees only its own.

Requires the module-extensions license feature. Without it the request is refused with 403 license_required — see plans and modules.

List state documents › path Parameters

slug
​string · pattern: ^[a-z][a-z0-9-]{1,38… · required

List state documents › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
exs_key
​string
limit
​integer
offset
​integer · min: 0
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List state documents › 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 state documents › Responses

Success

​ExtensionStateDocument[] · 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/extensions/{slug}/state
curl https://api.genuineai.app/api/v1/extensions/:slug/state \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "exs_id": "00000000-0000-0000-0000-000000000000", "exs_key": "exs_key", "exs_value": "exs_value", "exs_version": "exs_version", "exs_created": "2024-08-25T15:00:00Z", "exs_updated": "2024-08-25T15:00:00Z", "exs_updated_by": "exs_updated_by" } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Get a state document

GET
https://api.genuineai.app/api/v1
/extensions/{slug}/state/{key}

Beta — this operation may change on 30 days notice. See versioning.

One document by key. The ETag is its version; send it back as If-Match to update without overwriting a change made since.

Requires the module-extensions license feature. Without it the request is refused with 403 license_required — see plans and modules.

Get a state document › path Parameters

key
​string · pattern: ^[A-Za-z0-9][A-Za-z0… · required
slug
​string · pattern: ^[a-z][a-z0-9-]{1,38… · required

Get a state document › 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 state document › Responses

Success

One JSON document an extension keeps in the workspace, under a key it chooses.
ExtensionStateDocument
exs_id
​string · uuid
exs_key
​string
exs_value
​string
exs_version
​string
exs_created
​string · date-time
exs_updated
​string · date-time
exs_updated_by
​string
GET/extensions/{slug}/state/{key}
curl https://api.genuineai.app/api/v1/extensions/:slug/state/:key \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "exs_id": "00000000-0000-0000-0000-000000000000", "exs_key": "exs_key", "exs_value": "exs_value", "exs_version": "exs_version", "exs_created": "2024-08-25T15:00:00Z", "exs_updated": "2024-08-25T15:00:00Z", "exs_updated_by": "exs_updated_by" }
json
application/json

Write a state document

PUT
https://api.genuineai.app/api/v1
/extensions/{slug}/state/{key}

Beta — this operation may change on 30 days notice. See versioning.

Creates or replaces the document under a key. Send If-Match with the ETag you read to refuse a lost update, or If-Match: * to update only an existing document. Documents are at most 256 KB, and an extension keeps at most 1000 in a workspace.

Requires the module-extensions license feature. Without it the request is refused with 403 license_required — see plans and modules.

Write a state document › path Parameters

key
​string · pattern: ^[A-Za-z0-9][A-Za-z0… · required
slug
​string · pattern: ^[a-z][a-z0-9-]{1,38… · required

Write a state document › 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.

Write a state document › Request Body

exs_value
​

Any JSON value.

Write a state document › Responses

Success

One JSON document an extension keeps in the workspace, under a key it chooses.
ExtensionStateDocument
exs_id
​string · uuid
exs_key
​string
exs_value
​string
exs_version
​string
exs_created
​string · date-time
exs_updated
​string · date-time
exs_updated_by
​string
PUT/extensions/{slug}/state/{key}
curl https://api.genuineai.app/api/v1/extensions/:slug/state/:key \ --request PUT \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "exs_value": {} }'
Example Request Body
{ "exs_value": {} }
json
Example Responses
{ "exs_id": "00000000-0000-0000-0000-000000000000", "exs_key": "exs_key", "exs_value": "exs_value", "exs_version": "exs_version", "exs_created": "2024-08-25T15:00:00Z", "exs_updated": "2024-08-25T15:00:00Z", "exs_updated_by": "exs_updated_by" }
json
application/json

Delete a state document

DELETE
https://api.genuineai.app/api/v1
/extensions/{slug}/state/{key}

Beta — this operation may change on 30 days notice. See versioning.

Removes the document under a key.

Requires the module-extensions license feature. Without it the request is refused with 403 license_required — see plans and modules.

Delete a state document › path Parameters

key
​string · pattern: ^[A-Za-z0-9][A-Za-z0… · required
slug
​string · pattern: ^[a-z][a-z0-9-]{1,38… · required

Delete a state document › 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 state document › Responses

Success

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

IntegrationsChat widgets