# Openphone > ## Documentation Index --- # Source: https://www.quo.com/docs/mdx/api-reference/authentication.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Authentication > Learn how to gain API access. ## Prerequisites Before you begin using the Quo API, ensure you have: Need an account? Follow our [account creation guide](https://support.openphone.com/hc/en-us/articles/1500009886621-How-to-create-an-OpenPhone-account). Owner or admin privileges in your Quo workspace. **US Messaging Registration Required:** To send text messages to US numbers via the API, you must complete US Carrier Registration. Learn more [here](https://support.openphone.com/hc/en-us/articles/15519949741463-Guide-to-US-carrier-registration-for-OpenPhone-customers). ## API key generation The Quo API uses API keys for secure authentication. Follow these steps to get started: Access your Quo account. Navigate to the "API" tab under workspace settings. Remember, you need workspace owner or admin privileges to access this tab. Click "Generate API key" and provide a descriptive label. Each key provides full API access. Label your keys based on their intended use (e.g., "Production Environment" or "Testing Integration") Include your API key in the Authorization header of each request: ` Authorization: YOUR_API_KEY` The Quo API does not use a Bearer token for authentication. ## Security guidelines Your API key carries the same privileges as your Quo account. Treat it with the same level of security as your password. ### Best practices * Keep your API keys confidential * Don’t share your API keys in publicly accessible areas such as GitHub or client-side code * Regularly rotate your API keys to enhance security * If a key is compromised, revoke it immediately and generate a new one ### Revoking access If a key is compromised or no longer needed: 1. Navigate to the "API" tab in Workspace Settings 2. Locate the specific key 3. Click the ellipsis (three dots) icon and select 'delete' to immediately revoke access 4. Generate a new key if needed Deleting an API key only affects the integrations using that specific key. Other keys and integrations will continue to function normally. --- # Source: https://www.quo.com/docs/mdx/guides/building-with-ai-llms.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Building with AI LLMs > Learn how to use AI Language Models to build applications with the Quo API. ## Introduction Building with Large Language Models (LLMs) can significantly accelerate your Quo API integration development. This guide will help you effectively use LLMs to create applications with our API. While we provide examples using Claude, the principles and practices outlined here apply to any capable LLM platform. ## Getting started ### Documentation setup Before beginning development with an LLM, gather and prepare the necessary documentation: Get our [OpenAPI specification](https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json) for detailed endpoint information. **Tip**: Right-click and select "Save Link As..." to download the file Download and extract our [complete documentation package](https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-llm-ready-docs-prod.zip) Provide these resources to your LLM to help it understand Quo API capabilities ## Development process ### Working with LLMs Start by clearly describing your integration objectives to the LLM Share relevant API documentation and specifications Let the LLM help break complex features into manageable tasks Generate and review code one step at a time ### Best practices * Start with core functionality * Iterate to add features * Test each component thoroughly * Move forward only after validation * Never share API keys with LLMs * Keep sensitive data out of prompts * Validate all generated code * Follow security best practices * Follow Quo API rate limits * Implement proper error handling * Monitor API usage * Optimize API calls ## Example interactions Here's a practical example of how to instruct an LLM to help build with our API: ```text theme={null} I want to build an application that: 1. Displays a list of all my phone numbers 2. Allows me to select a number to send a message with 3. Lets me input an external phone number to send a message to 4. Sends a message to the external phone number Please help me implement this using the Quo API. ``` ```text theme={null} Help me create a system to: 1. Sync contacts from my CRM 2. Update contact details automatically 3. Track message history per contact 4. Generate contact activity reports ``` ## Integration patterns Automate message handling and responses Sync and manage contact information Process call summaries and recording data Manage scheduling and reminders ## Implementation checklist Thoroughly review all LLM-generated code Test extensively in a development environment Implement comprehensive error handling and logging Deploy with appropriate monitoring systems Continuously improve based on usage and feedback Need more detailed guidance? Check out our comprehensive [API Reference](/api-reference/introduction) for detailed endpoint documentation and examples. --- # Source: https://www.quo.com/docs/mdx/api-reference/changelog.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Changelog > Stay up to date with the latest improvements to the API. View [main product Changelog.](https://support.quo.com/changelog) ### Minor Changes * Adds a property `externalId` to the contact model. Adds `externalId` and `source` as optional parameters to the Create Contact (`POST /contacts`) request. * Adds `externalId` and `source` as optional parameters to the Update Contact (`PATCH /contacts/:id`) request. * Added a route to list contacts (`GET /contacts`). ### Patch Changes * Fixed an issue where creating or updating a contact with an invalid custom field would result in 500 error. Sending an invalid custom field will now result in a 400 "Invalid Custom Field Item" error. ### Patch Changes * Fixed an issue where paginated endpoints would return a string token for the next page at the end of paginated results. Now, they will correctly return the next page token as `null`. * Added a callout that the `totalItems` result field for the paginated endpoints is not functioning as expected and is not returning the true total items count. ### Patch Changes * Fixes an issue where phone numbers in various routes were expected to be in E164 format, but the format was not being validated correctly. ## 1.1.0 ### Minor Changes * Adds a property, `restrictions`, to the objects in the response from list phone numbers (`GET /phone-numbers`). The new property contains information about regional restrictions for outbound calling and messaging from a phone number. ### Patch Changes * Fixed an issue with list calls (`GET /calls`) where sending an empty participants param resulted in a 500 response. Sending an empty participants param will now result in a descriptive 400 response. * Fixes an issue where attempting to send a message to an international number would result in a 500 response if international messaging is not enabled in the workspace. With this fix, the 500 error response changed to a 403 with a descriptive message * Fixes a bug where the GET call recordings endpoint sometimes returned an empty array. * Fixes an issue that was preventing some call records from returning successfully from `GET /calls` * Fixes an issue where getting a contact by id would result in a 500 instead of a 404 when contact is not found. Now this will respond in a 404 with a descriptive message. * Fixes an issue where sending a message that contained only whitespace (`' '`, `'\n'`, etc.) resulted in a 500 error response. Now, this will respond with 400 and a validation error message instead. ### Patch Changes * Fixes an issue with List Calls (`GET /calls`) where the user ID applied by default when the user ID parameter was not sent was being set to the workspace owner instead of the phone number owner. ## 1.0.0 ### Major Changes OpenPhone's Public API v1 release 🚀 Changes from the beta version include: * The `since` query parameter on "list calls" and "list messages" has been deprecated. It used to incorrectly behave as a `createdBefore`. Please use `createdAfter` instead, or `createdBefore` to maintain current functionality. * The `phoneNumberId` field for "send text message" has been deprecated. Please use `from` instead. * `/v0` endpoints have been deprecated. Please use `/v1` instead. --- # Source: https://www.quo.com/docs/mdx/pricing-support/contact-the-team.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Contact the team > Stuck? Need Help? Drop us a line at [support+developers@quo.com](mailto:support+developers@quo.com). --- # Source: https://www.quo.com/docs/mdx/guides/contacts.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # External contacts > Learn about working with contacts imported via the Quo API or native integrations. ## Understanding external contacts External contacts are contacts that originate from outside the Quo app: either created through the Quo API or synced via native integrations (such as CRM or other connected platforms). These contacts allow you to centralize contact records from multiple sources within your Quo workspace. ### Key characteristics External contacts are separate from contacts created directly in the Quo app, with their own specific behaviors depending on how they were created. External contacts can come from two sources: the Quo API or native integrations and each has different editability rules within the Quo app. ### Editability by source Contacts created via the Quo API can be updated directly within the Quo app. You can also continue managing them programmatically through API endpoints. Contacts synced from native integrations remain read-only within Quo. Any changes must be made in the source system and synced back to Quo. ### Important behaviors and limitations When you create a contact using the `POST /contacts` endpoint, it's essential to save the `id` returned in the response. This `id` will be required for all future API operations involving the contact. After creating an API contact, it will only appear in the Quo app—whether in the conversation list, contact list, or search results—if there's an associated conversation with a matching phone number. ## Contact field structure Quo organizes contact information using two distinct field types. Understanding these is crucial for effective contact management. Every contact in Quo includes these predefined fields: * First Name * Last Name * Role * Company * Emails * Phone Numbers These fields maintain consistent properties across all contacts and form the foundation of contact information. Custom fields allow for flexible, user-defined contact properties. Supported data types include: * Address * Boolean * Date * Multi-select * Number * String * URL **Managing Custom Fields:** Custom field definitions can only be modified within the Quo app. The API does not currently support creating or editing custom field definitions. ## Creating and managing contacts via API Follow these steps to effectively create and manage contacts through the API: First, call the `GET /contact-custom-fields` endpoint to retrieve your workspace's custom contact field definitions. Structure your contact data according to both default and custom fields: ```json theme={null} { "defaultFields": { "firstName": "John", "lastName": "Doe", "phoneNumbers": [ { "name": "primary", "value": "+1234567890" } ] }, "customFields": { // Include any custom field values here } } ``` Use the `POST /contacts` endpoint to create the contact and store the returned contact ID for future operations. Update contacts either within the Quo app or programmatically using the `PATCH /contacts/:id` endpoint with the saved contact ID. Always validate phone numbers are in E.164 format (+1234567890) before creating or updating contacts to ensure proper functionality. --- # Source: https://www.quo.com/docs/mdx/api-reference/contacts/create-a-contact.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Create a contact > Create a contact for a workspace. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json post /v1/contacts openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/contacts: post: tags: - Contacts summary: Create a contact description: Create a contact for a workspace. operationId: createContact_v1 parameters: [] requestBody: required: true content: application/json: schema: type: object properties: defaultFields: type: object properties: company: anyOf: - description: The contact's company name. examples: - OpenPhone type: string - type: 'null' emails: type: array items: type: object properties: name: description: The name for the contact's email address. examples: - company email type: string value: anyOf: - description: The contact's email address. examples: - abc@example.com type: string - type: 'null' required: - name - value firstName: anyOf: - description: The contact's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The contact's last name. examples: - Doe type: string - type: 'null' phoneNumbers: type: array items: type: object properties: name: description: The name of the contact's phone number. examples: - company phone type: string value: anyOf: - description: The contact's phone number. examples: - '+12345678901' type: string - type: 'null' required: - name - value role: anyOf: - description: The contact's role. examples: - Sales type: string - type: 'null' required: - firstName customFields: type: array items: allOf: - type: object properties: key: description: The identifying key for contact custom field. examples: - inbound-lead type: string - anyOf: - type: object properties: value: anyOf: - type: array items: type: string - type: 'null' required: - value - type: object properties: value: anyOf: - type: string - type: 'null' required: - value - type: object properties: value: anyOf: - type: boolean - type: 'null' required: - value - type: object properties: value: anyOf: - format: date-time type: string - type: 'null' required: - value - type: object properties: value: anyOf: - type: number - type: 'null' required: - value createdByUserId: description: The unique identifier of the user who created the contact. examples: - US123abc pattern: ^US(.*)$ type: string source: description: >- The contact's source. Defaults to `null` for contacts created in the UI. Defaults to `public-api` for contacts created via the public API. Cannot be one of the following reserved words: `openphone`, `device`, `csv`, `zapier`, `google-people`, `other` or start with one of the following reserved prefixes: `openphone`, `csv`. examples: - public-api - custom-hubspot - google-calendar default: public-api minLength: 1 maxLength: 72 type: string sourceUrl: description: A link to the contact in the source system. format: uri examples: - https://openphone.co/contacts/664d0db69fcac7cf2e6ec minLength: 1 maxLength: 200 type: string externalId: anyOf: - description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - type: 'null' required: - defaultFields responses: '201': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The unique identifier of the contact. examples: - 664d0db69fcac7cf2e6ec type: string externalId: anyOf: - description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - type: 'null' source: anyOf: - description: >- Indicates how the contact was created or where it originated from. examples: - public-api minLength: 1 maxLength: 75 type: string - type: 'null' sourceUrl: anyOf: - description: A link to the contact in the source system. format: uri examples: - >- https://openphone.co/contacts/664d0db69fcac7cf2e6ec minLength: 1 maxLength: 200 type: string - type: 'null' defaultFields: type: object properties: company: anyOf: - description: The contact's company name. examples: - OpenPhone type: string - type: 'null' emails: type: array items: type: object properties: name: description: The name for the contact's email address. examples: - company email type: string value: anyOf: - description: The contact's email address. examples: - abc@example.com type: string - type: 'null' id: description: >- The unique identifier for the contact email field. examples: - acb123 type: string required: - name - value firstName: anyOf: - description: The contact's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The contact's last name. examples: - Doe type: string - type: 'null' phoneNumbers: type: array items: type: object properties: name: description: The name of the contact's phone number. examples: - company phone type: string value: anyOf: - description: The contact's phone number. examples: - '+12345678901' type: string - type: 'null' id: description: >- The unique identifier of the contact phone number field. examples: - acb123 type: string required: - name - value role: anyOf: - description: The contact's role. examples: - Sales type: string - type: 'null' required: - company - emails - firstName - lastName - phoneNumbers - role customFields: type: array items: allOf: - type: object properties: name: description: >- The name of the custom contact field. This name is set by users in the OpenPhone interface when the custom field is created. examples: - Inbound Lead type: string key: description: >- The identifying key for contact custom field. examples: - inbound-lead type: string id: description: >- The unique identifier for the contact custom field. examples: - 66d0d87d534de8fd1c433cec3 type: string required: - name - anyOf: - type: object properties: type: type: string enum: - multi-select value: anyOf: - type: array items: type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - address - string - url value: anyOf: - type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - boolean value: anyOf: - type: boolean - type: 'null' required: - type - value - type: object properties: type: type: string enum: - date value: anyOf: - format: date-time type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - number value: anyOf: - type: number - type: 'null' required: - type - value createdAt: description: Timestamp of contact creation in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: Timestamp of last contact update in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string createdByUserId: description: >- The unique identifier of the user who created the contact. examples: - US123abc pattern: ^US(.*)$ type: string required: - id - externalId - source - sourceUrl - defaultFields - customFields - createdAt - updatedAt - createdByUserId required: - data '400': description: Invalid Custom Field Item content: application/json: schema: type: object properties: message: type: string code: const: '0801400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Custom Field Item type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Custom Field Item type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0800401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0801403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0800404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '409': description: Conflict content: application/json: schema: type: object properties: message: type: string code: const: '0800409' type: string status: const: 409 type: number docs: const: https://openphone.com/docs type: string title: const: Conflict type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0801500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/create-a-new-webhook-for-call-summaries.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Create a new webhook for call summaries > Creates a new webhook that triggers on events from call summaries. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json post /v1/webhooks/call-summaries openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks/call-summaries: post: tags: - Webhooks summary: Create a new webhook for call summaries description: Creates a new webhook that triggers on events from call summaries. operationId: createCallSummaryWebhook_v1 parameters: [] requestBody: required: true content: application/json: schema: type: object properties: events: minItems: 1 type: array items: type: string enum: - call.summary.completed label: description: Webhook's label examples: - my webhook label type: string resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com type: string userId: description: >- The unique identifier of the user that creates the webhook. If not provided, default to workspace owner. examples: - US123abc pattern: ^US(.*)$ type: string required: - events - url responses: '201': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: minItems: 1 type: array items: type: string enum: - call.summary.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds required: - data '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/create-a-new-webhook-for-call-transcripts.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Create a new webhook for call transcripts > Creates a new webhook that triggers on events from call transcripts. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json post /v1/webhooks/call-transcripts openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks/call-transcripts: post: tags: - Webhooks summary: Create a new webhook for call transcripts description: Creates a new webhook that triggers on events from call transcripts. operationId: createCallTranscriptWebhook_v1 parameters: [] requestBody: required: true content: application/json: schema: type: object properties: events: minItems: 1 type: array items: type: string enum: - call.transcript.completed label: description: The webhook's label. examples: - my webhook label type: string resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string status: type: string enum: - enabled - disabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com type: string userId: description: >- The ID of the user that creates the webhook. If not provided, default to workspace owner. examples: - US123abc pattern: ^US(.*)$ type: string required: - events - url responses: '201': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: minItems: 1 type: array items: type: string enum: - call.transcript.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds required: - data '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/create-a-new-webhook-for-calls.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Create a new webhook for calls > Creates a new webhook that triggers on events from calls. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json post /v1/webhooks/calls openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks/calls: post: tags: - Webhooks summary: Create a new webhook for calls description: Creates a new webhook that triggers on events from calls. operationId: createCallWebhook_v1 parameters: [] requestBody: required: true content: application/json: schema: type: object properties: url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com/ type: string events: type: array items: type: string enum: - call.completed - call.ringing - call.recording.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string userId: description: >- The unique identifier of the user that creates the webhook. If not provided, default to workspace owner. examples: - US123abc pattern: ^US(.*)$ type: string label: description: Webhook's label examples: - my webhook label type: string status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled required: - url - events responses: '201': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: type: array items: type: string enum: - call.completed - call.ringing - call.recording.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds required: - data '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/create-a-new-webhook-for-messages.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Create a new webhook for messages > Creates a new webhook that triggers on events from messages. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json post /v1/webhooks/messages openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks/messages: post: tags: - Webhooks summary: Create a new webhook for messages description: Creates a new webhook that triggers on events from messages. operationId: createMessageWebhook_v1 parameters: [] requestBody: required: true content: application/json: schema: type: object properties: events: type: array items: type: string enum: - message.received - message.delivered label: description: Webhook's label examples: - my webhook label type: string resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com type: string userId: description: >- The unique identifier of the user that creates the webhook. If not provided, default to workspace owner. examples: - US123abc pattern: ^US(.*)$ type: string required: - events - url responses: '201': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: type: array items: type: string enum: - message.received - message.delivered resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds required: - data '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/contacts/delete-a-contact.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Delete a contact > Delete a contact by its unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json delete /v1/contacts/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/contacts/{id}: delete: tags: - Contacts summary: Delete a contact description: Delete a contact by its unique identifier. operationId: deleteContact_v1 parameters: - in: path name: id required: true schema: description: The unique identifier of the contact. examples: - 66d0d87e8dc1211467372303 type: string responses: '204': description: Success '400': description: Invalid Custom Field Item content: application/json: schema: type: object properties: message: type: string code: const: '0801400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Custom Field Item type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Custom Field Item type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0800401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0801403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0800404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '409': description: Conflict content: application/json: schema: type: object properties: message: type: string code: const: '0800409' type: string status: const: 409 type: number docs: const: https://openphone.com/docs type: string title: const: Conflict type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0801500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/delete-a-webhook-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Delete a webhook by ID > Delete a webhook by its unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json delete /v1/webhooks/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks/{id}: delete: tags: - Webhooks summary: Delete a webhook by ID description: Delete a webhook by its unique identifier. operationId: deleteWebhookById_v1 parameters: - in: path name: id required: true schema: description: The unique identifier of a webhook examples: - WH12345 pattern: ^WH(.*)$ type: string responses: '204': description: Success '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/error-codes.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # API response codes > Quo uses standard HTTP response codes to indicate request status. ## Response code categories * 2xx: Success * 4xx: Client-side errors * 5xx: Server-side errors Some 4xx errors include specific error codes for programmatic handling. ## Common response codes | Code | Status | Description | | ----- | ----------------- | ------------------------------------------------------------- | | `200` | OK | Request successful | | `201` | Created | Resource successfully created | | `202` | Accepted | Request accepted for processing | | `204` | No Content | Request successful, no content returned | | `400` | Bad Request | Invalid parameters | | `401` | Unauthorized | Missing or invalid API key | | `403` | Forbidden | Insufficient permissions or an account setting is not enabled | | `404` | Not Found | Resource doesn't exist | | `409` | Conflict | Conflict with another request | | `429` | Too Many Requests | Rate limit exceeded | | `500` | Server Error | Quo-side issue | For 429 errors, implement exponential backoff in your requests. --- # Source: https://www.quo.com/docs/mdx/api-reference/calls/get-a-call-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a call by ID > Get a call by its unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/calls/{callId} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/calls/{callId}: get: tags: - Calls summary: Get a call by ID description: Get a call by its unique identifier. operationId: getCallById_v1 parameters: - in: path name: callId required: true schema: description: Unique identifier of the call. examples: - AC3700e624eca547eb9f749a06f2eb1 pattern: ^AC(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: additionalProperties: false type: object properties: answeredAt: anyOf: - description: >- The timestamp when the call was answered in ISO 8601 format. Null if the call was not answered. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' answeredBy: anyOf: - description: >- The unique identifier of the OpenPhone user who answered the incoming call. Null for outgoing calls or unanswered incoming calls. examples: - USlHhXmRMz type: string - type: 'null' initiatedBy: anyOf: - description: >- The unique identifier of the OpenPhone user who initiated the outgoing call. Null for incoming calls. examples: - USlHhXmRMz type: string - type: 'null' direction: type: string enum: - incoming - outgoing description: >- The direction of the call relative to the OpenPhone number. examples: - incoming status: type: string enum: - queued - initiated - ringing - in-progress - completed - busy - failed - no-answer - canceled - missed - answered - forwarded - abandoned description: The current status of the call. examples: - completed completedAt: anyOf: - description: >- The timestamp when the call ended, in ISO 8601 format. Null if the call is ongoing or was not completed. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' createdAt: description: >- The timestamp when the call record was created, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string callRoute: anyOf: - description: >- How the call reached the user's inbox: either by direct dial to their number or routed through a phone menu. Null for outbound calls. examples: - phone-number - phone-menu type: string - type: 'null' duration: description: The total duration of the call in seconds. examples: - 60 type: integer forwardedFrom: anyOf: - anyOf: - description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - pattern: ^US(.*)$ type: string - type: 'null' forwardedTo: anyOf: - anyOf: - description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - pattern: ^US(.*)$ type: string - type: 'null' aiHandled: anyOf: - description: >- Type of AI that answered the call. Set to 'ai-agent' for AI responses, or null for human responses. examples: - ai-agent type: string - type: 'null' id: description: The unique identifier of the call. examples: - AC123abc pattern: ^AC(.*)$ type: string phoneNumberId: description: >- The unique identifier of the OpenPhone number associated with the call. examples: - PN123abc pattern: ^PN(.*)$ type: string participants: maxItems: 2 type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string updatedAt: anyOf: - description: >- The timestamp when the call record was last updated, in ISO 8601 format. Null if never updated. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' userId: description: >- The unique identifier of the OpenPhone user account associated with the call. examples: - US123abc pattern: ^US(.*)$ type: string required: - answeredAt - answeredBy - initiatedBy - direction - status - completedAt - createdAt - callRoute - duration - forwardedFrom - forwardedTo - aiHandled - id - phoneNumberId - participants - updatedAt - userId required: - data '400': description: Too Many Participants content: application/json: schema: type: object properties: message: type: string code: const: '0101400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Too Many Participants type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Too Many Participants type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0100401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0101403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0100404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0101500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/contacts/get-a-contact-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a contact by ID > Retrieve detailed information about a specific contact in your OpenPhone workspace using the contact's unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/contacts/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/contacts/{id}: get: tags: - Contacts summary: Get a contact by ID description: >- Retrieve detailed information about a specific contact in your OpenPhone workspace using the contact's unique identifier. operationId: getContactById_v1 parameters: - in: path name: id required: true schema: description: The unique identifier of the contact. examples: - 66d0d87e8dc1211467372303 type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The unique identifier of the contact. examples: - 664d0db69fcac7cf2e6ec type: string externalId: anyOf: - description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - type: 'null' source: anyOf: - description: >- Indicates how the contact was created or where it originated from. examples: - public-api minLength: 1 maxLength: 75 type: string - type: 'null' sourceUrl: anyOf: - description: A link to the contact in the source system. format: uri examples: - >- https://openphone.co/contacts/664d0db69fcac7cf2e6ec minLength: 1 maxLength: 200 type: string - type: 'null' defaultFields: type: object properties: company: anyOf: - description: The contact's company name. examples: - OpenPhone type: string - type: 'null' emails: type: array items: type: object properties: name: description: The name for the contact's email address. examples: - company email type: string value: anyOf: - description: The contact's email address. examples: - abc@example.com type: string - type: 'null' id: description: >- The unique identifier for the contact email field. examples: - acb123 type: string required: - name - value firstName: anyOf: - description: The contact's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The contact's last name. examples: - Doe type: string - type: 'null' phoneNumbers: type: array items: type: object properties: name: description: The name of the contact's phone number. examples: - company phone type: string value: anyOf: - description: The contact's phone number. examples: - '+12345678901' type: string - type: 'null' id: description: >- The unique identifier of the contact phone number field. examples: - acb123 type: string required: - name - value role: anyOf: - description: The contact's role. examples: - Sales type: string - type: 'null' required: - company - emails - firstName - lastName - phoneNumbers - role customFields: type: array items: allOf: - type: object properties: name: description: >- The name of the custom contact field. This name is set by users in the OpenPhone interface when the custom field is created. examples: - Inbound Lead type: string key: description: >- The identifying key for contact custom field. examples: - inbound-lead type: string id: description: >- The unique identifier for the contact custom field. examples: - 66d0d87d534de8fd1c433cec3 type: string required: - name - anyOf: - type: object properties: type: type: string enum: - multi-select value: anyOf: - type: array items: type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - address - string - url value: anyOf: - type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - boolean value: anyOf: - type: boolean - type: 'null' required: - type - value - type: object properties: type: type: string enum: - date value: anyOf: - format: date-time type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - number value: anyOf: - type: number - type: 'null' required: - type - value createdAt: description: Timestamp of contact creation in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: Timestamp of last contact update in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string createdByUserId: description: >- The unique identifier of the user who created the contact. examples: - US123abc pattern: ^US(.*)$ type: string required: - id - externalId - source - sourceUrl - defaultFields - customFields - createdAt - updatedAt - createdByUserId required: - data '400': description: Invalid Custom Field Item content: application/json: schema: type: object properties: message: type: string code: const: '0801400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Custom Field Item type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Custom Field Item type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0800401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0801403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0800404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '409': description: Conflict content: application/json: schema: type: object properties: message: type: string code: const: '0800409' type: string status: const: 409 type: number docs: const: https://openphone.com/docs type: string title: const: Conflict type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0801500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/messages/get-a-message-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a message by ID > Get a message by its unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/messages/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/messages/{id}: get: tags: - Messages summary: Get a message by ID description: Get a message by its unique identifier. operationId: getMessageById_v1 parameters: - in: path name: id required: true schema: description: The unique identifier of a message examples: - AC123abc pattern: ^AC(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The unique identifier of the message. examples: - AC123abc pattern: ^AC(.*)$ type: string to: type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string from: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string text: description: The content of the message. examples: - Hello, world! type: string phoneNumberId: anyOf: - description: >- The unique identifier of the OpenPhone phone number that the message was sent from. examples: - PN123abc pattern: ^PN(.*)$ type: string - type: 'null' direction: type: string enum: - incoming - outgoing description: >- The direction of the message relative to the OpenPhone number. examples: - incoming userId: description: >- The unique identifier of the user who sent the message. Null for incoming messages. examples: - US123abc pattern: ^US(.*)$ type: string status: type: string enum: - queued - sent - delivered - undelivered description: The status of the message. examples: - sent createdAt: description: >- The timestamp when the message was created at, in ISO 8601 format examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The timestamp when the message status was last updated, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string required: - id - to - from - text - phoneNumberId - direction - userId - status - createdAt - updatedAt required: - data '400': description: A2P Registration Not Approved content: application/json: schema: type: object properties: message: type: string code: const: '0206400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: A2P Registration Not Approved type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: A2P Registration Not Approved type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0200401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '402': description: Not Enough Credits content: application/json: schema: type: object properties: message: type: string code: const: '0200402' type: string status: const: 402 type: number docs: const: https://openphone.com/docs type: string title: const: Not Enough Credits type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: >- The organization does not have enough prepaid credits to send the message type: string required: - message - code - status - docs - title - description '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0202403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0200404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0201500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/phone-numbers/get-a-phone-number-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a phone number by ID > Get a phone number by its unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/phone-numbers/{phoneNumberId} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/phone-numbers/{phoneNumberId}: get: tags: - Phone Numbers summary: Get a phone number by ID description: Get a phone number by its unique identifier. operationId: getPhoneNumberById_v1 parameters: - in: path name: phoneNumberId required: true schema: description: Unique identifier of the phone number. examples: - PNlja6rrtI pattern: ^PN(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The unique identifier of OpenPhone phone number. examples: - PN123bc pattern: ^PN(.*)$ type: string groupId: description: >- The unique identifier of the group to which the OpenPhone number belongs. examples: - '1234' type: string portRequestId: anyOf: - description: >- Unique identifier for the phone number’s porting request, if applicable. examples: - 123abc type: string - type: 'null' formattedNumber: anyOf: - description: A human-readable representation of a phone number. examples: - '+15555555555' type: string - type: 'null' forward: anyOf: - description: >- Forwarding number for incoming calls, null if no forwarding number is configured. examples: - '+15555555555' type: string - type: 'null' name: description: The display name of the phone number examples: - My phone number type: string number: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string portingStatus: anyOf: - description: >- Current status of the porting process, if applicable. examples: - completed type: string - type: 'null' symbol: anyOf: - description: >- Custom symbol or emoji associated with the phone number. examples: - 🏡 type: string - type: 'null' users: type: array items: type: object allOf: - type: object properties: email: description: The user's email address. examples: - my@email.com format: email type: string firstName: anyOf: - description: The user's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The user's last name. examples: - Doe type: string - type: 'null' id: pattern: ^US(.*)$ type: string role: type: string enum: - owner - admin - member description: The user's role in the organization. examples: - owner - admin - member required: - email - firstName - lastName - id - role - type: object properties: groupId: description: >- The unique identifier of the group to which the user belongs. examples: - GRcei8k90o pattern: ^GR(.*)$ type: string required: - groupId createdAt: description: >- Timestamp of when the phone number was added to the account in ISO 8601 format. examples: - ' ''2022-01-01T00:00:00Z''' type: string updatedAt: description: >- Timestamp of the last update to the phone number's details in ISO 8601 format. examples: - ' ''2022-01-01T00:00:00Z''' type: string restrictions: type: object properties: calling: type: object properties: CA: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted Intl: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted US: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted required: - CA - Intl - US messaging: type: object properties: CA: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted Intl: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted US: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted required: - CA - Intl - US required: - calling - messaging required: - id - groupId - portRequestId - formattedNumber - forward - name - number - portingStatus - symbol - users - createdAt - updatedAt - restrictions required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '0400400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0400401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0400403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0400404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0401500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/calls/get-a-summary-for-a-call.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a summary for a call > Retrieve a detailed summary of a specific call identified by its unique call ID. This endpoint supports summaries for both regular calls and calls handled by Sona. Call summaries are only available on business and scale plans. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/call-summaries/{callId} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/call-summaries/{callId}: get: tags: - Calls summary: Get a summary for a call description: >- Retrieve a detailed summary of a specific call identified by its unique call ID. This endpoint supports summaries for both regular calls and calls handled by Sona. Call summaries are only available on business and scale plans. operationId: getCallSummary_v1 parameters: - in: path name: callId required: true schema: description: The unique identifier of the call associated with the summary. examples: - AC3700e624eca547eb9f749a06f pattern: ^AC(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: callId: description: >- The unique identifier of the call to which this summary belongs. examples: - ACea724hac8c30465bcbcff0b76e4c1c7b type: string nextSteps: anyOf: - type: array items: examples: - Bring an umbrella. type: string - type: 'null' status: type: string enum: - absent - in-progress - completed - failed description: The status of the call summary. examples: - completed summary: anyOf: - type: array items: examples: - You talked about the weather. type: string - type: 'null' jobs: anyOf: - type: array items: type: object properties: icon: type: string name: type: string result: type: object properties: data: type: array items: type: object properties: name: type: string value: anyOf: - type: string - type: number - type: boolean required: - name - value required: - data required: - icon - name - result - type: 'null' required: - callId - nextSteps - status - summary required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '0500400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0500401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0500403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0500404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0501500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/calls/get-a-transcription-for-a-call.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a transcription for a call > Retrieve a detailed transcript of a specific call identified by its unique call ID. This endpoint supports transcripts for both regular calls and calls handled by Sona. Call transcripts are only available on business and scale plans. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/call-transcripts/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/call-transcripts/{id}: get: tags: - Calls summary: Get a transcription for a call description: >- Retrieve a detailed transcript of a specific call identified by its unique call ID. This endpoint supports transcripts for both regular calls and calls handled by Sona. Call transcripts are only available on business and scale plans. operationId: getCallTranscript_v1 parameters: - in: path name: id required: true schema: description: Unique identifier of the call associated with this transcript. examples: - AC3700e624eca547eb9f749a06f2eb1 pattern: ^AC(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: callId: description: >- The unique identifier of the call to which this transcript belongs. examples: - ACea724hac8c30465bcbcff0b76e4c1c7b type: string createdAt: description: >- The timestamp when the transcription was created, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string dialogue: anyOf: - type: array items: type: object properties: content: description: >- The transcribed text of a specific dialogue segment. examples: - Hello, world! type: string start: description: >- The start time of the dialogue segment in seconds, relative to the beginning of the call. examples: - 5.123456 type: number end: description: >- The end time of the dialogue segment in seconds, relative to the beginning of the call. examples: - 10.123456 type: number identifier: anyOf: - description: >- The phone number of the participant who spoke during this dialogue segment. examples: - '+19876543210' type: string - type: 'null' userId: anyOf: - description: >- The unique identifier of the OpenPhone user who spoke during this dialogue segment. Null for external participants or if user identification is not available. examples: - US123abc pattern: ^US(.*)$ type: string - type: 'null' required: - content - start - end - identifier - userId - type: 'null' duration: description: The total duration of the transcribed call in seconds. examples: - 100 type: number status: type: string enum: - absent - in-progress - completed - failed description: The status of the call transcription. examples: - completed required: - callId - createdAt - dialogue - duration - status required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '0600400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0600401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0600403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0600404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0601500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/users/get-a-user-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a user by ID > Retrieve detailed information about a specific user in your OpenPhone workspace using the user's unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/users/{userId} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/users/{userId}: get: tags: - Users summary: Get a user by ID description: >- Retrieve detailed information about a specific user in your OpenPhone workspace using the user's unique identifier. operationId: getUserById_v1 parameters: - in: path name: userId required: true schema: description: The unique identifier of the user being retrieved. examples: - US123abc pattern: ^US(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: pattern: ^US(.*)$ type: string email: description: The user's email address. examples: - my@email.com format: email type: string firstName: anyOf: - description: The user's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The user's last name. examples: - Doe type: string - type: 'null' pictureUrl: anyOf: - description: The user's picture URL. examples: - https://example.com/picture.jpg format: uri type: string - type: 'null' role: type: string enum: - owner - admin - member description: The user's role in the organization. examples: - owner - admin - member createdAt: description: Timestamp of user creation in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: Timestamp of last user update in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string required: - id - email - firstName - lastName - pictureUrl - role - createdAt - updatedAt required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '1100400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '1100401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '1100403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '1100404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '1101500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/calls/get-a-voicemail-for-a-call.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a voicemail for a call > Retrieve a voicemail associated with a specific call. Returns null data fields while the voicemail is processing in our system. Returns competed data fields when the voicemail has finished processing. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/call-voicemails/{callId} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/call-voicemails/{callId}: get: tags: - Calls summary: Get a voicemail for a call description: >- Retrieve a voicemail associated with a specific call. Returns null data fields while the voicemail is processing in our system. Returns competed data fields when the voicemail has finished processing. operationId: getCallVoicemails_v1 parameters: - in: path name: callId required: true schema: description: >- The unique identifier of the call for which a voicemail is being retrieved. examples: - AC3700e624eca547eb9f749a06f pattern: ^AC(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: additionalProperties: false type: object properties: duration: anyOf: - description: >- The length of the call voicemail in seconds. Null if the voicemail is not completed or the duration is unknown. examples: - 60 type: integer - type: 'null' id: description: The unique identifier of the call voicemail. examples: - VMaaff8f317e0c4e61953b74a5eb42a370 pattern: ^VM(.*)$ type: string transcript: anyOf: - description: >- The transcript of the call voicemail. Null if the voicemail is not completed or the transcript is not available. examples: - Hello, this is a voicemail from John Doe. type: string - type: 'null' recordingUrl: anyOf: - description: >- The URL where the call voicemail can be accessed or downloaded. Null if the voicemail is not completed or the URL is not available. examples: - >- https://examplestorage.com/a643d4d3e1484fcc8b721627284eda5e.mp3 format: uri type: string - type: 'null' status: type: string enum: - completed - in-progress description: The current status of the call voicemail. examples: - completed - in-progress required: - duration - id - transcript - recordingUrl - status required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '1200400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '1200401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '1200403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '1200404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '1201500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/get-a-webhook-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get a webhook by ID > Get a webhook by its unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/webhooks/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks/{id}: get: tags: - Webhooks summary: Get a webhook by ID description: Get a webhook by its unique identifier. operationId: getWebhookById_v1 parameters: - in: path name: id required: true schema: description: The unique identifier of a webhook examples: - WH12345 pattern: ^WH(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: anyOf: - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: type: array items: type: string enum: - message.received - message.delivered resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: type: array items: type: string enum: - call.completed - call.ringing - call.recording.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: minItems: 1 type: array items: type: string enum: - call.summary.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: minItems: 1 type: array items: type: string enum: - call.transcript.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds required: - data '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/contact-custom-fields/get-contact-custom-fields.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get contact custom fields > Custom contact fields enhance your OpenPhone contacts with additional information beyond standard details like name, company, role, emails and phone numbers. These user-defined fields let you capture business-specific data. While you can only create or modify these fields in OpenPhone itself, this endpoint retrieves your existing custom properties. Use this information to accurately map and include important custom data when creating new contacts via the API. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/contact-custom-fields openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/contact-custom-fields: get: tags: - Contact Custom Fields summary: Get contact custom fields description: >- Custom contact fields enhance your OpenPhone contacts with additional information beyond standard details like name, company, role, emails and phone numbers. These user-defined fields let you capture business-specific data. While you can only create or modify these fields in OpenPhone itself, this endpoint retrieves your existing custom properties. Use this information to accurately map and include important custom data when creating new contacts via the API. operationId: getContactCustomFields_v1 parameters: [] responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: type: object properties: name: description: >- The name of the custom contact field. This name is set by users in the OpenPhone interface when the custom field is created. examples: - Inbound Lead type: string key: description: The identifying key for contact custom field. examples: - inbound-lead type: string type: type: string enum: - address - boolean - date - multi-select - number - string - url description: >- The data type of the custom contact field, determining what kind of information can be stored and how it should be formatted. examples: - boolean required: - name - key - type required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '0700400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0700401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0700403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0700404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0701500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/calls/get-recordings-for-a-call.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get recordings for a call > Retrieve a list of recordings associated with a specific call. The results are sorted chronologically, with the oldest recording segment appearing first in the list. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/call-recordings/{callId} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/call-recordings/{callId}: get: tags: - Calls summary: Get recordings for a call description: >- Retrieve a list of recordings associated with a specific call. The results are sorted chronologically, with the oldest recording segment appearing first in the list. operationId: getCallRecordings_v1 parameters: - in: path name: callId required: true schema: description: >- The unique identifier of the call for which recordings are being retrieved. examples: - AC3700e624eca547eb9f749a06f pattern: ^AC(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: additionalProperties: false type: object properties: duration: anyOf: - description: >- The length of the call recording in seconds. Null if the recording is not completed or the duration is unknown. examples: - 60 type: integer - type: 'null' id: description: The unique identifier of the call recording. examples: - CRwRVK2qBq type: string startTime: anyOf: - description: >- The timestamp when the recording began, in ISO 8601 format. Null if the recording hasn't started or the start time is unknown. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' status: anyOf: - type: string enum: - absent - completed - deleted - failed - in-progress - paused - processing - stopped - stopping description: The current status of the call recording. examples: - completed - type: 'null' type: anyOf: - description: >- The file type of the call recording. Null if the type is not specified or is unknown. examples: - audio/mpeg type: string - type: 'null' url: anyOf: - description: >- The URL where the call recording can be accessed or downloaded. Null if the URL is not available or the recording is not accessible. examples: - >- https://examplestorage.com/a643d4d3e1484fcc8b721627284eda5e.mp3 format: uri-reference type: string - type: 'null' required: - duration - id - startTime - status - type - url required: - data '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '0900400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0900401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0900403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0900404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0901500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/introduction.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Introduction > Welcome to the Quo API! ## Overview The Quo API enables developers to integrate powerful communication features directly into their applications and workflows. Built on REST principles, our API provides a reliable and secure way to programmatically manage phone communications. ## Key features Industry-standard REST API design with JSON responses for easy integration API key-based authentication to ensure secure access to your account All API responses are returned in standardized JSON format Comprehensive documentation and [resources](/mdx/guides) to accelerate development ## Next steps Ready to dive deeper? Here are some helpful resources: * [Authentication guide](/mdx/api-reference/authentication) - Learn about securing your API requests * [Send your first message](/mdx/api-reference/send-your-first-message) - Quick start guide for messaging * [Build with AI LLMs](/mdx/guides/building-with-ai-llms) - Learn how to utilize this API alongside AI --- # Source: https://www.quo.com/docs/mdx/api-reference/calls/list-calls.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # List calls > Fetch a paginated list of calls associated with a specific OpenPhone number and another number. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/calls openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/calls: get: tags: - Calls summary: List calls description: >- Fetch a paginated list of calls associated with a specific OpenPhone number and another number. operationId: listCalls_v1 parameters: - in: query name: phoneNumberId required: true schema: description: >- The unique identifier of the OpenPhone number associated with the call. examples: - PN123abc pattern: ^PN(.*)$ type: string - in: query name: userId required: false schema: description: >- The unique identifier of the OpenPhone user who either placed or received the call. Defaults to the workspace owner. examples: - US123abc pattern: ^US(.*)$ type: string - in: query name: participants required: true schema: maxItems: 1 description: >- The phone numbers of participants involved in the call conversation, excluding your OpenPhone number. Each number should contain the country code and conform to the E.164 format. Currently limited to one-to-one (1:1) conversations only. examples: - '+15555555555' type: array items: minLength: 1 type: string - in: query name: since required: false schema: deprecated: true description: >- DEPRECATED, use "createdAfter" or "createdBefore" instead. "since" incorrectly behaves as "createdBefore" and will be removed in an upcoming release. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: createdAfter required: false schema: description: >- Filter results to only include calls created after the specified date and time, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: createdBefore required: false schema: description: >- Filter results to only include calls created before the specified date and time, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: maxResults required: true schema: description: Maximum number of results to return per page. default: 10 maximum: 100 minimum: 1 type: integer - in: query name: pageToken required: false schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: additionalProperties: false type: object properties: answeredAt: anyOf: - description: >- The timestamp when the call was answered in ISO 8601 format. Null if the call was not answered. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' answeredBy: anyOf: - description: >- The unique identifier of the OpenPhone user who answered the incoming call. Null for outgoing calls or unanswered incoming calls. examples: - USlHhXmRMz type: string - type: 'null' initiatedBy: anyOf: - description: >- The unique identifier of the OpenPhone user who initiated the outgoing call. Null for incoming calls. examples: - USlHhXmRMz type: string - type: 'null' direction: type: string enum: - incoming - outgoing description: >- The direction of the call relative to the OpenPhone number. examples: - incoming status: type: string enum: - queued - initiated - ringing - in-progress - completed - busy - failed - no-answer - canceled - missed - answered - forwarded - abandoned description: The current status of the call. examples: - completed completedAt: anyOf: - description: >- The timestamp when the call ended, in ISO 8601 format. Null if the call is ongoing or was not completed. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' createdAt: description: >- The timestamp when the call record was created, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string callRoute: anyOf: - description: >- How the call reached the user's inbox: either by direct dial to their number or routed through a phone menu. Null for outbound calls. examples: - phone-number - phone-menu type: string - type: 'null' duration: description: The total duration of the call in seconds. examples: - 60 type: integer forwardedFrom: anyOf: - anyOf: - description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - pattern: ^US(.*)$ type: string - type: 'null' forwardedTo: anyOf: - anyOf: - description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - pattern: ^US(.*)$ type: string - type: 'null' aiHandled: anyOf: - description: >- Type of AI that answered the call. Set to 'ai-agent' for AI responses, or null for human responses. examples: - ai-agent type: string - type: 'null' id: description: The unique identifier of the call. examples: - AC123abc pattern: ^AC(.*)$ type: string phoneNumberId: description: >- The unique identifier of the OpenPhone number associated with the call. examples: - PN123abc pattern: ^PN(.*)$ type: string participants: maxItems: 2 type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string updatedAt: anyOf: - description: >- The timestamp when the call record was last updated, in ISO 8601 format. Null if never updated. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' userId: description: >- The unique identifier of the OpenPhone user account associated with the call. examples: - US123abc pattern: ^US(.*)$ type: string required: - answeredAt - answeredBy - initiatedBy - direction - status - completedAt - createdAt - callRoute - duration - forwardedFrom - forwardedTo - aiHandled - id - phoneNumberId - participants - updatedAt - userId totalItems: description: >- Total number of items available. ⚠️ Note: `totalItems` is not accurately returning the total number of items that can be paginated. We are working on fixing this issue. type: integer nextPageToken: anyOf: - type: string - type: 'null' required: - data - totalItems - nextPageToken '400': description: Too Many Participants content: application/json: schema: type: object properties: message: type: string code: const: '0101400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Too Many Participants type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Too Many Participants type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0100401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0101403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0100404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0101500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/contacts/list-contacts.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # List contacts > Retrieve a paginated list of contacts. You can optionally filter the results by providing external IDs and sources. When no external IDs are provided, all contacts for the organization are returned. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/contacts openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/contacts: get: tags: - Contacts summary: List contacts description: >- Retrieve a paginated list of contacts. You can optionally filter the results by providing external IDs and sources. When no external IDs are provided, all contacts for the organization are returned. operationId: listContacts_v1 parameters: - in: query name: externalIds required: false schema: description: >- Optional list of unique identifiers from an external system used to retrieve specific contacts. When provided, the result set is limited to contacts associated with the provided `externalIds`. These IDs must match those supplied during contact creation via the "Create Contacts" endpoint. When omitted, returns all contacts for the organization. Use this parameter to cross-reference and fetch contacts linked to external systems. type: array items: description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - in: query name: sources required: false schema: type: array items: description: >- Indicates how the contact was created or where it originated from. examples: - public-api minLength: 1 maxLength: 75 type: string - in: query name: maxResults required: true schema: description: Maximum number of results to return per page. default: 10 maximum: 50 minimum: 1 type: integer - in: query name: pageToken required: false schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: description: The unique identifier of the contact. examples: - 664d0db69fcac7cf2e6ec type: string externalId: anyOf: - description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - type: 'null' source: anyOf: - description: >- Indicates how the contact was created or where it originated from. examples: - public-api minLength: 1 maxLength: 75 type: string - type: 'null' sourceUrl: anyOf: - description: A link to the contact in the source system. format: uri examples: - >- https://openphone.co/contacts/664d0db69fcac7cf2e6ec minLength: 1 maxLength: 200 type: string - type: 'null' defaultFields: type: object properties: company: anyOf: - description: The contact's company name. examples: - OpenPhone type: string - type: 'null' emails: type: array items: type: object properties: name: description: The name for the contact's email address. examples: - company email type: string value: anyOf: - description: The contact's email address. examples: - abc@example.com type: string - type: 'null' id: description: >- The unique identifier for the contact email field. examples: - acb123 type: string required: - name - value firstName: anyOf: - description: The contact's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The contact's last name. examples: - Doe type: string - type: 'null' phoneNumbers: type: array items: type: object properties: name: description: The name of the contact's phone number. examples: - company phone type: string value: anyOf: - description: The contact's phone number. examples: - '+12345678901' type: string - type: 'null' id: description: >- The unique identifier of the contact phone number field. examples: - acb123 type: string required: - name - value role: anyOf: - description: The contact's role. examples: - Sales type: string - type: 'null' required: - company - emails - firstName - lastName - phoneNumbers - role customFields: type: array items: allOf: - type: object properties: name: description: >- The name of the custom contact field. This name is set by users in the OpenPhone interface when the custom field is created. examples: - Inbound Lead type: string key: description: >- The identifying key for contact custom field. examples: - inbound-lead type: string id: description: >- The unique identifier for the contact custom field. examples: - 66d0d87d534de8fd1c433cec3 type: string required: - name - anyOf: - type: object properties: type: type: string enum: - multi-select value: anyOf: - type: array items: type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - address - string - url value: anyOf: - type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - boolean value: anyOf: - type: boolean - type: 'null' required: - type - value - type: object properties: type: type: string enum: - date value: anyOf: - format: date-time type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - number value: anyOf: - type: number - type: 'null' required: - type - value createdAt: description: Timestamp of contact creation in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: Timestamp of last contact update in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string createdByUserId: description: >- The unique identifier of the user who created the contact. examples: - US123abc pattern: ^US(.*)$ type: string required: - id - externalId - source - sourceUrl - defaultFields - customFields - createdAt - updatedAt - createdByUserId totalItems: description: >- Total number of items available. ⚠️ Note: `totalItems` is not accurately returning the total number of items that can be paginated. We are working on fixing this issue. type: integer nextPageToken: anyOf: - type: string - type: 'null' required: - data - totalItems - nextPageToken '400': description: Invalid Custom Field Item content: application/json: schema: type: object properties: message: type: string code: const: '0801400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Custom Field Item type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Custom Field Item type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0800401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0801403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0800404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '409': description: Conflict content: application/json: schema: type: object properties: message: type: string code: const: '0800409' type: string status: const: 409 type: number docs: const: https://openphone.com/docs type: string title: const: Conflict type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0801500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/conversations/list-conversations.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # List Conversations > Fetch a paginated list of conversations of OpenPhone conversations. Can be filtered by user and/or phone numbers. Defaults to all conversations in the OpenPhone organization. Results are returned in descending order based on the most recent conversation. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/conversations openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/conversations: get: tags: - Conversations summary: List Conversations description: >- Fetch a paginated list of conversations of OpenPhone conversations. Can be filtered by user and/or phone numbers. Defaults to all conversations in the OpenPhone organization. Results are returned in descending order based on the most recent conversation. operationId: listConversations_v1 parameters: - in: query name: phoneNumber required: false schema: description: >- DEPRECATED, use `phoneNumbers` instead. If both `phoneNumber` and `phoneNumbers` are provided, `phoneNumbers` will be used. Filters results to only include conversations with the specified OpenPhone phone number. Can be either your OpenPhone phone number ID or the full phone number in E.164 format. examples: - '+15555555555' - PN123abc deprecated: true anyOf: - description: A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - pattern: ^PN(.*)$ type: string - in: query name: phoneNumbers required: false schema: description: >- Filters results to only include conversations with the specified OpenPhone phone numbers. Each item can be either an OpenPhone phone number ID or a full phone number in E.164 format. examples: - - '+15555555555' - PN123abc minItems: 1 maxItems: 100 type: array items: anyOf: - description: A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - pattern: ^PN(.*)$ type: string - in: query name: userId required: false schema: description: >- The unique identifier of the user the making the request. Used to filter results to only include the user's conversations. examples: - US123abc pattern: ^US(.*)$ type: string - in: query name: createdAfter required: false schema: description: >- Filter results to only include conversations created after the specified date and time, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: createdBefore required: false schema: description: >- Filter results to only include conversations created before the specified date and time, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: excludeInactive required: false schema: description: Exclude inactive conversations from the results. examples: - true type: boolean - in: query name: updatedAfter required: false schema: description: >- Filter results to only include conversations updated after the specified date and time, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: updatedBefore required: false schema: description: >- Filter results to only include conversations updated before the specified date and time, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: maxResults required: true schema: description: Maximum number of results to return per page. default: 10 maximum: 100 minimum: 1 type: integer - in: query name: pageToken required: false schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: type: object properties: assignedTo: anyOf: - type: string - type: 'null' createdAt: anyOf: - format: date-time type: string - type: 'null' deletedAt: anyOf: - format: date-time type: string - type: 'null' id: pattern: ^CN(.*)$ type: string lastActivityAt: anyOf: - format: date-time type: string - type: 'null' lastActivityId: anyOf: - pattern: ^AC(.*)$ type: string - type: 'null' mutedUntil: anyOf: - format: date-time type: string - type: 'null' name: anyOf: - type: string - type: 'null' participants: type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string phoneNumberId: pattern: ^PN(.*)$ type: string snoozedUntil: anyOf: - format: date-time type: string - type: 'null' updatedAt: anyOf: - format: date-time type: string - type: 'null' required: - assignedTo - createdAt - deletedAt - id - lastActivityAt - lastActivityId - mutedUntil - name - participants - phoneNumberId - snoozedUntil - updatedAt totalItems: description: >- Total number of items available. ⚠️ Note: `totalItems` is not accurately returning the total number of items that can be paginated. We are working on fixing this issue. type: integer nextPageToken: anyOf: - type: string - type: 'null' required: - data - totalItems - nextPageToken '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '1000400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '1000401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '1001403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '1000404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '1001500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/messages/list-messages.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # List messages > Retrieve a chronological list of messages exchanged between your OpenPhone number and specified participants, with support for filtering and pagination. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/messages openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/messages: get: tags: - Messages summary: List messages description: >- Retrieve a chronological list of messages exchanged between your OpenPhone number and specified participants, with support for filtering and pagination. operationId: listMessages_v1 parameters: - in: query name: phoneNumberId required: true schema: description: >- The unique identifier of the OpenPhone number used to send or receive the messages. PhoneNumberID can be retrieved via the Get Phone Numbers endpoint. examples: - OP123abc pattern: ^PN(.*)$ type: string - in: query name: userId required: false schema: description: The unique identifier of the user the message was sent from. examples: - US123abc pattern: ^US(.*)$ type: string - in: query name: participants required: true schema: description: >- Array of phone numbers involved in the conversation, excluding your OpenPhone number, in E.164 format. examples: - '+15555555555' type: array items: description: A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string - in: query name: since required: false schema: deprecated: true description: >- DEPRECATED, use "createdAfter" or "createdBefore" instead. "since" currently behaves as "createdBefore" and will be removed in an upcoming release. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: createdAfter required: false schema: description: >- Filter results to only include messages created after the specified date and time, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: createdBefore required: false schema: description: >- Filter results to only include messages created before the specified date and time, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - in: query name: maxResults required: true schema: description: Maximum number of results to return per page. default: 10 maximum: 100 minimum: 1 type: integer - in: query name: pageToken required: false schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: description: The unique identifier of the message. examples: - AC123abc pattern: ^AC(.*)$ type: string to: type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string from: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string text: description: The content of the message. examples: - Hello, world! type: string phoneNumberId: anyOf: - description: >- The unique identifier of the OpenPhone phone number that the message was sent from. examples: - PN123abc pattern: ^PN(.*)$ type: string - type: 'null' direction: type: string enum: - incoming - outgoing description: >- The direction of the message relative to the OpenPhone number. examples: - incoming userId: description: >- The unique identifier of the user who sent the message. Null for incoming messages. examples: - US123abc pattern: ^US(.*)$ type: string status: type: string enum: - queued - sent - delivered - undelivered description: The status of the message. examples: - sent createdAt: description: >- The timestamp when the message was created at, in ISO 8601 format examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The timestamp when the message status was last updated, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string required: - id - to - from - text - phoneNumberId - direction - userId - status - createdAt - updatedAt totalItems: description: >- Total number of items available. ⚠️ Note: `totalItems` is not accurately returning the total number of items that can be paginated. We are working on fixing this issue. type: integer nextPageToken: anyOf: - type: string - type: 'null' required: - data - totalItems - nextPageToken '400': description: A2P Registration Not Approved content: application/json: schema: type: object properties: message: type: string code: const: '0206400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: A2P Registration Not Approved type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: A2P Registration Not Approved type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0200401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '402': description: Not Enough Credits content: application/json: schema: type: object properties: message: type: string code: const: '0200402' type: string status: const: 402 type: number docs: const: https://openphone.com/docs type: string title: const: Not Enough Credits type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: >- The organization does not have enough prepaid credits to send the message type: string required: - message - code - status - docs - title - description '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0202403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0200404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0201500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/phone-numbers/list-phone-numbers.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # List phone numbers > Retrieve the list of phone numbers and users associated with your OpenPhone workspace. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/phone-numbers openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/phone-numbers: get: tags: - Phone Numbers summary: List phone numbers description: >- Retrieve the list of phone numbers and users associated with your OpenPhone workspace. operationId: listPhoneNumbers_v1 parameters: - in: query name: userId required: false schema: description: >- Filter results to return only phone numbers associated with the specified user"s unique identifier. examples: - US123abc pattern: ^US(.*)$ type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ListPhoneNumbersResponse' '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '0400400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0400401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0400403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0400404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0401500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: schemas: ListPhoneNumbersResponse: type: object properties: data: type: array items: type: object properties: id: description: The unique identifier of OpenPhone phone number. examples: - PN123bc pattern: ^PN(.*)$ type: string groupId: description: >- The unique identifier of the group to which the OpenPhone number belongs. examples: - '1234' type: string portRequestId: anyOf: - description: >- Unique identifier for the phone number’s porting request, if applicable. examples: - 123abc type: string - type: 'null' formattedNumber: anyOf: - description: A human-readable representation of a phone number. examples: - '+15555555555' type: string - type: 'null' forward: anyOf: - description: >- Forwarding number for incoming calls, null if no forwarding number is configured. examples: - '+15555555555' type: string - type: 'null' name: description: The display name of the phone number examples: - My phone number type: string number: description: A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string portingStatus: anyOf: - description: Current status of the porting process, if applicable. examples: - completed type: string - type: 'null' symbol: anyOf: - description: Custom symbol or emoji associated with the phone number. examples: - 🏡 type: string - type: 'null' users: type: array items: type: object allOf: - type: object properties: email: description: The user's email address. examples: - my@email.com format: email type: string firstName: anyOf: - description: The user's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The user's last name. examples: - Doe type: string - type: 'null' id: pattern: ^US(.*)$ type: string role: type: string enum: - owner - admin - member description: The user's role in the organization. examples: - owner - admin - member required: - email - firstName - lastName - id - role - type: object properties: groupId: description: >- The unique identifier of the group to which the user belongs. examples: - GRcei8k90o pattern: ^GR(.*)$ type: string required: - groupId createdAt: description: >- Timestamp of when the phone number was added to the account in ISO 8601 format. examples: - ' ''2022-01-01T00:00:00Z''' type: string updatedAt: description: >- Timestamp of the last update to the phone number's details in ISO 8601 format. examples: - ' ''2022-01-01T00:00:00Z''' type: string restrictions: type: object properties: calling: type: object properties: CA: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted Intl: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted US: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted required: - CA - Intl - US messaging: type: object properties: CA: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted Intl: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted US: type: string enum: - restricted - unrestricted description: >- The phone-number usage restriction status for a specific region examples: - unrestricted required: - CA - Intl - US required: - calling - messaging required: - id - groupId - portRequestId - formattedNumber - forward - name - number - portingStatus - symbol - users - createdAt - updatedAt - restrictions required: - data securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/users/list-users.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # List users > Retrieve a paginated list of users in your OpenPhone workspace. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/users openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/users: get: tags: - Users summary: List users description: Retrieve a paginated list of users in your OpenPhone workspace. operationId: listUsers_v1 parameters: - in: query name: maxResults required: true schema: description: Maximum number of results to return per page. default: 10 maximum: 50 minimum: 1 type: integer - in: query name: pageToken required: false schema: type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: pattern: ^US(.*)$ type: string email: description: The user's email address. examples: - my@email.com format: email type: string firstName: anyOf: - description: The user's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The user's last name. examples: - Doe type: string - type: 'null' pictureUrl: anyOf: - description: The user's picture URL. examples: - https://example.com/picture.jpg format: uri type: string - type: 'null' role: type: string enum: - owner - admin - member description: The user's role in the organization. examples: - owner - admin - member createdAt: description: Timestamp of user creation in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: Timestamp of last user update in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string required: - id - email - firstName - lastName - pictureUrl - role - createdAt - updatedAt totalItems: description: >- Total number of items available. ⚠️ Note: `totalItems` is not accurately returning the total number of items that can be paginated. We are working on fixing this issue. type: integer nextPageToken: anyOf: - type: string - type: 'null' required: - data - totalItems - nextPageToken '400': description: Bad Request content: application/json: schema: type: object properties: message: type: string code: const: '1100400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Bad Request type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '1100401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '1100403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '1100404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '1101500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/webhooks/lists-all-webhooks.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Lists all webhooks > List all webhooks for a user. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json get /v1/webhooks openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/webhooks: get: tags: - Webhooks summary: Lists all webhooks description: List all webhooks for a user. operationId: listWebhooks_v1 parameters: - in: query name: userId required: false schema: description: The unique identifier the user. Defaults to the workspace owner. examples: U55wgP5I5 pattern: ^US(.*)$ type: string responses: '200': description: Success content: application/json: schema: type: object properties: data: type: array items: anyOf: - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: type: array items: type: string enum: - message.received - message.delivered resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: type: array items: type: string enum: - call.completed - call.ringing - call.recording.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: minItems: 1 type: array items: type: string enum: - call.summary.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds - type: object properties: id: description: The webhook's ID examples: - WHabcd1234 pattern: ^WH(.*)$ type: string userId: description: >- The unique identifier of the user that created the webhook. examples: - US123abc pattern: ^US(.*)$ type: string orgId: description: >- The unique identifier of the organization the webhook belongs to examples: - OR1223abc pattern: ^OR(.*)$ type: string label: anyOf: - description: The webhook's label. examples: - my webhook label type: string - type: 'null' status: type: string enum: - enabled - disabled default: enabled description: The status of the webhook. examples: - enabled url: format: uri description: >- The endpoint that receives events from the webhook. examples: - https://example.com/ type: string key: description: Webhook key examples: - example-key type: string createdAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The date the webhook was created at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string deletedAt: anyOf: - description: >- The date the webhook was deleted at, in ISO_8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string - type: 'null' events: minItems: 1 type: array items: type: string enum: - call.transcript.completed resourceIds: anyOf: - type: array items: pattern: ^PN(.*)$ type: string - type: array items: const: '*' type: string required: - id - userId - orgId - label - status - url - key - createdAt - updatedAt - deletedAt - events - resourceIds required: - data '400': description: Invalid Version content: application/json: schema: type: object properties: message: type: string code: const: '0305400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Version type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Version type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0300401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Forbidden content: application/json: schema: type: object properties: message: type: string code: const: '0300403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Forbidden type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0300404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0301500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/pricing-support/minimizing-costs.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Tips for minimizing costs > We’ve provided the below tips to help you minimize segment counts and save money. Standard Latin alphabet characters, numbers, and basic punctuation use 160 characters per segment. Some special characters (é, ñ, ß) reduce segment capacity to 70 characters. Most emojis count as two characters. Extensive use can quickly increase segment count. Each line break counts as a character. Long URLs can span multiple segments. Shortened links save space. Use widely understood abbreviations to reduce character count. --- # Source: https://www.quo.com/docs/mdx/api-reference/partner-directory.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Partner directory > Connect with experts to achieve your customer communications goals. Thinking about building with the Quo API but don’t have the time or in-house expertise to get started? Our trusted Quo Experts are here to help. Browse our [directory of partners](https://www.openphone.com/experts) who offer tailored services to help you make the most of your Quo setup. Whether it's integrating with other tools, optimizing your workflows, or getting onboarded smoothly, we've got you covered. Not sure where to start? [Tell us about your project](https://www.openphone.com/experts/matchmaking), and we'll connect you with the right partner. --- # Source: https://www.quo.com/docs/mdx/pricing-support/pricing-overview.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # API Pricing overview > Welcome to Quo's simple and transparent API pricing structure. ## Our pricing philosophy At Quo, we believe in transparent and fair pricing. Sometimes it can be hard to understand the true cost of something when it's buried in the fine print. We are committed to helping you clearly understand and manage your costs when using our platform. ## Core pricing model Our pricing is based on message segments, making it easy to calculate costs:

\$0.01 per segment

\$0.01 + country-specific rate per segment

Rates vary by destination country

For detailed international rates by country, see our [International Pricing Guide](https://www.openphone.com/rates). ## Understanding message segments A **segment** is the basic unit we use to calculate SMS billing. Every message you send is divided into one or more segments based on two factors: 1. **Message length** (character count) 2. **Character type** (standard or special characters) ## How character types affect segment size ### Standard GSM characters Messages using only standard GSM-7 characters fit **up to 160 characters per segment**. Standard characters include: * Letters (A-Z, a-z) * Numbers (0-9) * Spaces * Basic punctuation (. , ! ? - etc.) ### Special/Non-GSM characters **If your message contains even one special character, the entire message is billed at the 70-character limit** — not just the portion with special characters. This often results in more segments and higher costs than you might expect. Messages containing **any** special characters fit only **up to 70 characters per segment**. Special characters include: * Accented letters (é, ñ, ü) * Curly/smart quotes (" " ' ') * Emojis (😊, 🚀, ✨) * Many international characters ## Tools and optimization ### Segment calculator Use our [Segment Calculator](https://twiliodeved.github.io/message-segment-calculator/) tool to estimate costs before sending messages. This helps you optimize your message length and content to avoid unexpected charges. ### Smart encoding The Quo API automatically enables **smart encoding** to minimize segment usage and reduce costs wherever possible. This feature works behind the scenes to choose the most efficient encoding for your messages. ## API message types You're only charged for outgoing API-powered messages, which include: Messages sent through direct API calls Messages sent via applications built with our API ## How our billing works We use a credit-based system for all API messaging charges: Add funds to your account through the "Plans & Billing" tab Credits are automatically deducted when messages are sent Monitor your balance and enable auto-recharge to prevent service interruptions ## Important service notes ### Requirements & limitations 1. An active Quo subscription is required for API access. 2. MMS is not supported in the current API version. 3. Partial credits cannot be used for sending messages; the API will return an error. If your credit balance is insufficient for a message's full cost, the API will return an error and the message won't be sent. ### Support & assistance Need help understanding our pricing or managing your costs? Our team is here to help. Email us at [support+developers@quo.com](mailto:support+developers@quo.com) with any questions. --- # Source: https://www.quo.com/docs/mdx/api-reference/rate-limits.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Rate limits > Quo implements rate limiting to ensure API stability and fair usage. Each API key may make up to **10 requests per second.** Exceeding this limit may result in `429` status code errors. Implement request throttling in your application to stay within rate limits and optimize API usage. --- # Source: https://www.quo.com/docs/mdx/api-reference/messages/send-a-text-message.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Send a text message > Send a text message from your OpenPhone number to a recipient. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json post /v1/messages openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/messages: post: tags: - Messages summary: Send a text message description: Send a text message from your OpenPhone number to a recipient. operationId: sendMessage_v1 parameters: [] requestBody: required: true content: application/json: schema: type: object properties: content: minLength: 1 maxLength: 1600 pattern: .*\S.* description: The text content of the message to be sent. type: string phoneNumberId: description: >- DEPRECATED, use "from" instead. OpenPhone phone number ID to send a message from examples: - OP1232abc deprecated: true pattern: ^PN(.*)$ type: string from: anyOf: - pattern: ^PN(.*)$ type: string - description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string to: minItems: 1 maxItems: 1 type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string userId: description: >- The unique identifier of the OpenPhone user sending the message. If not provided, defaults to the phone number owner. examples: - US123abc pattern: ^US(.*)$ type: string setInboxStatus: type: string enum: - done description: >- Used to set the status of the related OpenPhone inbox conversation. The default behavior without setting this parameter will be for the message sent to show up as an open conversation in the user's inbox. Setting the parameter to `'done'` would move the conversation to the Done inbox view. examples: - done required: - content - from - to responses: '202': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The unique identifier of the message. examples: - AC123abc pattern: ^AC(.*)$ type: string to: type: array items: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string from: description: >- A phone number in E.164 format, including the country code. examples: - '+15555555555' pattern: ^\+[1-9]\d{1,14}$ type: string text: description: The content of the message. examples: - Hello, world! type: string phoneNumberId: anyOf: - description: >- The unique identifier of the OpenPhone phone number that the message was sent from. examples: - PN123abc pattern: ^PN(.*)$ type: string - type: 'null' direction: type: string enum: - incoming - outgoing description: >- The direction of the message relative to the OpenPhone number. examples: - incoming userId: description: >- The unique identifier of the user who sent the message. Null for incoming messages. examples: - US123abc pattern: ^US(.*)$ type: string status: type: string enum: - queued - sent - delivered - undelivered description: The status of the message. examples: - sent createdAt: description: >- The timestamp when the message was created at, in ISO 8601 format examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: >- The timestamp when the message status was last updated, in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string required: - id - to - from - text - phoneNumberId - direction - userId - status - createdAt - updatedAt required: - data '400': description: A2P Registration Not Approved content: application/json: schema: type: object properties: message: type: string code: const: '0206400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: A2P Registration Not Approved type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: A2P Registration Not Approved type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0200401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '402': description: Not Enough Credits content: application/json: schema: type: object properties: message: type: string code: const: '0200402' type: string status: const: 402 type: number docs: const: https://openphone.com/docs type: string title: const: Not Enough Credits type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: >- The organization does not have enough prepaid credits to send the message type: string required: - message - code - status - docs - title - description '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0202403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0200404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0201500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/api-reference/send-your-first-message.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Send your first message > This is a step-by-step guide for sending your first text message. ## Ping! Let's get started sending text messages via the Quo API. **Have you completed Carrier Registration?** If you plan to send text messages to US numbers via the API, you will also need to complete US Carrier Registration. Learn more [here](https://support.openphone.com/hc/en-us/articles/15519949741463-Guide-to-US-carrier-registration-for-OpenPhone-customers). ### 1. Get phone numbers (optional) Make a call to the `GET Phone Numbers` endpoint to retrieve `userId` and `from` for the desired number (the phone number from which you'd like to send a text message). This step is optional if you already know the `userId` and `from` for the desired sending number. ``` curl --request GET \ --url https://api.openphone.com/v1/phone-numbers \ --header 'Authorization: YOUR_API_KEY' ``` ### 2. Specify user ID (optional) 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. ### 3. Send your message You are now ready to send your first text message! Once you send your text message, you will receive a 202 Success Message via the API. Nice! ``` curl --request POST \ --url https://api.openphone.com/v1/messages \ --header 'Authorization: YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "content": "", "from": "", "to": [ "+15555555555" ], "userId": "" }' ``` Be sure to format phone numbers in E.164 format (+1234567890). ### Summary You are now able to send a text message to anyone in US or Canada. By using the API, you are able to programmatically send texts to your customers. --- # Source: https://www.quo.com/docs/mdx/guides/sync-contacts.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Sync your contacts > Implement a one-way contact sync from Google Sheets to Quo using Javascript. ## Overview This guide provides a foundation for implementing a one-way sync from Google Sheets to Quo using JavaScript. You may need to adjust some details based on your specific requirements and environment. Remember to thoroughly test the implementation to ensure data integrity. ## Development guide ##### 1.1 Quo API. * Obtain your Quo API key from the Quo dashboard. ##### 1.2 Google Sheets API * Enable the Google Sheets API in your Google Cloud Console. * Create service account credentials and download the JSON key file. ##### 1.3 Google Sheets * Create a Google Sheet in the following format: | contactId | firstName | lastName | phone | email | | --------- | --------- | -------- | -------------- | ------------------------------------------- | | | Jane | Doe | (555) 555-5555 | [jane@example.com](mailto:jane@example.com) | * Share your Google Sheet with the service account email address. ##### 2.1 Ensure you have Node.js installed on your system. ##### 2.2 Create a new Node.js project and initialize it ```bash theme={null} mkdir quo-sync cd quo-sync npm init -y ``` ##### 2.3 Install required packages ```bash theme={null} npm install googleapis axios dotenv node-cron ``` ##### 2.4 Create a .env file to store environment variables ```bash theme={null} QUO_API_KEY=your_quo_api_key GOOGLE_APPLICATION_CREDENTIALS=path/to/your/credentials.json GOOGLE_SHEET_ID=your_google_sheet_id ``` ##### 3.1 Create a new file named `sync.js` and add the setup functions ```js theme={null} require("dotenv").config(); const { google } = require("googleapis"); const axios = require("axios"); const cron = require("node-cron"); const API_BASE_URL = "https://api.openphone.com/v1"; const quo = axios.create({ baseURL: API_BASE_URL, headers: { Authorization: process.env.QUO_API_KEY, "Content-Type": "application/json", }, }); const googleAuth = new google.auth.GoogleAuth({ keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS, scopes: ["https://www.googleapis.com/auth/spreadsheets"], }); ``` ##### 3.2 Add the Quo API helper functions ```js theme={null} async function createQuoContact(contactData) { const response = await quo.post("/contacts", contactData); return response.data.data; } async function updateQuoContact(contactId, contactData) { const response = await quo.patch(`/contacts/${contactId}`, contactData); return response.data.data; } ``` ##### 3.3 Add the Google Sheets to Quo contacts mapping function ```js theme={null} function mapFields(sheetRow) { if (!sheetRow.firstName) { console.warn("Missing required firstName in row: ", sheetRow); return; } return { defaultFields: { firstName: sheetRow.firstName, lastName: sheetRow.lastName, phoneNumbers: sheetRow.phone ? [{ name: "primary", value: sheetRow.phone }] : undefined, emails: sheetRow.email ? [{ name: "primary", value: sheetRow.email }] : undefined, }, }; } ``` ##### 3.4 Add the Google Sheets helper functions ```js theme={null} async function getGoogleSheetsData() { const sheets = google.sheets({ version: "v4", googleAuth }); const response = await sheets.spreadsheets.values.get({ spreadsheetId: process.env.GOOGLE_SHEET_ID, range: "Sheet1!A1:Z", // First sheet and all initial columns }); const rows = response.data.values; const headers = rows[0]; // First row contains headers return rows.slice(1).map((row) => { // Skip the first row and map the contact data const contact = {}; headers.forEach((header, index) => { contact[header] = row[index]; }); return contact; }); } async function updateSheetWithContactId(rowNumber, contactId) { const sheets = google.sheets({ version: "v4", googleAuth }); await sheets.spreadsheets.values.update({ spreadsheetId: process.env.GOOGLE_SHEET_ID, range: `Sheet1!A${rowNumber + 2}`, // +2 to account for 1-based index and header row valueInputOption: "RAW", resource: { values: [[contactId]] }, }); } ``` ##### 3.4 Finally, tie it all together ```js theme={null} async function syncContacts() { const sheetContacts = await getGoogleSheetsData(); for (const [rowNumber, sheetRow] of sheetContacts.entries()) { const mappedContact = mapFields(sheetRow); if (sheetRow.contactId) { await updateQuoContact(sheetRow.contactId, mappedContact); } else { const { id } = await createQuoContact(mappedContact); await updateSheetWithContactId(rowNumber, id); } } console.log("Sync completed successfully"); } // Run sync every hour cron.schedule("0 * * * *", syncContacts); console.log("Sync process started. Running every hour."); ``` ```bash theme={null} node sync.js ``` This will start the sync process, which will run every hour. ## Considerations and Optimizations * Implement deletion logic to remove contacts from Quo that are no longer present in the Google Sheet. * Implement pagination for fetching Quo contacts if you have a large number of contacts. * Implement more robust error handling and retry mechanisms. * Implement logging for auditing and troubleshooting purposes. * Consider using a database to store the state of the sync process and to track changes between syncs. * Consider implementing rate-limiting and an incremental sync to reduce API calls and processing time. * For production use, consider deploying this script to a cloud platform like Heroku or AWS Lambda for better reliability and scalability. --- # Source: https://www.quo.com/docs/mdx/api-reference/tech-partner.md # Technology partners > Integrate Quo to give your app powerful communication and AI features. **Interested in becoming a Quo technology partner?**\ Technology partners are builders who create integrations between Quo and other platforms. By integrating with Quo, you can deliver seamless communication workflows and enhanced functionality to your users. Start by [**signing up**](https://my.quo.com/signup) for a Quo account for a free 7-day trial. When you're ready, submit the form below to request access to a free sandbox account for development and testing. [Request demo account](https://openphone.typeform.com/to/Mdiga17a) Questions? Email our Partnerships team at [partners@quo.com](mailto:partners@quo.com). --- # Source: https://www.quo.com/docs/mdx/pricing-support/terms-of-service.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Terms of Service > Developer API Terms of Service Please read these Developer API Terms of Service (the “Agreement”) carefully before using the API and Service (each as defined below) offered by OpenPhone Technologies, Inc. (“OpenPhone”). By clicking on the “Accept” or “Submit” button, you or the entity or company that you represent (“You,” “Your,” “Yours” or “Developer”) are unconditionally consenting to be bound by and are becoming a party to this Agreement. Your use of any portion of the API or Service, as well as your submission of any registration form or similar document that references this Agreement shall also constitute assent to this Agreement. If you do not unconditionally agree to all of the terms of this Agreement, click the “Decline” button and you shall have no right to use the API or Service. If you are entering into this Agreement on behalf of an entity, then you represent and warrant that you are authorized to bind such entity to the terms of this Agreement. If the terms of this Agreement are considered an offer, acceptance is expressly limited to such terms. WHEREAS, OpenPhone owns and operates a business phone, texting, and collaborative workspace system and application (the “Service”); WHEREAS, Developer desires to acquire from OpenPhone, and OpenPhone desires to provide to Developer, the right and license to access and use certain technologies and develop integrations to the Services as more fully described herein; NOW THEREFORE, the parties hereto, in consideration of the foregoing and other good and valuable consideration recognized by the parties, hereby agree as follows: ​ 1. Definitions The following terms shall have the following meanings for the purpose of this Agreement: 1.1 “Acceptable Use Policy” means OpenPhone’s acceptable use policy for Developers creating Integrations, available at [https://www.openphone.com/terms](https://www.openphone.com/terms), which may be updated by OpenPhone from time to time. 1.2 “API” means OpenPhone’s application programming interfaces and specifications thereto, as it is provided by OpenPhone to Developer, to enable Developer and End Users to interface with the Service. 1.3 “Documentation” means documentation and information regarding the API and Service that are delivered by OpenPhone to Developer in any form (including the documentation set forth at [https://www.openphone.com/docs](https://www.openphone.com/docs), including any updates to such documentation provided by OpenPhone from time to time. 1.4 “End User” means a user that accesses the API or the Service through the Integration for such user’s own benefit. 1.5 “End User Content” means any information, data, text, content or other materials that Developer or End Users upload, submit, transmit, display, post, store, or otherwise make available through the Service, including through the API or the Integration. 1.6 “Integration” means a software application or process that utilizes the API to make the Services compatible and/or interoperable with another software application or platform. 1.7 “OpenPhone Data” means any information, data, text or other content provided by or on behalf of OpenPhone to Developer about an individual End User. 1.8 “OpenPhone Terms of Service” means OpenPhone’s standard terms of service, available at [https://www.openphone.com/terms](https://www.openphone.com/terms), which may be updated by OpenPhone from time to time. ​ 2\. API, Service and OpenPhone Data License; Restrictions 2.1 License. Subject to the terms and conditions of this Agreement, OpenPhone hereby grants Developer a non-exclusive, non-transferable, non-sublicensable, revocable, and limited right and license during the Term to access and use the Service, API and OpenPhone Data (a) to build one or more Integrations that connect to the Service, and (b) to permit End Users who have agreed to the OpenPhone Terms of Service to access the Service via such Integrations, in each case, in accordance with the Documentation, Acceptable Use Policy, and the OpenPhone Terms of Service. For the avoidance of doubt, Developer may not make any Integration or provide access to the Service to any End User or any other person or entity who has not agreed to the OpenPhone Terms of Service. 2.2 Registration; Monetization. Prior to accessing the API or developing an Integration, Developer shall complete OpenPhone’s standard registration process and provide all requested information, including, without limitation, (i) contact information for Developer, (ii) the purpose, features, and functionality of the Integration, and (iii) whether Developer intends to charge End Users for or otherwise monetize the Integration. Developer may not charge End Users for access to the Services via the Integration or otherwise monetize the Integration without OpenPhone’s prior written approval. 2.3 Responsibilities. Developer is solely responsible for the acts or omissions of Developer and each End User in connection with their use of the API and Service in connection with the Integration. Developer’s agreements with End Users must: (i) be no less protective of OpenPhone’s rights and ownership than this Agreement and the OpenPhone Terms of Service; (ii) not grant greater use or access rights to the Service or API than those rights, licenses and permissions described in OpenPhone Terms of Service; (iii) include substantially and materially similar restrictions to those set forth in Section 2.5 with respect to the Service and API to the extent applicable; and (iv) require, as a condition of accessing the Services via the Integration, that End Users have agreed to the OpenPhone Terms of Service. Developer shall prohibit unauthorized access to or use of the API and to promptly notify OpenPhone of any such unauthorized access or use. Developer accepts and assumes all responsibility for complying with all applicable laws and regulations in connection with all of Developer’s and End Users’ activities involving the API, the Service, End User Content and OpenPhone Data. 2.4 Updates and Modifications. Developer understands and agrees that the specifications for the API and the Service shall be defined by OpenPhone in its sole discretion, and Developer is responsible for its development and other costs associated with Developer’s use of the API or Integration. OpenPhone reserves the right to modify, change, update and/or enhance the API and/or the Service (each a “Modification”) at any time in OpenPhone’s sole and exclusive discretion. Developer acknowledges and agrees that such Modifications may affect Developer’s and End Users’ ability to access the Service and may require Developer to make changes to the Integration. OpenPhone shall not be liable for any costs incurred by Developer arising out of or in connection with any Modification. 2.5 License Restrictions. 2.5.1 Except as expressly permitted hereunder, Developer shall not, and shall require that End Users do not (i) use any method to access or use the Service other than as permitted through the API, (ii) provide the API or access to the Service to any third parties other than End Users, (iii) permit or enable third parties to copy or obtain the API or access to the Service in any manner not expressly authorized in this Agreement, (iv) use the API or Service, in any manner that violates applicable laws, (v) license, sell, re-sell, rent, lease, transfer, assign, reproduce, distribute, or alter the API, Service or any portion of the API or Service, or permit or enable any third parties to do so; (vi) use the Service, the API, or any documentation or other materials received from OpenPhone in connection with this Agreement, to develop a product or service that competes with the Service; (vii) modify, translate, adapt, merge, make derivative works of, disassemble, decompile, reverse compile or reverse engineer, or otherwise attempt to discover the source code or underlying algorithms of any part of the Service or API except to the extent the foregoing restrictions are expressly prohibited by applicable law; (viii) remove or destroy any copyright notices or other proprietary markings contained on or in the Service or API; (ix) access or use the API or Service in any manner that could disable, overburden, damage, disrupt or impair the API or Service or interfere with any other party’s access to or use of the API or Service or use any device, software or routine that causes the same; (x) attempt to gain unauthorized access to, interfere with, damage or disrupt the API or Service, accounts registered to other users, or the computer systems or networks connected to the API or Service; (xi) circumvent, remove, alter, deactivate, degrade or thwart any technological measure or content protections of the API or Service; (xii) use any robot, spider, crawlers, scraper, or other automatic device, process, software or queries that intercepts, “mines,” scrapes, extracts, or otherwise accesses the API or Service to monitor, extract, copy or collect information or data from or through the API or Service; or (xiii) introduce any viruses, trojan horses, worms, logic bombs or other materials that are malicious or technologically harmful into OpenPhone’s systems. 2.6 Public Announcement. The timing and content of any advertisements, announcements, press releases or other promotional activity relating to this Agreement, and the use of one party’s name or trademarks by the other party shall be subject to the prior approval of both parties. Notwithstanding the foregoing, OpenPhone may reference Developer as a Developer in advertisements, press releases, or other marketing or promotional activities regarding OpenPhone’s products or services. ​ 3\. Ownership; Licenses; Third-Party Materials 3.1 OpenPhone Ownership. As between OpenPhone and Developer, OpenPhone retains all rights, title and interest in and to all intellectual property rights embodied in or pertaining to the API, Service, OpenPhone Data, and OpenPhone Marks (as defined in Section 3.3), and all improvements, modifications, enhancements, and derivative works of any of the foregoing. There are no implied licenses under this Agreement, and any rights not expressly granted to Developer hereunder are reserved by OpenPhone or its licensors. Developer shall not take any action inconsistent with OpenPhone’s ownership of the API, Service, OpenPhone Data, or OpenPhone Marks. 3.2 Integration; End User Content. As between OpenPhone and Developer, to the extent permitted by applicable law, Developer retains ownership of the Integration, subject to the license granted to OpenPhone in the following sentence. Developer grants OpenPhone a perpetual, non-exclusive, sublicensable (through multiple tiers of sublicensees) royalty-free, fully paid right and license to use, copy, host, store, transfer, display, perform, reproduce, modify for the purpose of formatting for display, and distribute the Integration and End User Content, in whole or in part, in any and all media or distribution methods (now known or later developed) for the purposes of operating and providing the Service to Developer and End Users, and any for any other lawful business purpose, including to improve the usability, functionality, and accuracy of the Service. 3.3 Trademark License. Developer will prominently include the words \[“Powered by OpenPhone”] wherever it makes the Service available to End Users (including in the end-user facing interface of the Integration) and in all marketing and promotional materials that reference the functionality provided by the Service or Integration. OpenPhone hereby grants Developer a limited, non-exclusive, non-transferable, non-sublicensable, royalty-free license to use OpenPhone’s trademarks, service marks, and logos (collectively “OpenPhone Marks”) during the Term on Developer’s websites or promotional materials solely to (i) attribute OpenPhone as the provider of the Service and (ii) otherwise advertise and promote the availability of access to the Service in the Integration. Developer agrees to use the OpenPhone Marks only in a form identified by OpenPhone in writing for use hereunder and such quality standards as may be reasonably established by OpenPhone and communicated to Developer from time to time in writing. Developer shall obtain OpenPhone’s prior written approval of any material change in the style and manner in which any of the OpenPhone Marks are proposed to be used. Developer shall not use the OpenPhone Marks in a manner that disparages OpenPhone or its products or services, portrays OpenPhone in a false, competitively adverse or poor light, or dilutes the OpenPhone Marks. Except as expressly provided for in this Section 3.3, OpenPhone reserves all right, title, and interest in and to the OpenPhone Marks. All goodwill arising from Developer’s use of the OpenPhone Marks shall inure to the benefit of OpenPhone. Developer hereby grants OpenPhone a limited, non-exclusive, non-transferable, non-sublicensable, royalty-free license to use Developer’s trademarks, service marks, and logos (collectively “Developer Marks”) on OpenPhone’s websites or promotional materials solely to advertise and promote the availability of access to the Service in the Integration and in accordance with Section 2.6. OpenPhone shall obtain Developer’s prior written approval of any material change in the style and manner in which any of the Developer Marks are proposed to be used. Developer shall not use the Developer Marks in a manner that disparages Developer or its products or services, portrays Developer in a false, competitively adverse or poor light, or dilutes the Developer Marks. Developer reserves all right, title, and interest in and to the Developer Marks. All goodwill arising from OpenPhone’s use of the Developer Marks shall inure to the benefit of Developer. 3.4 Feedback. Developer agrees that submission of any ideas, suggestions, documents, proposals or other feedback provided to OpenPhone (“Feedback”) is at Developer’s own risk and that OpenPhone has no obligations (including obligations of confidentiality) with respect to such Feedback. Developer represents and warrants that it has all rights necessary to submit the Feedback. Developer hereby grants to OpenPhone a fully paid, royalty-free, perpetual, irrevocable, worldwide, non-exclusive, transferrable, and fully sublicensable right and license to use, reproduce, perform, display, distribute, adapt, modify, re-format, create derivative works of, and otherwise exploit in any manner, any and all Feedback without restriction of compensation. 3.5 Content and Data. 3.5.1 End User Content. Developer represents and warrants that (i) before any End User may engage with the Integration or Service, Developer shall ensure that it provides all notices and obtains all consents required under applicable law to enable OpenPhone to process End User Content in accordance with OpenPhone’s privacy policy (currently available at [https://www.openphone.com/privacy](https://www.openphone.com/privacy)); (ii) it has sufficient rights, consents, and permissions to grant the licenses to OpenPhone set forth in Section 3.2 and to input the End User Content into the Service and (iii) the End User Content does not infringe, misappropriate, or otherwise violate any third party’s intellectual property rights, privacy rights, rights of publicity, moral rights, or other proprietary rights. Developer shall not (i) make representations or other statements with respect to End User Content that are contrary to or otherwise inconsistent with OpenPhone’s privacy policy or (ii) interfere with any independent efforts by OpenPhone to provide End User notice or obtain End User consent. 3.5.2 OpenPhone Data. OpenPhone Data shall only be used for the purpose of making the Service available to End Users in accordance with the OpenPhone Terms of Service and Developer shall delete all OpenPhone Data in accordance with the Documentation. Developer shall be responsible for obtaining consent directly from End Users for any other use of the End User’s information or data. To the extent that End User submits any information or data directly to Developer, Developer shall be solely responsible for ensuring that Developer’s use of that data is in compliance with any applicable laws and Developer’s own stated privacy policy. 3.5.3 DMCA. OpenPhone complies with the Digital Millennium Copyright Act (the “DMCA”) with regard to End User Content and all other content uploaded, submitted, transmitted, displayed, posted, stored, or otherwise made available on the Service that allegedly violates a third party’s copyright. OpenPhone reserves the right to delete or disable any content alleged to be infringing, and to terminate access to the Services for repeat alleged infringers. OpenPhone’s complete Copyright Dispute Policy is available at \[insert link]. 3.6 Third Party Services. Developer acknowledges and agrees that: (i) the Service may incorporate certain information, data, and materials from third party providers (collectively, “Third Party Services”), including without limitation through integrations or connectors to such Third Party Services that are provided by OpenPhone; (ii) Third Party Services may only be used in conjunction with the Service; and (iii) Developer’s use of the Third Party Services hereunder shall be subject to (and Developer agrees it is bound by) the third party terms and conditions referenced at Third Party Terms [https://www.openphone.com/terms](https://www.openphone.com/terms) (the “Third Party Terms Site”), as they may be modified from time to time by OpenPhone and/or its third party licensors or suppliers at any time in accordance with this Section 3.6 (collectively, the “Third Party Terms”), and which are incorporated into this Agreement by reference. In the event that OpenPhone makes any update to the Third Party Terms, OpenPhone shall use reasonable efforts to notify Developer of such update (email to suffice) at least 2 weeks in advance, which notice shall describe the applicable update, as well as the effective date of such update (which shall be at least 2 weeks after the date of such notice). Provided that OpenPhone has followed the foregoing procedure, any use by Developer of the Service following the effective date of an update to the Third Party Terms shall constitute acceptance of such update. OpenPhone does not make any representations or warranties with respect to Third Party Services or any third party providers. OpenPhone cannot and does not guarantee that the Service shall incorporate (or continue to incorporate) any particular Third Party Services. ​ 4\. Term and Termination 4.1 Term. This Agreement shall commence upon Developer’s first use of the API and/or Service and shall continue until terminated in accordance herewith. 4.2 Termination. OpenPhone may terminate this Agreement at any time for any reason or no reason at all upon ten (10) days’ written notice. Developer may terminate this Agreement at any time for any reason or no reason at all upon thirty (30) days’ written notice. Either party may terminate this Agreement immediately upon written notice to the other party (a) if the other party breaches any warranty, representation, covenant or obligation under this Agreement (or, in the case of Developer, the OpenPhone Terms of Service) and, if such breach is curable, fails to cure such breach within ten (10) days after receiving written notice of the breach from the non-breaching party; or (b) if the other party is subject to a dissolution, receivership, liquidation, insolvency, conservatorship, consolidation, reorganization, sale of substantially all of its assets, cessation of business, voluntary or involuntary bankruptcy. OpenPhone immediately may suspend Developer’s or any End User’s access to the API or Service or terminate this Agreement (i) if Developer monetizes the Integration without OpenPhone’s prior approval, (ii) if required to do so by law, or (iii) if OpenPhone determines such action is necessary to prevent a security risk or other creditable risk of harm or liability to OpenPhone, the Service, the API, or any third parties. 4.3 Effect of Termination; Survival\*\*.\*\* The provisions of Sections 1, 2.5, 3, 4.3, 5, 6.2, 7, 8 and 9 shall survive any expiration or termination of this Agreement. All other rights and obligations of the parties shall cease upon expiration or termination of this Agreement, and Developer shall cease use of the API, Service and OpenPhone Data as of the effective date of termination. ​ 5\. Confidential Information 5.1 Confidential Information. Each party and their respective affiliates, directors, officers, employees, authorized representatives, agents and advisors (including attorneys, accountants, consultants, bankers and financial advisors) shall keep confidential all proprietary information concerning the other party’s business procedures, present and future products, services, operations, marketing materials, fees, technology, policies or plans of the other party that is received or obtained during the negotiation or performance of the Agreement, whether such information is oral or written, and whether or not labeled as confidential by such party (collectively “Confidential Information”). 5.2 Use of Confidential Information. For as long as Confidential Information of the disclosing party is in possession of the receiving party, the receiving party shall take reasonable steps, at least substantially equivalent to the steps it takes to protect its own proprietary information, to prevent the use, duplication or disclosure of Confidential Information other than in accordance with this Agreement. Each party may disclose Confidential Information of the other party to its employees or agents who are directly involved in negotiating or performing this Agreement and who are apprised of their obligations under this Section and directed by the receiving party to treat such information confidentially, or as required by law or by a supervising regulatory agency of a receiving party. Neither party shall disclose, share, rent, sell or transfer to any third party any Confidential Information of the other party except as expressly permitted by this Agreement. The receiving party shall use Confidential Information of the other party only as necessary to perform this Agreement. 5.3 Exceptions. Notwithstanding anything to the contrary, the obligations of the receiving party set forth in this Section 5 shall not apply to any information of the disclosing party that: (a) is or becomes a part of the public domain through no wrongful act of the receiving party; (b) was in the receiving party’s possession free of any obligation of confidentiality at the time of the disclosing party’s communication thereof to the receiving party; (c) is developed by the receiving party completely independent from the Confidential Information of the disclosing party; or (d) is required by law or regulation to be disclosed, but only to the extent and for the purpose of such required disclosure after providing the disclosing party with advance written notice if reasonably possible such that the disclosing party is afforded an opportunity to contest the disclosure or seek an appropriate protective order. 5.4 Remedies. Upon the request of the disclosing party following the termination of this Agreement, the other party shall promptly return all Confidential Information of the disclosing party in its possession, and shall promptly destroy such materials containing such information (and any copies, extracts, and summaries thereof) and shall further provide the other party with written confirmation of such return or destruction upon written request. In the event a party discovers that Confidential Information of the other party has been used in an unauthorized manner or disclosed in violation of this Section 5, the party discovering the unauthorized use or disclosure shall promptly notify the other party of such event. In addition, the non-disclosing party shall be entitled to all other remedies available at law or equity, including injunctive relief. ​ 6\. Limited Representations and Warranties 6.1 General. Each party represents and warrants that (i) it is a duly incorporated or organized entity in its state of incorporation or organization and that it has the full power and authority to enter into and perform its obligations under this Agreement; (ii) the execution and performance by it of its obligations under this Agreement do not constitute a breach of or conflict with any other agreement or arrangement by which it is bound; (iii) this Agreement is a legal, valid and binding obligation of the party executing this Agreement; (iv) no consent or approval of any other party is required in connection with the execution, delivery, performance, or enforceability of this Agreement; and (v) it shall comply with all applicable laws, rules, and regulations in connection with performance of such party’s obligations under this Agreement. 6.2 Warranty Disclaimer. EXCEPT FOR THE REPRESENTATIONS AND WARRANTIES EXPRESSLY SET FORTH IN THIS SECTION 6, THE API, SERVICE, AND OPENPHONE DATA ARE EACH PROVIDED “AS IS” AND OPENPHONE AND ITS LICENSORS EXPRESSLY DISCLAIM ALL WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED OR STATUTORY, INCLUDING THE IMPLIED WARRANTIES FOR TITLE, NON-INFRINGEMENT, MERCHANTABILITY, QUIET ENJOYMENT, FITNESS FOR A PARTICULAR PURPOSE, AND ANY WARRANTIES ARISING OUT OF COURSE OF DEALING OR TRADE USAGE. OPENPHONE DOES NOT REPRESENT OR WARRANT THAT (I) THE API, OR THE SERVICE SHALL MEET DEVELOPER’S REQUIREMENTS (SUCH AS THE QUALITY, EFFECTIVENESS, REPUTATION AND OTHER CHARACTERISTICS OF THE API AND SERVICE); (II) DEVELOPER’S OR ITS USERS’ USE OF THE API AND SERVICE SHALL BE UNINTERRUPTED, TIMELY, SECURE OR ERROR-FREE; OR (III) THE ADVICE, RESULTS, OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED FROM USE OF THE SERVICE OR API SHALL BE ACCURATE OR RELIABLE. DEVELOPER ACKNOWLEDGES THAT THE SERVICE MAY INCLUDE THIRD PARTY SERVICES AND THAT OPENPHONE IS NOT LIABLE, AND DEVELOPER AGREES NOT TO SEEK TO HOLD OPENPHONE LIABLE, FOR ANY THIRD PARTY SERVICES, AND THAT THE RISK OF INJURY FROM SUCH THIRD PARTY SERVICES RESTS ENTIRELY WITH DEVELOPER. ​ 7\. Indemnification Developer agrees to indemnify, defend and hold harmless OpenPhone, and parents, subsidiaries, affiliates, officers, employees, agents, partners, suppliers, and licensors, from and against any and all third-party losses, costs, liabilities, and claims (including reasonable attorneys’ fees) relating to or arising out of (a) Developer’s use or misuse of the API, Service, OpenPhone Data or intentional misconduct; (b) Developer’s violation of this Agreement; (c) Developer’s violation of any applicable law, rule or regulation; and (d) Developer’s violation of any other party’s right, including without limitation any right of privacy or intellectual property rights. Developer may not enter into any settlement or compromise of any such claim without prior written consent of OpenPhone. OpenPhone reserves the right, at its own cost, to assume the exclusive defense and control of any matter otherwise subject to indemnification by Developer, in which event Developer shall fully cooperate with OpenPhone in asserting any available defenses. ​ 8\. Limitation of Liability TO THE FULLEST EXTENT PROVIDED BY LAW, IN NO EVENT SHALL OPENPHONE BE LIABLE FOR ANY LOSS OF PROFITS, REVENUE OR DATA, INDIRECT, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES, OR DAMAGES OR COSTS DUE TO BUSINESS INTERRUPTION, IN EACH CASE WHETHER OR NOT OPENPHONE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, THE SERVICE, THE API, OPENPHONE DATA OR ANY COMMUNICATIONS, INTERACTIONS OR MEETINGS WITH OTHER USERS OF THE SERVICE OR THIRD PARTIES, ON ANY THEORY OF LIABILITY, INCLUDING TO THE EXTENT RESULTING FROM: (I) THE USE OR INABILITY TO USE THE SERVICE OR API; (II) ANY OTHER MATTER RELATED TO THE SERVICE OR API OR OPENPHONE DATA, WHETHER BASED ON WARRANTY, COPYRIGHT, CONTRACT, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR ANY OTHER LEGAL THEORY, OR (III) FOR ANY AMOUNT EXCEEDING THE GREATER OF (X) THE AMOUNT OF FEES PAID TO OPENPHONE DURING THE TWELVE MONTHS IMMEDIATELY PRECEDING THE CLAIM OR (Y) \$100 (ONE HUNDRED DOLLARS). NOTWITHSTANDING THE FOREGOING, THE LIMITATIONS SET FORTH IN THIS SECTION 8 SHALL NOT LIMIT A PARTY’S LIABILITY UNDER SECTION 5 (CONFIDENTIALITY) OR SECTION 7 (INDEMNIFICATION). OPENPHONE ASSUMES NO RESPONSIBILITY FOR THE TIMELINESS, DELETION, MIS-DELIVERY OR FAILURE TO STORE ANY END USER CONTENT. ​ 9\. Miscellaneous 9.1 Assignment. Developer may not assign this Agreement without the prior written consent of OpenPhone. Subject to the foregoing limitation, this Agreement is binding upon and inures to the benefit of the successors and assigns of the respective parties hereto. 9.2 Independent Contractors. The relationship of the parties hereto is that of independent contractors. The parties hereto are not deemed to be agents, partners or joint ventures of the others for any purpose as a result of this Agreement or the transactions contemplated thereby. Nothing herein shall be deemed or construed as granting to either party or any right or authority to assume or to create any obligation or responsibility, express or implied, for, on behalf of, or in the name of the other party. All financial and other obligations associated with each party’s business are the sole responsibility of such party. 9.3 Third Party Beneficiaries. This Agreement is not intended and shall not be construed to create any rights or benefits upon any person not a party to this Agreement. 9.4 Force Majeure. Neither party shall be liable to the other in any way whatsoever for any failure or delay in performance of any of the obligations under this Agreement (other than obligations to make payment), arising out of any event or circumstance beyond the reasonable control of such party (including war, rebellion, civil commotion, terror, strikes, lock-outs or industrial disputes; fire, explosion, earthquake, acts of God, flood, drought or bad weather; acts of terror; epidemics, pandemics, or quarantine restrictions; or order by any government department, council or other constituted body). 9.5 Costs and Expenses. Unless specifically provided for elsewhere in this Agreement, each party shall bear its own costs and expenses, including legal fees, accounting fees and taxes incurred in connection with the negotiation and performance of this Agreement. 9.6 Compliance with Law. Developer shall at all times comply with all applicable international, federal, state and local laws and shall not engage in any illegal or unethical practices. Without limiting any of the foregoing, Developer agrees that it shall not permit the use of the Service or API or OpenPhone Data, export, or re-export the Service or API or OpenPhone Data, (a) into, or to or for the benefit of a national or resident of, any country to which the United States has embargoed goods, or (b) to anyone on the United States Treasury Department’s list of Specially Designated Nationals or the U.S. Commerce Department’s Table of Denial Orders, or license or otherwise permit use of the Service or API or OpenPhone Data for any activities involving nuclear materials or weapons, missile or rocket technologies, proliferation of chemical or biological weapons, or any other purpose prohibited by applicable law or in any jurisdiction where the Service is prohibited. 9.7 Notices. Except as otherwise provided, all notices under this Agreement shall be delivered by email, or physical mail to the other party at the address or number set forth in this Agreement. Notices to OpenPhone sent by physical mail shall also be sent via email to [support+developers@openphone.com](mailto:support+developers@openphone.com). Notices shall be deemed to have been given (i) at the time of delivery when delivered by email, (ii) at the time of delivery when delivered personally, or (iii) three (3) business days after having been sent by physical mail. 9.8 Entire Agreement; Modification. This Agreement, including any exhibits or other documents attached hereto or referenced herein, each of which is hereby incorporated into this Agreement and made an integral part hereof, constitutes the entire agreement between the parties relating to the subject matter hereof and there are no representations, warranties or commitments except as set forth herein. This Agreement supersedes all prior understandings, negotiations and discussions, written or oral, of the parties relating to the transactions contemplated by this Agreement. This Agreement may not be changed orally but only by an agreement in writing, signed by the party against whom enforcement of any waiver, change, modification, or discharge is sought. 9.9 Headings; Construction. The headings to the clauses, sub-clause and parts of this Agreement are inserted for convenience of reference only and are not intended to be part of or to affect the meaning or interpretation of this Agreement. The terms “this Agreement,” “hereof,” “hereunder” and any similar expressions refer to this Agreement and not to any particular Section or other portion of this Agreement. As used in this Agreement, the words “include” and “including,” and variations thereof, shall be deemed to be followed by the words “without limitation” and the word “discretion” means sole discretion. 9.10 Governing Law. This Agreement shall be governed by and construed in accordance with the laws of the State of California without giving effect to any conflict of law principles. The Federal and State courts located in San Francisco County, California shall be the exclusive venue for any disputes under this Agreement, and the parties hereby consent to the personal jurisdiction of those courts for such purposes. 9.11 Provisions Severable. If any provision of this Agreement shall be or become wholly or partially invalid, illegal or unenforceable, such provision shall be enforced to the extent that it is legal and valid and the validity, legality and enforceability of the remaining provisions shall in no way be affected or impaired. This Agreement shall be binding upon and inure to the benefit of the parties hereto and their respective successors, legal representatives and permitted assigns. 9.12 Waivers; Cumulative Remedies. No failure or delay by a party to insist upon the strict performance of any term or condition under this Agreement or to exercise any right or remedy available under this Agreement at law or in equity, shall imply or otherwise constitute a waiver of such right or remedy, and no single or partial exercise of any right or remedy by any party shall preclude exercise of any other right or remedy. All rights and remedies provided in this Agreement are cumulative and not alternative; and are in addition to all other available remedies at law or in equity. 9.13 Counterparts. This Agreement may be executed in two or more counterparts, each of which together shall be deemed an original, but all of which shall constitute one and the same instrument. --- # Source: https://www.quo.com/docs/mdx/api-reference/contacts/update-a-contact-by-id.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Update a contact by ID > Modify an existing contact in your OpenPhone workspace using the contact's unique identifier. ## OpenAPI ````yaml https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json patch /v1/contacts/{id} openapi: 3.1.0 info: title: OpenPhone Public API version: 1.0.0 description: API for connecting with OpenPhone. contact: name: OpenPhone Support email: support@openphone.com url: https://support.openphone.com/hc/en-us termsOfService: https://www.openphone.com/terms servers: - description: Production server url: https://api.openphone.com security: - apiKey: [] tags: - description: Operations related to calls name: Calls - description: >- Operations related to call summaries, including AI-generated summaries and Sona voice assistant summaries name: Call Summaries - description: >- Operations related to call transcripts, including AI-generated transcripts and Sona voice assistant transcripts name: Call Transcripts - description: Operations related to contacts name: Contacts - description: Operations related to conversations name: Conversations - description: Operations related to text messages name: Messages - description: Operations related to phone numbers name: Phone Numbers - description: Operations related to users name: Users - description: Operations related to webhooks name: Webhooks paths: /v1/contacts/{id}: patch: tags: - Contacts summary: Update a contact by ID description: >- Modify an existing contact in your OpenPhone workspace using the contact's unique identifier. operationId: updateContactById_v1 parameters: - in: path name: id required: true schema: description: The unique identifier of the contact. examples: - 66d0d87e8dc1211467372303 type: string requestBody: required: true content: application/json: schema: type: object properties: externalId: anyOf: - description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - type: 'null' source: anyOf: - description: >- Indicates how the contact was created or where it originated from. examples: - public-api minLength: 1 maxLength: 75 type: string - type: 'null' sourceUrl: anyOf: - description: A link to the contact in the source system. format: uri examples: - https://openphone.co/contacts/664d0db69fcac7cf2e6ec minLength: 1 maxLength: 200 type: string - type: 'null' defaultFields: type: object properties: company: anyOf: - description: The contact's company name. examples: - OpenPhone type: string - type: 'null' emails: type: array items: type: object properties: name: description: The name for the contact's email address. examples: - company email type: string value: anyOf: - description: >- The contact's email address. If set to null during a patch operation, it will remove the email item from the contact. examples: - info@openphone.com type: string - type: 'null' id: description: The unique identifier for the contact email field. examples: - acb123 type: string required: - name - value firstName: anyOf: - description: The contact's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The contact's last name. examples: - Doe type: string - type: 'null' phoneNumbers: type: array items: type: object properties: name: description: The name of the contact's phone number. examples: - company phone type: string value: anyOf: - description: >- The contact's phone number. If set to null during a patch operation, it will remove the phone number item from the contact. examples: - '+15555555555' type: string - type: 'null' id: description: >- The unique identifier of the contact phone number field. examples: - acb123 type: string required: - name - value role: anyOf: - description: The contact's role. examples: - Sales type: string - type: 'null' customFields: type: array items: allOf: - type: object properties: key: description: The identifying key for contact custom field. examples: - inbound-lead type: string id: description: >- The unique identifier for the contact custom field. examples: - 66d0d87d534de8fd1c433cec3 type: string - anyOf: - type: object properties: value: anyOf: - type: array items: type: string - type: 'null' required: - value - type: object properties: value: anyOf: - type: string - type: 'null' required: - value - type: object properties: value: anyOf: - type: boolean - type: 'null' required: - value - type: object properties: value: anyOf: - format: date-time type: string - type: 'null' required: - value - type: object properties: value: anyOf: - type: number - type: 'null' required: - value responses: '200': description: Success content: application/json: schema: type: object properties: data: type: object properties: id: description: The unique identifier of the contact. examples: - 664d0db69fcac7cf2e6ec type: string externalId: anyOf: - description: >- A unique identifier from an external system that can optionally be supplied when creating a contact. This ID is used to associate the contact with records in other systems and is required for retrieving the contact later via the "List Contacts" endpoint. Ensure the `externalId` is unique and consistent across systems for accurate cross-referencing. examples: - 664d0db69fcac7cf2e6ec minLength: 1 maxLength: 75 type: string - type: 'null' source: anyOf: - description: >- Indicates how the contact was created or where it originated from. examples: - public-api minLength: 1 maxLength: 75 type: string - type: 'null' sourceUrl: anyOf: - description: A link to the contact in the source system. format: uri examples: - >- https://openphone.co/contacts/664d0db69fcac7cf2e6ec minLength: 1 maxLength: 200 type: string - type: 'null' defaultFields: type: object properties: company: anyOf: - description: The contact's company name. examples: - OpenPhone type: string - type: 'null' emails: type: array items: type: object properties: name: description: The name for the contact's email address. examples: - company email type: string value: anyOf: - description: The contact's email address. examples: - abc@example.com type: string - type: 'null' id: description: >- The unique identifier for the contact email field. examples: - acb123 type: string required: - name - value firstName: anyOf: - description: The contact's first name. examples: - John type: string - type: 'null' lastName: anyOf: - description: The contact's last name. examples: - Doe type: string - type: 'null' phoneNumbers: type: array items: type: object properties: name: description: The name of the contact's phone number. examples: - company phone type: string value: anyOf: - description: The contact's phone number. examples: - '+12345678901' type: string - type: 'null' id: description: >- The unique identifier of the contact phone number field. examples: - acb123 type: string required: - name - value role: anyOf: - description: The contact's role. examples: - Sales type: string - type: 'null' required: - company - emails - firstName - lastName - phoneNumbers - role customFields: type: array items: allOf: - type: object properties: name: description: >- The name of the custom contact field. This name is set by users in the OpenPhone interface when the custom field is created. examples: - Inbound Lead type: string key: description: >- The identifying key for contact custom field. examples: - inbound-lead type: string required: - name - anyOf: - type: object properties: type: type: string enum: - multi-select value: anyOf: - type: array items: type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - address - string - url value: anyOf: - type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - boolean value: anyOf: - type: boolean - type: 'null' required: - type - value - type: object properties: type: type: string enum: - date value: anyOf: - format: date-time type: string - type: 'null' required: - type - value - type: object properties: type: type: string enum: - number value: anyOf: - type: number - type: 'null' required: - type - value createdAt: description: Timestamp of contact creation in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string updatedAt: description: Timestamp of last contact update in ISO 8601 format. examples: - '2022-01-01T00:00:00Z' format: date-time type: string createdByUserId: description: >- The unique identifier of the user who created the contact. examples: - US123abc pattern: ^US(.*)$ type: string required: - id - externalId - source - sourceUrl - defaultFields - customFields - createdAt - updatedAt - createdByUserId required: - data '400': description: Invalid Custom Field Item content: application/json: schema: type: object properties: message: type: string code: const: '0801400' type: string status: const: 400 type: number docs: const: https://openphone.com/docs type: string title: const: Invalid Custom Field Item type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Invalid Custom Field Item type: string required: - message - code - status - docs - title - description '401': description: Unauthorized content: application/json: schema: type: object properties: message: type: string code: const: '0800401' type: string status: const: 401 type: number docs: const: https://openphone.com/docs type: string title: const: Unauthorized type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '403': description: Not Phone Number User content: application/json: schema: type: object properties: message: type: string code: const: '0801403' type: string status: const: 403 type: number docs: const: https://openphone.com/docs type: string title: const: Not Phone Number User type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema description: const: Not Phone Number User type: string required: - message - code - status - docs - title - description '404': description: Not Found content: application/json: schema: type: object properties: message: type: string code: const: '0800404' type: string status: const: 404 type: number docs: const: https://openphone.com/docs type: string title: const: Not Found type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '409': description: Conflict content: application/json: schema: type: object properties: message: type: string code: const: '0800409' type: string status: const: 409 type: number docs: const: https://openphone.com/docs type: string title: const: Conflict type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title '500': description: Unknown Error content: application/json: schema: type: object properties: message: type: string code: const: '0801500' type: string status: const: 500 type: number docs: const: https://openphone.com/docs type: string title: const: Unknown type: string trace: type: string errors: type: array items: type: object properties: path: type: string message: type: string value: {} schema: type: object properties: type: type: string required: - type required: - path - message - schema required: - message - code - status - docs - title security: - apiKey: [] components: securitySchemes: apiKey: in: header name: Authorization type: apiKey ```` --- # Source: https://www.quo.com/docs/mdx/guides/webhooks.md > ## Documentation Index > Fetch the complete documentation index at: https://www.quo.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Webhooks > A reference for API-generated webhook payloads. ## Overview Quo API webhooks allow developers to receive real-time notifications for various events, such as calls, messages, and transcripts. By integrating webhooks into your workflows, you can automate processes, enhance user experiences, and seamlessly connect Quo with other systems. **Important note:** Webhooks created in the Quo app are not compatible with those created via the API. You cannot access or modify app webhooks through the API, or API webhooks in the app. ## Webhooks payload sample data models Each webhook event provides a structured payload with specific data. We've provided sample payloads below for the most common webhook events. ### Calls These webhooks are triggered in response in response to call-related events: `call.ringing`, `call.completed`, and `call.recording.completed`. The following is an example of the payload for a `call.ringing` event. ```json theme={null} { "id": "EV0ea54cadfbf342e6ac4ca1f22ed1700c", "object": "event", "apiVersion": "v4", "createdAt": "2022-06-24T19:35:46.825Z", "type": "call.ringing", "data": { "object": { "id": "ACsXlF0", "object": "call", "answeredAt": "2022-01-01T00:00:00Z", "answeredBy": "USlHhXmRMz", "initiatedBy": "USlHhXmRMz", "direction": "outgoing", "status": "ringing", "completedAt": "2022-01-01T00:10:00Z", "createdAt": "2022-01-01T00:00:00Z", "duration": 60, "forwardedFrom": "UShYmRNzlm", "forwardedTo": "UShXmRMzln", "phoneNumberId": "PN1ZmRMzlx", "participants": [ "+15555555555" ], "updatedAt": "2022-01-01T00:00:00Z", "userId": "USlHhXmRMz", "contactIds": [ "6824dfb69aee85c132b7dg65" ] } } } ``` ### Call Summaries This webhook is triggered in response to a `call.summary.completed` event. ```json theme={null} { "id": "EV0ea54cadfbf342e6ac4ca1f22ed1700c", "object": "event", "apiVersion": "v4", "createdAt": "2022-06-24T19:35:46.825Z", "type": "callSummary", "data": { "object": { "callId":"AC16558bc5f73445598a2627f5a94fe014", "object": "callSummary", "status": "completed", "summary": [ "You talked about the weather." ], "nextSteps": [ "Bring an umbrella." ], "contactIds": [ "6824dfb69aee85c132b7dg65" ] } } } ``` ### Call Transcripts This webhook is triggered in response to a `call.transcript.completed` event. ```json theme={null} { "id": "EV0ea54cadfbf342e6ac4ca1f22ed1700c", "object": "event", "apiVersion": "v4", "createdAt": "2022-06-24T19:35:46.825Z", "type": "callTranscript", "data": { "object": { "callId": "AC16558bc5f73445598a2627f5a94fe014", "object": "callTranscript", "createdAt": "2022-06-24T19:34:50.279Z", "dialogue": [ { "content": "Hello, world!", "start": 5.123456, "end": 10.123456, "identifier": "+19876543210", "userId": "USlHhXmRMz" } ], "duration": 5, "status": "completed", "contactIds": [ "6824dfb69aee85c132b7dg65" ] } } } ``` ### Messages This webhook is triggered in response to message events such as `message.received` and `message.delivered`. Below is a sample payload for a `message.received` event. ```json theme={null} { "id": "EVc67ec998b35c41d388af50799aeeba3e", "object": "event", "apiVersion": "v4", "createdAt": "2022-01-23T16:55:52.557Z", "type": "message.received", "data": { "object": { "id": "AC24a8b8321c4f4cf2be110f4250793d51", "object": "message", "from": "+19876543210", "to": ["+15555555555"], "direction": "incoming", "text": "Hello, world!", "status": "delivered", "createdAt": "2022-01-23T16:55:52.420Z", "userId": "USu5AsEHuQ", "phoneNumberId": "PNtoDbDhuz", "contactIds": [ "6824dfb69aee85c132b7dg65" ] } } } ```