Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.1.0
info:
title: Quo API
version: '2026-10-24'
description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-24: 15 operation(s) read from 22 public documentation page(s) (each
operation names its page in x-source). This is not the provider''s published contract; Quo has published no machine-readable contract that
the pipeline could find. Engine: local.'
x-evidence-tiers:
code-example: 22
documentation: -7
pages-with-code: 22
pages-read: 22
x-generated-from: documentation
x-provenance: generated
x-authored-by: API Evangelist
x-generated: '2026-10-24'
x-generator: generate-contract-from-docs.py
x-engine: local
x-sources:
- https://www.quo.com/docs/mdx/beta/webhooks-api-reference
- https://www.quo.com/docs/mdx/api-reference/calls/list-calls
- https://www.quo.com/docs/mdx/api-reference/tasks/list-tasks
- https://www.quo.com/docs/mdx/api-reference/users/list-users
- https://www.quo.com/docs/mdx/api-reference/tasks/create-a-task
- https://www.quo.com/docs/mdx/api-reference/tasks/reopen-a-task
- https://www.quo.com/docs/mdx/api-reference/tasks/update-a-task
- https://www.quo.com/docs/mdx/api-reference/tasks/complete-a-task
- https://www.quo.com/docs/mdx/api-reference/calls/get-a-call-by-id
- https://www.quo.com/docs/mdx/api-reference/contacts/list-contacts
- https://www.quo.com/docs/mdx/api-reference/messages/list-messages
- https://www.quo.com/docs/mdx/api-reference/users/get-a-user-by-id
- https://www.quo.com/docs/mdx/api-reference/send-your-first-message
- https://www.quo.com/docs/mdx/api-reference/tasks/gets-a-task-by-id
- https://www.quo.com/docs/mdx/api-reference/contacts/create-a-contact
- https://www.quo.com/docs/mdx/api-reference/contacts/delete-a-contact
- https://www.quo.com/docs/mdx/api-reference/tasks/delete-a-task-by-id
- https://www.quo.com/docs/mdx/api-reference/webhooks/lists-all-webhooks
- https://www.quo.com/docs/mdx/api-reference/contacts/get-a-contact-by-id
- https://www.quo.com/docs/mdx/api-reference/messages/get-a-message-by-id
- https://www.quo.com/docs/mdx/api-reference/messages/send-a-text-message
- https://www.quo.com/docs/mdx/api-reference/webhooks/get-a-webhook-by-id
servers:
- url: https://api.quo.com
paths:
/v1/calls:
get:
operationId: get_v1_calls
tags:
- Calls
summary: GET /v1/calls
x-source: https://www.quo.com/docs/mdx/api-reference/calls/list-calls
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1CallsResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/calls --header 'Authorization: <api-key>' 200 400 401 403 404 500 { \n\
\ \"data\" : [ \n { \n \"answeredAt\" : \"2022-01-01T00:00:00Z\" , \n \"answeredBy\" : \"USlHhXmRMz\" , \n \"initiatedBy\" : \"USlHhXmRMz\"\
\ , \n \"direction\" : \"incoming\" , \n \"status\" : \"completed\" , \n \"completedAt\" : \"2022-01-01T00:00:00Z\" , \n \"createdAt\"\
\ : \"2022-01-01T00:00:00Z\" , \n \"callRoute\""
/v1/contacts:
get:
operationId: get_v1_contacts
tags:
- Contacts
summary: GET /v1/contacts
x-source: https://www.quo.com/docs/mdx/api-reference/contacts/list-contacts
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1ContactsResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/contacts --header 'Authorization: <api-key>' 200 400 401 403 404 409\
\ 500 { \n \"data\" : [ \n { \n \"id\" : \"664d0db69fcac7cf2e6ec\" , \n \"externalId\" : \"664d0db69fcac7cf2e6ec\" , \n \"source\" :\
\ \"public-api\" , \n \"sourceUrl\" : \"https://openphone.co/contacts/664d0db69fcac7cf2e6ec\" , \n \"defaultFields\" : { \n \"company\"\
\ : \"Quo\" , \n \"emails\" : [ \n { \n \"name\" : \""
post:
operationId: post_v1_contacts
tags:
- Contacts
summary: POST /v1/contacts
x-source: https://www.quo.com/docs/mdx/api-reference/contacts/create-a-contact
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1ContactsResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request POST --url https://api.quo.com/v1/contacts --header 'Authorization: <api-key>' --header 'Content-Type:\
\ application/json' --data ' \n { \n \"defaultFields\": { \n \"firstName\": \"John\", \n \"company\": \"Quo\", \n \"emails\": [ \n\
\ { \n \"name\": \"company email\", \n \"value\": \"abc@example.com\" \n } \n ], \n \"lastName\": \"Doe\", \n \"phoneNumbers\": [ \n\
\ { \n \"name\": \"company phone\", \n \"value\": \"+1234567890"
/v1/contacts/{id}:
delete:
operationId: delete_v1_contacts_id
tags:
- Contacts
summary: DELETE /v1/contacts/{id}
x-source: https://www.quo.com/docs/mdx/api-reference/contacts/delete-a-contact
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request DELETE --url https://api.quo.com/v1/contacts/{id} --header 'Authorization: <api-key>' 400 401 403 404\
\ 409 500 { \n \"message\" : \"<string>\" , \n \"code\" : \"0801400\" , \n \"status\" : 400 , \n \"docs\" : \"https://quo.com/docs\"\
\ , \n \"title\" : \"Invalid Custom Field Item\" , \n \"trace\" : \"<string>\" , \n \"errors\" : [ \n { \n \"path\" : \"<string>\" ,\
\ \n \"message\" : \"<string>\" , \n \"schema\" : { \n \"type\" "
get:
operationId: get_v1_contacts_id
tags:
- Contacts
summary: GET /v1/contacts/{id}
x-source: https://www.quo.com/docs/mdx/api-reference/contacts/get-a-contact-by-id
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1ContactsIdResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/contacts/{id} --header 'Authorization: <api-key>' 200 400 401 403 404\
\ 409 500 {\n \"data\": {\n \"id\": \"664d0db69fcac7cf2e6ec\",\n \"externalId\": \"664d0db69fcac7cf2e6ec\",\n \"source\": \"public-api\"\
,\n \"sourceUrl\": \"https://openphone.co/contacts/664d0db69fcac7cf2e6ec\",\n \"defaultFields\": {\n \"company\": \"Quo\",\n \"emails\"\
: [\n {\n \"name\": \"company email\",\n \"value"
/v1/messages:
get:
operationId: get_v1_messages
tags:
- Messages
summary: GET /v1/messages
x-source: https://www.quo.com/docs/mdx/api-reference/messages/list-messages
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1MessagesResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/messages --header 'Authorization: <api-key>' 200 400 401 402 403 404\
\ 500 { \n \"data\" : [ \n { \n \"id\" : \"AC123abc\" , \n \"to\" : [ \n \"+15555555555\" \n ], \n \"from\" : \"+15555555555\" , \n\
\ \"text\" : \"Hello, world!\" , \n \"phoneNumberId\" : \"PN123abc\" , \n \"conversationId\" : \"CN123abc\" , \n \"direction\" : \"\
incoming\" , \n \"userId\" : \"US123abc\" , \n \"status\" : \"sent\""
post:
operationId: post_v1_messages
tags:
- Messages
summary: POST /v1/messages
x-source: https://www.quo.com/docs/mdx/api-reference/send-your-first-message
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1MessagesRequest'
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl --request POST --url https://api.quo.com/v1/messages --header 'Authorization: YOUR_API_KEY' --header 'Content-Type:\
\ application/json' --data '{ \n \"content\": \"<string>\", \n \"from\": \"<string>\", \n \"to\": [ \n \"+15555555555\" \n ], \n \"\
userId\": \"<string>\" \n }' \n Be sure to format phone numbers in E.164 format (+1234567890). \n Summary \n You are now able to send\
\ a text message to anyone in US or Ca"
/v1/messages/{id}:
get:
operationId: get_v1_messages_id
tags:
- Messages
summary: GET /v1/messages/{id}
x-source: https://www.quo.com/docs/mdx/api-reference/messages/get-a-message-by-id
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1MessagesIdResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/messages/{id} --header 'Authorization: <api-key>' 200 400 401 402 403\
\ 404 500 { \n \"data\" : { \n \"id\" : \"AC123abc\" , \n \"to\" : [ \n \"+15555555555\" \n ], \n \"from\" : \"+15555555555\" , \n \"\
text\" : \"Hello, world!\" , \n \"phoneNumberId\" : \"PN123abc\" , \n \"conversationId\" : \"CN123abc\" , \n \"direction\" : \"incoming\"\
\ , \n \"userId\" : \"US123abc\" , \n \"status\" : \"sent"
/v1/phone-numbers:
get:
operationId: get_v1_phone_numbers
tags:
- Phone Numbers
summary: GET /v1/phone-numbers
x-source: https://www.quo.com/docs/mdx/api-reference/send-your-first-message
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl --request GET --url https://api.quo.com/v1/phone-numbers --header 'Authorization: YOUR_API_KEY' \n 2. Specify user\
\ ID (optional) \n If you’d like to send the text message as a particular Quo member in your workspace, make sure to include this userId\
\ in your request body. If userId is not specified, the sender will default to the phone number owner. \n 3. Send your message \n\
\ You are now rea"
/v1/tasks:
get:
operationId: get_v1_tasks
tags:
- Tasks
summary: GET /v1/tasks
x-source: https://www.quo.com/docs/mdx/api-reference/tasks/list-tasks
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1TasksResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/tasks --header 'Authorization: <api-key>' 200 400 401 402 403 404 500\
\ { \n \"data\" : [ \n { \n \"taskId\" : \"<string>\" , \n \"phoneNumberId\" : \"<string>\" , \n \"conversationId\" : \"<string>\" ,\
\ \n \"activityId\" : \"<string>\" , \n \"phoneNumberGroupId\" : \"<string>\" , \n \"orgId\" : \"<string>\" , \n \"title\" : \"<string>\"\
\ , \n \"description\" : \"<string>\" , \n \"dueDate\" : "
post:
operationId: post_v1_tasks
tags:
- Tasks
summary: POST /v1/tasks
x-source: https://www.quo.com/docs/mdx/api-reference/tasks/create-a-task
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1TasksResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request POST --url https://api.quo.com/v1/tasks --header 'Authorization: <api-key>' --header 'Content-Type: application/json'\
\ --data ' \n { \n \"title\": \"Follow up with customer\", \n \"description\": \"Discuss pricing and onboarding next steps.\", \n \"\
phoneNumberId\": \"<string>\", \n \"dueDate\": \"2023-11-07T05:31:56Z\", \n \"assignedTo\": \"<string>\" \n } \n ' 201 400 401 402 403\
\ 404 500 { \n \"data\" : "
/v1/users:
get:
operationId: get_v1_users
tags:
- Users
summary: GET /v1/users
x-source: https://www.quo.com/docs/mdx/api-reference/users/list-users
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1UsersResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/users --header 'Authorization: <api-key>' 200 400 401 403 404 500 { \n\
\ \"data\" : [ \n { \n \"id\" : \"US123abc\" , \n \"email\" : \"johndoe@example.com\" , \n \"firstName\" : \"John\" , \n \"lastName\"\
\ : \"Doe\" , \n \"pictureUrl\" : \"https://example.com/picture.jpg\" , \n \"role\" : \"owner\" , \n \"createdAt\" : \"2022-01-01T00:00:00Z\"\
\ , \n \"updatedAt\" : \"2022-01-01T00:00:00Z\" "
/v1/webhooks:
get:
operationId: get_v1_webhooks
tags:
- Webhooks
summary: GET /v1/webhooks
x-source: https://www.quo.com/docs/mdx/api-reference/webhooks/lists-all-webhooks
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1WebhooksResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/webhooks --header 'Authorization: <api-key>' 200 400 401 403 404 500\
\ { \n \"data\" : [ \n { \n \"id\" : \"WHabcd1234\" , \n \"userId\" : \"US123abc\" , \n \"orgId\" : \"OR1223abc\" , \n \"label\" : \"\
my webhook label\" , \n \"status\" : \"enabled\" , \n \"url\" : \"https://example.com/\" , \n \"key\" : \"example-key\" , \n \"createdAt\"\
\ : \"2022-01-01T00:00:00Z\" , \n \"updatedAt\" : \"2022"
/v1/webhooks/{id}:
get:
operationId: get_v1_webhooks_id
tags:
- Webhooks
summary: GET /v1/webhooks/{id}
x-source: https://www.quo.com/docs/mdx/api-reference/webhooks/get-a-webhook-by-id
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1WebhooksIdResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/v1/webhooks/{id} --header 'Authorization: <api-key>' 200 400 401 403 404\
\ 500 { \n \"data\" : { \n \"id\" : \"WHabcd1234\" , \n \"userId\" : \"US123abc\" , \n \"orgId\" : \"OR1223abc\" , \n \"label\" : \"\
my webhook label\" , \n \"status\" : \"enabled\" , \n \"url\" : \"https://example.com/\" , \n \"key\" : \"example-key\" , \n \"createdAt\"\
\ : \"2022-01-01T00:00:00Z\" , \n \"updatedAt\" : \"202"
/webhooks:
get:
operationId: get_webhooks
tags:
- Webhooks
summary: GET /webhooks
x-source: https://www.quo.com/docs/mdx/beta/webhooks-api-reference
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetWebhooksResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl curl --request GET --url https://api.quo.com/webhooks --header 'Authorization: <api-key>' --header 'Quo-Api-Version:\
\ <quo-api-version>' 200 401 403 500 { \n \"data\" : [ \n { \n \"id\" : \"123\" , \n \"orgId\" : \"OR1223abc\" , \n \"label\" : \"my\
\ webhook label\" , \n \"status\" : \"enabled\" , \n \"url\" : \"https://example.com/\" , \n \"createdAt\" : \"2022-01-01T00:00:00Z\"\
\ , \n \"updatedAt\" : \"2022-01-01T00:00:00Z\" , \n \""
components:
schemas:
GetV1CallsResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
answeredAt:
type: string
format: date-time
answeredBy:
type: string
initiatedBy:
type: string
direction:
type: string
status:
type: string
completedAt:
type: string
format: date-time
createdAt:
type: string
format: date-time
callRoute:
type: string
duration:
type: integer
forwardedFrom:
type: string
forwardedTo:
type: string
aiHandled:
type: string
id:
type: string
phoneNumberId:
type: string
participants:
type: array
items:
type: string
updatedAt:
type: string
format: date-time
userId:
type: string
totalItems:
type: integer
nextPageToken:
type: string
GetV1ContactsResponse:
type: object
properties:
id:
type: string
externalId:
type: string
source:
type: string
sourceUrl:
type: string
defaultFields:
type: object
properties:
company:
type: string
emails:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
id:
type: string
firstName:
type: string
lastName:
type: string
phoneNumbers:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
id:
type: string
role:
type: string
customFields:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
value:
type: array
items:
type: string
key:
type: string
id:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
createdByUserId:
type: string
PostV1ContactsResponse:
type: object
properties:
id:
type: string
externalId:
type: string
source:
type: string
sourceUrl:
type: string
defaultFields:
type: object
properties:
company:
type: string
emails:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
id:
type: string
firstName:
type: string
lastName:
type: string
phoneNumbers:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
id:
type: string
role:
type: string
customFields:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
value:
type: array
items:
type: string
key:
type: string
id:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
createdByUserId:
type: string
GetV1ContactsIdResponse:
type: object
properties:
id:
type: string
externalId:
type: string
source:
type: string
sourceUrl:
type: string
defaultFields:
type: object
properties:
company:
type: string
emails:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
id:
type: string
firstName:
type: string
lastName:
type: string
phoneNumbers:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
id:
type: string
role:
type: string
customFields:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
value:
type: array
items:
type: string
key:
type: string
id:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
createdByUserId:
type: string
GetV1MessagesResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
to:
type: array
items:
type: string
from:
type: string
text:
type: string
phoneNumberId:
type: string
conversationId:
type: string
direction:
type: string
userId:
type: string
status:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
media:
type: array
items:
type: object
properties:
url:
type: string
type:
type: string
totalItems:
type: integer
nextPageToken:
type: string
PostV1MessagesRequest:
type: object
properties:
content:
type: string
from:
type: string
to:
type: array
items:
type: string
userId:
type: string
GetV1MessagesIdResponse:
type: object
properties:
data:
type: object
properties:
id:
type: string
to:
type: array
items:
type: string
from:
type: string
text:
type: string
phoneNumberId:
type: string
conversationId:
type: string
direction:
type: string
userId:
type: string
status:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
media:
type: array
items:
type: object
properties:
url:
type: string
type:
type: string
GetV1TasksResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
taskId:
type: string
phoneNumberId:
type: string
conversationId:
type: string
activityId:
type: string
phoneNumberGroupId:
type: string
orgId:
type: string
title:
type: string
description:
type: string
dueDate:
type: string
format: date-time
assignedTo:
type: string
assignedBy:
type: string
createdAt:
type: string
format: date-time
createdBy:
type: string
completed:
type: boolean
isDeleted:
type: boolean
revision:
type: string
totalItems:
type: integer
nextPageToken:
type: string
PostV1TasksResponse:
type: object
properties:
data:
type: object
properties:
taskId:
type: string
revision:
type: string
phoneNumberId:
type: string
conversationId:
type: string
activityId:
type: string
GetV1UsersResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
email:
type: string
firstName:
type: string
lastName:
type: string
pictureUrl:
type: string
role:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
totalItems:
type: integer
nextPageToken:
type: string
GetV1WebhooksResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
userId:
type: string
orgId:
type: string
label:
type: string
status:
type: string
url:
type: string
key:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
deletedAt:
type: string
format: date-time
events:
type: array
items:
type: string
resourceIds:
type: array
items:
type: string
GetV1WebhooksIdResponse:
type: object
properties:
data:
type: object
properties:
id:
type: string
userId:
type: string
orgId:
type: string
label:
type: string
status:
type: string
url:
type: string
key:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
deletedAt:
type: string
format: date-time
events:
type: array
items:
type: string
resourceIds:
type: array
items:
type: string
GetWebhooksResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
orgId:
type: string
label:
type: string
status:
type: string
url:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
events:
type: array
items:
type: string
resourceIds:
type: array
items:
type: string
apiVersion:
type: string
format: date
securitySchemes:
apiKey:
type: apiKey
in: header
name: Authorization
security:
- apiKey: []
tags:
- name: Calls
- name: Contacts
- name: Messages
- name: Phone Numbers
- name: Tasks
- name: Users
- name: Webhooks