Access the Quo API with managed OAuth authentication. Send SMS messages, manage calls and contacts, and retrieve call recordings and transcripts.
Reference
List Phone Numbers
GET /quo/v1/phone-numbersOptional query parameter:
userId- Filter by user ID (pattern:^US(.*)$)
Response:
{
"data": [
{
"id": "PN123abc",
"number": "+15555555555",
"formattedNumber": "(555) 555-5555",
"name": "Main Line",
"users": [
{
"id": "US123abc",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"role": "admin"
}
],
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z"
}
]
}List Users
GET /quo/v1/users?maxResults=50Query parameters:
maxResults(required) - Results per page (1-50, default: 10)pageToken- Pagination token
Response:
{
"data": [
{
"id": "US123abc",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"role": "owner",
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z"
}
],
"totalItems": 10,
"nextPageToken": null
}Get User by ID
GET /quo/v1/users/{userId}Send Text Message
POST /quo/v1/messages
Content-Type: application/json
{
"content": "Hello, world!",
"from": "PN123abc",
"to": ["+15555555555"]
}Request body:
content(required) - Message text (1-1600 characters)from(required) - Phone number ID (PN*) or E.164 formatto(required) - Array with single recipient in E.164 formatuserId- User ID (defaults to phone owner)setInboxStatus- Set to"done"to mark conversation complete
Response (202):
{
"id": "AC123abc",
"to": ["+15555555555"],
"from": "+15555555555",
"text": "Hello, world!",
"phoneNumberId": "PN123abc",
"direction": "outgoing",
"userId": "US123abc",
"status": "queued",
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z"
}List Messages
GET /quo/v1/messages?phoneNumberId=PN123abc&participants[]=+15555555555&maxResults=100Query parameters:
phoneNumberId(required) - Phone number IDparticipants(required) - Array of participant phone numbers in E.164 formatmaxResults(required) - Results per page (1-100, default: 10)userId- Filter by user IDcreatedAfter- ISO 8601 timestampcreatedBefore- ISO 8601 timestamppageToken- Pagination token
Get Message by ID
GET /quo/v1/messages/{messageId}List Calls
GET /quo/v1/calls?phoneNumberId=PN123abc&participants[]=+15555555555&maxResults=100Query parameters:
phoneNumberId(required) - Phone number IDparticipants(required) - Array with single participant phone number in E.164 format (max 1)maxResults(required) - Results per page (1-100, default: 10)userId- Filter by user IDcreatedAfter- ISO 8601 timestampcreatedBefore- ISO 8601 timestamppageToken- Pagination token
Response:
{
"data": [
{
"id": "AC123abc",
"phoneNumberId": "PN123abc",
"userId": "US123abc",
"direction": "incoming",
"status": "completed",
"duration": 120,
"participants": ["+15555555555"],
"answeredAt": "2022-01-01T00:00:00Z",
"completedAt": "2022-01-01T00:02:00Z",
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:02:00Z"
}
],
"totalItems": 50,
"nextPageToken": "..."
}Get Call by ID
GET /quo/v1/calls/{callId}Get Call Recordings
GET /quo/v1/call-recordings/{callId}Response:
{
"data": [
{
"id": "REC123abc",
"duration": 120,
"startTime": "2022-01-01T00:00:00Z",
"status": "completed",
"type": "voicemail",
"url": "https://..."
}
]
}Recording status values: absent, completed, deleted, failed, in-progress, paused, processing, stopped, stopping
Get Call Summary
GET /quo/v1/call-summaries/{callId}Get Call Transcript
GET /quo/v1/call-transcripts/{callId}Get Call Voicemail
GET /quo/v1/call-voicemails/{callId}List Contacts
GET /quo/v1/contacts?maxResults=50Query parameters:
maxResults(required) - Results per page (1-50, default: 10)externalIds- Array of external identifierssources- Array of source indicatorspageToken- Pagination token
Response:
{
"data": [
{
"id": "CT123abc",
"externalId": null,
"source": null,
"defaultFields": {
"company": "Acme Corp",
"firstName": "Jane",
"lastName": "Doe",
"role": "Manager",
"emails": [{"name": "work", "value": "jane@example.com", "id": "EM1"}],
"phoneNumbers": [{"name": "mobile", "value": "+15555555555", "id": "PH1"}]
},
"customFields": [],
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z",
"createdByUserId": "US123abc"
}
],
"totalItems": 100,
"nextPageToken": "..."
}Get Contact by ID
GET /quo/v1/contacts/{contactId}Create Contact
POST /quo/v1/contacts
Content-Type: application/json
{
"defaultFields": {
"firstName": "Jane",
"lastName": "Doe",
"company": "Acme Corp",
"phoneNumbers": [{"name": "mobile", "value": "+15555555555"}],
"emails": [{"name": "work", "value": "jane@example.com"}]
}
}Update Contact
PATCH /quo/v1/contacts/{contactId}
Content-Type: application/json
{
"defaultFields": {
"company": "New Company"
}
}Delete Contact
DELETE /quo/v1/contacts/{contactId}Get Contact Custom Fields
GET /quo/v1/contact-custom-fieldsList Conversations
GET /quo/v1/conversations?maxResults=100Query parameters:
maxResults(required) - Results per page (1-100, default: 10)phoneNumbers- Array of phone number IDs or E.164 numbers (1-100 items)userId- Filter by user IDcreatedAfter- ISO 8601 timestampcreatedBefore- ISO 8601 timestampupdatedAfter- ISO 8601 timestampupdatedBefore- ISO 8601 timestampexcludeInactive- Boolean to exclude inactive conversationspageToken- Pagination token
Response:
{
"data": [
{
"id": "CV123abc",
"phoneNumberId": "PN123abc",
"name": "Jane Doe",
"participants": ["+15555555555"],
"assignedTo": "US123abc",
"lastActivityAt": "2022-01-01T00:00:00Z",
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z"
}
],
"totalItems": 50,
"nextPageToken": "..."
}