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
    Voice agents
      List voice agentsgetCreate a voice agentpostGet a voice agentgetDelete a voice agentdeleteUpdate a voice agentpatchGet call statisticsgetList callsgetGet one callgetStream a call recordinggetAssign a phone numberpostRelease the phone numberdelete
Administration
Schemas
GenuineAI API
GenuineAI API

Voice agents

AI agents that answer a phone number, and the calls they take.


List voice agents

GET
https://api.genuineai.app/api/v1
/voice-agents

Returns the workspace's voice agents and the numbers they answer on.

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

List voice agents › 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 voice agents › 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 voice agents › Responses

Success

​VoiceAgent[] · 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/voice-agents
curl https://api.genuineai.app/api/v1/voice-agents \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "vag_id": "00000000-0000-0000-0000-000000000000", "vag_active": true, "vag_created": "2024-08-25T15:00:00Z", "vag_updated": "2024-08-25T15:00:00Z", "vag_created_by": "vag_created_by", "vag_key": "vag_key", "vag_name": "vag_name", "vag_agent": "vag_agent", "vag_config": {}, "vag_limits": "vag_limits", "vag_provider_ref": "vag_provider_ref" } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Create a voice agent

POST
https://api.genuineai.app/api/v1
/voice-agents

Creates the agent and its configuration. It has no phone number until you request one.

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

Create a voice agent › 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 voice agent › Request Body

vag_name
​string · minLength: 1 · maxLength: 255 · required
vag_agent
​string · uuid · required
vag_config
​object
vag_limits
​object

Create a voice agent › Responses

Created

An AI agent that answers a phone number, and the number it answers on.
VoiceAgent
vag_id
​string · uuid
vag_active
​boolean
vag_created
​string · date-time
vag_updated
​string · date-time
vag_created_by
​string
vag_key
​string
vag_name
​string
vag_agent
​string
vag_config
​object
vag_limits
​string
vag_provider_ref
​string
POST/voice-agents
curl https://api.genuineai.app/api/v1/voice-agents \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "vag_name": "vag_name", "vag_agent": "00000000-0000-0000-0000-000000000000", "vag_config": {}, "vag_limits": {} }'
Example Request Body
{ "vag_name": "vag_name", "vag_agent": "00000000-0000-0000-0000-000000000000", "vag_config": {}, "vag_limits": {} }
json
Example Responses
{ "vag_id": "00000000-0000-0000-0000-000000000000", "vag_active": true, "vag_created": "2024-08-25T15:00:00Z", "vag_updated": "2024-08-25T15:00:00Z", "vag_created_by": "vag_created_by", "vag_key": "vag_key", "vag_name": "vag_name", "vag_agent": "vag_agent", "vag_config": {}, "vag_limits": "vag_limits", "vag_provider_ref": "vag_provider_ref" }
json
application/json

Get a voice agent

GET
https://api.genuineai.app/api/v1
/voice-agents/{id}

Returns the voice agent with the AI agent behind it and, if one is provisioned, its phone number.

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

Get a voice agent › path Parameters

id
​string · uuid · required

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

Success

An AI agent that answers a phone number, and the number it answers on.
VoiceAgent
vag_id
​string · uuid
vag_active
​boolean
vag_created
​string · date-time
vag_updated
​string · date-time
vag_created_by
​string
vag_key
​string
vag_name
​string
vag_agent
​string
vag_config
​object
vag_limits
​string
vag_provider_ref
​string
GET/voice-agents/{id}
curl https://api.genuineai.app/api/v1/voice-agents/:id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "vag_id": "00000000-0000-0000-0000-000000000000", "vag_active": true, "vag_created": "2024-08-25T15:00:00Z", "vag_updated": "2024-08-25T15:00:00Z", "vag_created_by": "vag_created_by", "vag_key": "vag_key", "vag_name": "vag_name", "vag_agent": "vag_agent", "vag_config": {}, "vag_limits": "vag_limits", "vag_provider_ref": "vag_provider_ref" }
json
application/json

Delete a voice agent

DELETE
https://api.genuineai.app/api/v1
/voice-agents/{id}

Soft delete: the agent stops answering and stops being listed. Its call history is kept, and a phone number it still holds is not released — release it first if you are done paying for it.

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

Delete a voice agent › path Parameters

id
​string · uuid · required

Delete a voice agent › 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 voice agent › Responses

Success. No content.

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

PATCH
https://api.genuineai.app/api/v1
/voice-agents/{id}

Applies the vag_-prefixed fields present in the body. Changes reach the telephony provider on the next call, not retroactively.

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

Update a voice agent › path Parameters

id
​string · uuid · required

Update a voice agent › 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 voice agent › Request Body optional

vag_name
​string · minLength: 1 · maxLength: 255
vag_active
​boolean
vag_agent
​string · uuid
vag_config
​object
vag_limits
​object

Update a voice agent › Responses

Success

An AI agent that answers a phone number, and the number it answers on.
VoiceAgent
vag_id
​string · uuid
vag_active
​boolean
vag_created
​string · date-time
vag_updated
​string · date-time
vag_created_by
​string
vag_key
​string
vag_name
​string
vag_agent
​string
vag_config
​object
vag_limits
​string
vag_provider_ref
​string
PATCH/voice-agents/{id}
curl https://api.genuineai.app/api/v1/voice-agents/:id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "vag_name": "vag_name", "vag_active": true, "vag_agent": "00000000-0000-0000-0000-000000000000", "vag_config": {}, "vag_limits": {} }'
Example Request Body
{ "vag_name": "vag_name", "vag_active": true, "vag_agent": "00000000-0000-0000-0000-000000000000", "vag_config": {}, "vag_limits": {} }
json
Example Responses
{ "vag_id": "00000000-0000-0000-0000-000000000000", "vag_active": true, "vag_created": "2024-08-25T15:00:00Z", "vag_updated": "2024-08-25T15:00:00Z", "vag_created_by": "vag_created_by", "vag_key": "vag_key", "vag_name": "vag_name", "vag_agent": "vag_agent", "vag_config": {}, "vag_limits": "vag_limits", "vag_provider_ref": "vag_provider_ref" }
json
application/json

Get call statistics

GET
https://api.genuineai.app/api/v1
/voice-agents/{id}/analytics

Call count, total duration and credits consumed over the last days (30 by default).

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

Get call statistics › path Parameters

id
​string · uuid · required

Get call statistics › query Parameters

days
​integer · min: 1 · max: 90

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

Success

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

List calls

GET
https://api.genuineai.app/api/v1
/voice-agents/{id}/calls

Returns the calls this agent took, newest first, with how each one ended.

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

List calls › path Parameters

id
​string · uuid · required

List calls › 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_]+$
vcall_created
​array
vcall_status
​string

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

Success

​VoiceCall[] · 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/voice-agents/{id}/calls
curl https://api.genuineai.app/api/v1/voice-agents/:id/calls \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "vcall_id": "00000000-0000-0000-0000-000000000000", "vcall_created": "2024-08-25T15:00:00Z", "vcall_type": "vcall_type", "vcall_from": "vcall_from", "vcall_to": "vcall_to", "vcall_status": "vcall_status", "vcall_ended_reason": "vcall_ended_reason", "vcall_started": "vcall_started", "vcall_ended": "vcall_ended", "vcall_duration_seconds": "vcall_duration_seconds", "vcall_credits": 0, "vcall_summary": "vcall_summary", "vcall_analysis": "vcall_analysis", "vcall_has_recording": true, "vcall_has_transcript": true } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Get one call

GET
https://api.genuineai.app/api/v1
/voice-agents/{id}/calls/{call_id}

Returns the call with its transcript, summary and analysis. Details are refreshed from the telephony provider as they are read, so a call that just ended fills in rather than staying empty.

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

Get one call › path Parameters

call_id
​string · uuid · required
id
​string · uuid · required

Get one call › 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 one call › Responses

Success

One call a voice agent took: who called, how it ended, and what was said.
VoiceCall
vcall_id
​string · uuid
vcall_created
​string · date-time
vcall_type
​string
vcall_from
​string
vcall_to
​string
vcall_status
​string
vcall_ended_reason
​string
vcall_started
​string
vcall_ended
​string
vcall_duration_seconds
​string
vcall_credits
​number
vcall_summary
​string
vcall_analysis
​string
vcall_has_recording
​boolean
vcall_has_transcript
​boolean
GET/voice-agents/{id}/calls/{call_id}
curl https://api.genuineai.app/api/v1/voice-agents/:id/calls/:call_id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "vcall_id": "00000000-0000-0000-0000-000000000000", "vcall_created": "2024-08-25T15:00:00Z", "vcall_type": "vcall_type", "vcall_from": "vcall_from", "vcall_to": "vcall_to", "vcall_status": "vcall_status", "vcall_ended_reason": "vcall_ended_reason", "vcall_started": "vcall_started", "vcall_ended": "vcall_ended", "vcall_duration_seconds": "vcall_duration_seconds", "vcall_credits": 0, "vcall_summary": "vcall_summary", "vcall_analysis": "vcall_analysis", "vcall_has_recording": true, "vcall_has_transcript": true }
json
application/json

Stream a call recording

GET
https://api.genuineai.app/api/v1
/voice-agents/{id}/calls/{call_id}/recording

Streams the audio rather than handing back a provider URL. The provider's own links are raw bucket endpoints or expiring presigned URLs and are not reliably playable in a browser, so this resolves a working source per request. Responds with audio, not JSON.

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

Stream a call recording › path Parameters

call_id
​string · uuid · required
id
​string · uuid · required

Stream a call recording › 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 a call recording › Responses

Success

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

Assign a phone number

POST
https://api.genuineai.app/api/v1
/voice-agents/{id}/phone-number

Rents a number and points it at this agent. This starts a recurring third-party charge.

Pick the country with country (US by default) and optionally an areaCode where the country supports one. An agent may hold one number at a time: asking again while it has one returns 400, so release the current number before requesting a different one.

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

Assign a phone number › path Parameters

id
​string · uuid · required

Assign a phone number › 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.

Assign a phone number › Request Body optional

country
​string · enum
Enum values:
US
CA
GB
AU
areaCode
​string · pattern: ^\d{3}$

Assign a phone number › Responses

Success

No data returned
POST/voice-agents/{id}/phone-number
curl https://api.genuineai.app/api/v1/voice-agents/:id/phone-number \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "country": "US", "areaCode": "areaCode" }'
Example Request Body
{ "country": "US", "areaCode": "areaCode" }
json
Example Responses
No example specified for this content type

Release the phone number

DELETE
https://api.genuineai.app/api/v1
/voice-agents/{id}/phone-number

Gives the number back to the provider and stops the charge. The number is gone — you will not get the same one back, so anything advertising it needs updating first.

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

Release the phone number › path Parameters

id
​string · uuid · required

Release the phone number › 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.

Release the phone number › Responses

Success

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

Chat widgetsUsers