OpenAPI Specification
openapi: 3.1.0
info:
title: Quo Public Calls Contacts API
version: 1.0.0
description: API for connecting with Quo.
contact:
name: Quo Support
email: support@quo.com
url: https://support.quo.com/
termsOfService: https://www.quo.com/terms
servers:
- description: Production server
url: https://api.quo.com
security:
- apiKey: []
tags:
- description: Operations related to contacts
name: Contacts
paths:
/contacts:
get:
tags:
- Contacts
summary: List contacts
description: Get a paginated list of contacts.
operationId: listContacts
parameters:
- in: query
name: externalIds
required: false
schema:
anyOf:
- description: Filter by external IDs
maxItems: 50
type: array
items:
type: string
- type: 'null'
- in: query
name: sources
required: false
schema:
anyOf:
- description: Filter by source labels
maxItems: 50
type: array
items:
type: string
- type: 'null'
- in: query
name: limit
required: false
schema:
anyOf:
- minimum: 1
maximum: 50
default: 10
description: Page size
type: integer
- type: 'null'
- in: query
name: after
required: false
schema:
anyOf:
- examples:
- eyJsYXN0SWQiOiJVU211a09NaXBhIn0
type: string
- type: 'null'
- in: header
name: Quo-Api-Version
required: true
schema:
type: string
enum:
- '2026-03-30'
description: 'API version header. Supported values: 2026-03-30'
security:
- apiKey: []
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- data
- nextCursor
properties:
data:
type: array
items:
type: object
required:
- id
- createdAt
- updatedAt
- actorId
properties:
id:
description: The ID of the contact.
examples:
- 6a145ff26212a192852c856e
pattern: ^(.*)$
type: string
example: 6a145ff26212a192852c856e
externalId:
anyOf:
- description: The external ID of the contact.
examples:
- '1234567890'
type: string
example: '1234567890'
- type: 'null'
source:
anyOf:
- description: The source of the contact.
examples:
- public-api
type: string
example: public-api
- type: 'null'
sourceUrl:
anyOf:
- description: A link to the contact in the source system.
format: uri
examples:
- https://example.com/contacts/001
minLength: 1
maxLength: 200
type: string
example: https://example.com/contacts/001
- type: 'null'
firstName:
anyOf:
- description: The first name of the contact.
examples:
- John
type: string
example: John
- type: 'null'
lastName:
anyOf:
- description: The last name of the contact.
examples:
- Doe
type: string
example: Doe
- type: 'null'
company:
anyOf:
- description: The company of the contact.
examples:
- Quo
type: string
example: Quo
- type: 'null'
role:
anyOf:
- description: The role of the contact.
examples:
- admin
type: string
example: admin
- type: 'null'
createdAt:
description: The timestamp of the contact creation.
examples:
- '2021-01-01T00:00:00Z'
format: date-time
type: string
example: '2021-01-01T00:00:00Z'
updatedAt:
description: The timestamp of the contact update.
examples:
- '2021-01-01T00:00:00Z'
format: date-time
type: string
example: '2021-01-01T00:00:00Z'
actorId:
description: The actor ID of the contact.
examples:
- US123abc
example: US123abc
anyOf:
- pattern: ^US(.*)$
type: string
- pattern: ^SYU(.*)$
type: string
nextCursor:
description: Cursor for the next page, or null when there are no more pages.
examples:
- eyJsYXN0SWQiOiJVU211a09NaXBhIn0
example: eyJsYXN0SWQiOiJVU211a09NaXBhIn0
anyOf:
- type: string
- type: 'null'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Bad Request
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: The input was invalid
docs: https://quo.com/docs
title: Bad Request
trace: '6897907457496870895'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Unauthorized
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: The contact was not found
docs: https://quo.com/docs
title: Not Found
trace: '6897907457496870895'
'403':
description: Forbidden
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Forbidden
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: User is forbidden to perform this action
docs: https://quo.com/docs
title: Forbidden
trace: '6897907457496870895'
'404':
description: Not Found
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Not Found
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: User is unauthorized to perform this action
docs: https://quo.com/docs
title: Unauthorized
trace: '6897907457496870895'
'500':
description: Unknown Error
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Unknown
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: An unknown error has occurred
docs: https://quo.com/docs
title: Unknown Error
trace: '6897907457496870895'
/contacts/{contactId}:
get:
tags:
- Contacts
summary: Get a contact by ID
description: Retrieve detailed information about a specific contact in your Quo workspace using the contact's unique identifier.
operationId: getContactById
parameters:
- in: path
name: contactId
required: true
schema:
description: The unique identifier of the contact being retrieved.
examples:
- 6a145ff26212a192852c856e
pattern: ^(.*)$
type: string
example: 6a145ff26212a192852c856e
- in: header
name: Quo-Api-Version
required: true
schema:
type: string
enum:
- '2026-03-30'
description: 'API version header. Supported values: 2026-03-30'
security:
- apiKey: []
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: object
required:
- id
- createdAt
- updatedAt
- actorId
properties:
id:
description: The ID of the contact.
examples:
- 6a145ff26212a192852c856e
pattern: ^(.*)$
type: string
example: 6a145ff26212a192852c856e
externalId:
anyOf:
- description: The external ID of the contact.
examples:
- '1234567890'
type: string
example: '1234567890'
- type: 'null'
source:
anyOf:
- description: The source of the contact.
examples:
- public-api
type: string
example: public-api
- type: 'null'
sourceUrl:
anyOf:
- description: A link to the contact in the source system.
format: uri
examples:
- https://example.com/contacts/001
minLength: 1
maxLength: 200
type: string
example: https://example.com/contacts/001
- type: 'null'
firstName:
anyOf:
- description: The first name of the contact.
examples:
- John
type: string
example: John
- type: 'null'
lastName:
anyOf:
- description: The last name of the contact.
examples:
- Doe
type: string
example: Doe
- type: 'null'
company:
anyOf:
- description: The company of the contact.
examples:
- Quo
type: string
example: Quo
- type: 'null'
role:
anyOf:
- description: The role of the contact.
examples:
- admin
type: string
example: admin
- type: 'null'
createdAt:
description: The timestamp of the contact creation.
examples:
- '2021-01-01T00:00:00Z'
format: date-time
type: string
example: '2021-01-01T00:00:00Z'
updatedAt:
description: The timestamp of the contact update.
examples:
- '2021-01-01T00:00:00Z'
format: date-time
type: string
example: '2021-01-01T00:00:00Z'
actorId:
description: The actor ID of the contact.
examples:
- US123abc
example: US123abc
anyOf:
- pattern: ^US(.*)$
type: string
- pattern: ^SYU(.*)$
type: string
'400':
description: Bad Request
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Bad Request
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: The input was invalid
docs: https://quo.com/docs
title: Bad Request
trace: '6897907457496870895'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Unauthorized
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: The contact was not found
docs: https://quo.com/docs
title: Not Found
trace: '6897907457496870895'
'403':
description: Forbidden
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Forbidden
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: User is forbidden to perform this action
docs: https://quo.com/docs
title: Forbidden
trace: '6897907457496870895'
'404':
description: Not Found
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Not Found
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: User is unauthorized to perform this action
docs: https://quo.com/docs
title: Unauthorized
trace: '6897907457496870895'
'500':
description: Unknown Error
content:
application/json:
schema:
type: object
required:
- message
- docs
- title
properties:
message:
type: string
docs:
const: https://quo.com/docs
type: string
title:
const: Unknown
type: string
trace:
type: string
errors:
type: array
items:
type: object
required:
- path
- message
- schema
properties:
path:
type: string
message:
type: string
value: {}
schema:
type: object
required:
- type
properties:
type:
type: string
example:
message: An unknown error has occurred
docs: https://quo.com/docs
title: Unknown Error
trace: '6897907457496870895'
/v1/contacts:
post:
tags:
- Contacts
summary: Create a contact
description: Create a contact for a workspace.
operationId: createContact_v1
parameters: []
security:
- apiKey: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- defaultFields
properties:
defaultFields:
type: object
required:
- firstName
properties:
company:
anyOf:
- description: The contact's company name.
examples:
- Quo
type: string
example: Quo
- type: 'null'
emails:
type: array
items:
type: object
required:
- name
- value
properties:
name:
description: The name for the contact's email address.
examples:
- company email
type: string
example: company email
value:
anyOf:
- description: The contact's email address.
examples:
- abc@example.com
type: string
example: abc@example.com
- type: 'null'
firstName:
anyOf:
- description: The contact's first name.
examples:
- John
type: string
example: John
- type: 'null'
lastName:
anyOf:
- description: The contact's last name.
examples:
- Doe
type: string
example: Doe
- type: 'null'
phoneNumbers:
type: array
items:
type: object
required:
- name
- value
properties:
name:
description: The name of the contact's phone number.
examples:
- company phone
type: string
example: company phone
value:
anyOf:
- description: The contact's phone number.
examples:
- '+12345678901'
type: string
example: '+12345678901'
- type: 'null'
role:
anyOf:
- description: The contact's role.
examples:
- Sales
type: string
example: Sales
- type: 'null'
customFields:
type: array
items:
allOf:
- type: object
properties:
key:
description: The identifying key for contact custom field.
examples:
- inbound-lead
type: string
example: inbound-lead
- anyOf:
- type: object
required:
- value
properties:
value:
description: Value defined for the multi select type custom field.
examples:
- - option1
- option2
example:
- option1
- option2
anyOf:
- type: array
items:
type: string
- type: 'null'
- type: object
required:
- value
properties:
value:
description: Value defined for the address, string, or url type custom field.
examples:
- 123 Main St
example: 123 Main St
anyOf:
- type: string
- type: 'null'
- type: object
required:
- value
properties:
value:
description: Value defined for the boolean type custom field.
examples:
- 'false'
example: 'false'
anyOf:
# --- truncated at 32 KB (149 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openphone/refs/heads/main/openapi/openphone-contacts-api-openapi.yml