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
Customer channels
    Chat widgets
      List chat widgetsgetCreate a chat widgetpostGet a chat widgetgetDelete a chat widgetdeleteUpdate a chat widgetpatchGet widget statisticsgetGet a preview linkgetList conversationsgetGet a conversationget
    Voice agents
Administration
Schemas
GenuineAI API
GenuineAI API

Chat widgets

The embeddable chat widget: its configuration, conversations and captured leads.


List chat widgets

GET
https://api.genuineai.app/api/v1
/chat-widgets

Returns the workspace's widgets. widget_key is the public embed key — it identifies the widget in the snippet on your site and is not a secret.

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

List chat widgets › query Parameters

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

List chat widgets › 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 chat widgets › Responses

Success

​ChatWidget[] · 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/chat-widgets
curl https://api.genuineai.app/api/v1/chat-widgets \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "widget_id": "00000000-0000-0000-0000-000000000000", "widget_active": true, "widget_created": "2024-08-25T15:00:00Z", "widget_updated": "2024-08-25T15:00:00Z", "widget_created_by": "widget_created_by", "widget_key": "widget_key", "widget_name": "widget_name", "widget_agent": "widget_agent", "widget_origins": "widget_origins", "widget_welcome": "widget_welcome", "widget_theme": "widget_theme", "widget_config": {}, "widget_limits": "widget_limits" } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Create a chat widget

POST
https://api.genuineai.app/api/v1
/chat-widgets

The agent behind a widget must be marked public-facing — a widget is an anonymous surface, and an internal agent is not written to be one, so this refuses rather than exposing it.

widget_origins is the list of sites allowed to embed it.

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

Create a chat widget › 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 chat widget › Request Body

widget_name
​string · minLength: 1 · maxLength: 255 · required
widget_agent
​string · uuid · required
widget_origins
​string[] · required
widget_welcome
​string · maxLength: 2000
widget_theme
​object
widget_config
​object
widget_limits
​object

Create a chat widget › Responses

Created

An embeddable chat widget: the agent behind it, where it may be embedded, and how it looks.
ChatWidget
widget_id
​string · uuid
widget_active
​boolean
widget_created
​string · date-time
widget_updated
​string · date-time
widget_created_by
​string
widget_key
​string
widget_name
​string
widget_agent
​string
widget_origins
​string
widget_welcome
​string
widget_theme
​string
widget_config
​object
widget_limits
​string
POST/chat-widgets
curl https://api.genuineai.app/api/v1/chat-widgets \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "widget_name": "widget_name", "widget_agent": "00000000-0000-0000-0000-000000000000", "widget_origins": [ "string" ], "widget_welcome": "widget_welcome", "widget_theme": {}, "widget_config": {}, "widget_limits": {} }'
Example Request Body
{ "widget_name": "widget_name", "widget_agent": "00000000-0000-0000-0000-000000000000", "widget_origins": [ "string" ], "widget_welcome": "widget_welcome", "widget_theme": {}, "widget_config": {}, "widget_limits": {} }
json
Example Responses
{ "widget_id": "00000000-0000-0000-0000-000000000000", "widget_active": true, "widget_created": "2024-08-25T15:00:00Z", "widget_updated": "2024-08-25T15:00:00Z", "widget_created_by": "widget_created_by", "widget_key": "widget_key", "widget_name": "widget_name", "widget_agent": "widget_agent", "widget_origins": "widget_origins", "widget_welcome": "widget_welcome", "widget_theme": "widget_theme", "widget_config": {}, "widget_limits": "widget_limits" }
json
application/json

Get a chat widget

GET
https://api.genuineai.app/api/v1
/chat-widgets/{id}

Returns the widget with the agent behind it, its origin allowlist and its theme.

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

Get a chat widget › path Parameters

id
​string · uuid · required

Get a chat widget › 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 chat widget › Responses

Success

An embeddable chat widget: the agent behind it, where it may be embedded, and how it looks.
ChatWidget
widget_id
​string · uuid
widget_active
​boolean
widget_created
​string · date-time
widget_updated
​string · date-time
widget_created_by
​string
widget_key
​string
widget_name
​string
widget_agent
​string
widget_origins
​string
widget_welcome
​string
widget_theme
​string
widget_config
​object
widget_limits
​string
GET/chat-widgets/{id}
curl https://api.genuineai.app/api/v1/chat-widgets/:id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "widget_id": "00000000-0000-0000-0000-000000000000", "widget_active": true, "widget_created": "2024-08-25T15:00:00Z", "widget_updated": "2024-08-25T15:00:00Z", "widget_created_by": "widget_created_by", "widget_key": "widget_key", "widget_name": "widget_name", "widget_agent": "widget_agent", "widget_origins": "widget_origins", "widget_welcome": "widget_welcome", "widget_theme": "widget_theme", "widget_config": {}, "widget_limits": "widget_limits" }
json
application/json

Delete a chat widget

DELETE
https://api.genuineai.app/api/v1
/chat-widgets/{id}

Soft delete: the widget stops answering on the sites embedding it. Its conversations and captured leads are kept.

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

Delete a chat widget › path Parameters

id
​string · uuid · required

Delete a chat widget › 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 chat widget › Responses

Success. No content.

No data returned
DELETE/chat-widgets/{id}
curl https://api.genuineai.app/api/v1/chat-widgets/: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 chat widget

PATCH
https://api.genuineai.app/api/v1
/chat-widgets/{id}

Applies the widget_-prefixed fields present in the body. Changing the origin allowlist takes effect on the next page load; sessions already open are unaffected.

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

Update a chat widget › path Parameters

id
​string · uuid · required

Update a chat widget › 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 chat widget › Request Body optional

widget_name
​string · minLength: 1 · maxLength: 255
widget_active
​boolean
widget_agent
​string · uuid
widget_origins
​string[]
widget_welcome
​string · maxLength: 2000
widget_theme
​object
widget_config
​object
widget_limits
​object

Update a chat widget › Responses

Success

An embeddable chat widget: the agent behind it, where it may be embedded, and how it looks.
ChatWidget
widget_id
​string · uuid
widget_active
​boolean
widget_created
​string · date-time
widget_updated
​string · date-time
widget_created_by
​string
widget_key
​string
widget_name
​string
widget_agent
​string
widget_origins
​string
widget_welcome
​string
widget_theme
​string
widget_config
​object
widget_limits
​string
PATCH/chat-widgets/{id}
curl https://api.genuineai.app/api/v1/chat-widgets/:id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "widget_name": "widget_name", "widget_active": true, "widget_agent": "00000000-0000-0000-0000-000000000000", "widget_origins": [ "string" ], "widget_welcome": "widget_welcome", "widget_theme": {}, "widget_config": {}, "widget_limits": {} }'
Example Request Body
{ "widget_name": "widget_name", "widget_active": true, "widget_agent": "00000000-0000-0000-0000-000000000000", "widget_origins": [ "string" ], "widget_welcome": "widget_welcome", "widget_theme": {}, "widget_config": {}, "widget_limits": {} }
json
Example Responses
{ "widget_id": "00000000-0000-0000-0000-000000000000", "widget_active": true, "widget_created": "2024-08-25T15:00:00Z", "widget_updated": "2024-08-25T15:00:00Z", "widget_created_by": "widget_created_by", "widget_key": "widget_key", "widget_name": "widget_name", "widget_agent": "widget_agent", "widget_origins": "widget_origins", "widget_welcome": "widget_welcome", "widget_theme": "widget_theme", "widget_config": {}, "widget_limits": "widget_limits" }
json
application/json

Get widget statistics

GET
https://api.genuineai.app/api/v1
/chat-widgets/{id}/analytics

Conversation and lead counts over the last days (30 by default), with the average, median and longest conversation length.

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

Get widget statistics › path Parameters

id
​string · uuid · required

Get widget statistics › query Parameters

days
​integer · min: 1 · max: 90

Get widget statistics › 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 widget statistics › Responses

Success

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

Get a preview link

GET
https://api.genuineai.app/api/v1
/chat-widgets/{id}/preview-url

A link that opens the widget on a page of its own, outside any website, for trying it out. It skips the origin allowlist and stops opening conversations after expires_in seconds; the conversations it starts carry preview: true in their wses_metadata.

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

Get a preview link › path Parameters

id
​string · uuid · required

Get a preview link › 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 preview link › Responses

Success

url
​string · uri · required
expires_in
​integer · required

Seconds the link stays valid.

GET/chat-widgets/{id}/preview-url
curl https://api.genuineai.app/api/v1/chat-widgets/:id/preview-url \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "url": "https://www.example.com/path/to/resource", "expires_in": 0 }
json
application/json

List conversations

GET
https://api.genuineai.app/api/v1
/chat-widgets/{id}/sessions

Newest first. has_messages=true skips sessions where the visitor never wrote, leads_only=true keeps only the conversations that captured contact details, downvoted_only=true only those with an answer rated not helpful, and q searches what was said.

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

List conversations › path Parameters

id
​string · uuid · required

List conversations › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
downvoted_only
​boolean
has_messages
​boolean
leads_only
​boolean
limit
​integer
offset
​integer · min: 0
q
​string · minLength: 1 · maxLength: 200
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$
wses_created
​array

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

Success

​ChatWidgetSession[] · 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/chat-widgets/{id}/sessions
curl https://api.genuineai.app/api/v1/chat-widgets/:id/sessions \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "wses_id": "00000000-0000-0000-0000-000000000000", "wses_active": true, "wses_created": "2024-08-25T15:00:00Z", "wses_updated": "2024-08-25T15:00:00Z", "wses_widget": "wses_widget", "wses_thread": "wses_thread", "wses_user_agent": "wses_user_agent", "wses_origin": "wses_origin", "wses_page_url": "wses_page_url", "wses_country": "wses_country", "wses_message_count": 0, "wses_credits": 0, "wses_lead": "wses_lead", "wses_metadata": {}, "wses_first_message": "wses_first_message", "wses_feedback_down": 0 } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Get a conversation

GET
https://api.genuineai.app/api/v1
/widget-sessions/{id}

The captured contact details together with the conversation they came from.

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

Get a conversation › path Parameters

id
​string · uuid · required

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

Success

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

ExtensionsVoice agents