quo
SKILL.md
Quo π
Query your Quo (formerly OpenPhone) business phone β calls, texts, contacts, transcripts.
Setup
API key from my.quo.com β Settings β API. Configure via gateway under
skills.entries.quo.apiKey. OpenClaw injects it as QUO_API_KEY automatically.
What Users Ask
- "What's my Quo number?"
- "Show recent conversations"
- "Get the transcript from that call"
- "What was the summary of my call with [person]?"
- "List my business contacts"
- "Send a text to [number]"
- "Show my recent calls with [number]"
- "Any missed calls today?"
- "Who called the office?"
- "Text [person] from my work number"
- "Check my voicemails"
- "What messages came in on the business line?"
- "Who is this number?"
- "Show me everything from this number"
- "Show conversations from unknown numbers"
CLI Reference
{baseDir}/quo numbers List phone numbers
{baseDir}/quo conversations [filters] List conversations
{baseDir}/quo contacts [--limit N] List contacts
{baseDir}/quo search-phone <phone> [--refresh] Find contact by phone (cached)
{baseDir}/quo gather <phone> [--since ISO] [--until ISO] [--limit N] [--refresh]
{baseDir}/quo custom-fields List contact custom fields
{baseDir}/quo users List workspace users
{baseDir}/quo summary <callId> Get AI call summary
{baseDir}/quo transcript <callId> Get full dialogue transcript
{baseDir}/quo recordings <callId> Get recording URLs
{baseDir}/quo voicemails <callId> Get voicemail + transcript
{baseDir}/quo send --from <num> --to <num> <message>
{baseDir}/quo messages --number-id <id> --participant <phone> [--limit N]
{baseDir}/quo calls --number-id <id> --participant <phone> [--limit N] [--created-after ISO] [--created-before ISO]
{baseDir}/quo raw [METHOD] <endpoint> [json-body]
Conversation Filters
--phone <number-or-id> Filter by Quo phone line (repeatable)
--updated-after ISO Conversations updated after date
--updated-before ISO Conversations updated before date
--created-after ISO Conversations created after date
--created-before ISO Conversations created before date
--include-inactive Include inactive/snoozed conversations
--unknown Only show conversations with unrecognized numbers
--limit N Max results (default 10)
API Endpoints
Full OpenAPI spec: https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json
| Endpoint | Method | Description |
|---|---|---|
/v1/phone-numbers |
GET | List phone numbers |
/v1/conversations |
GET | List conversations (filterable) |
/v1/messages |
GET | List messages for a conversation |
/v1/messages |
POST | Send a text message |
/v1/messages/{id} |
GET | Get message by ID |
/v1/calls |
GET | List calls (with date filters) |
/v1/calls/{callId} |
GET | Get call by ID |
/v1/call-summaries/{callId} |
GET | AI-generated call summary |
/v1/call-transcripts/{id} |
GET | Full dialogue transcript with speaker attribution |
/v1/call-recordings/{callId} |
GET | Recording URLs (MP3) |
/v1/call-voicemails/{callId} |
GET | Voicemail + transcript |
/v1/contacts |
GET | List contacts (paginated) |
/v1/contacts |
POST | Create a contact |
/v1/contacts/{id} |
GET | Get contact by ID |
/v1/contacts/{id} |
PATCH | Update contact (replaces entire defaultFields!) |
/v1/contacts/{id} |
DELETE | Delete a contact |
/v1/contact-custom-fields |
GET | List custom contact fields |
/v1/users |
GET | List workspace users |
/v1/webhooks/* |
Various | Webhook management for messages, calls, summaries, transcripts |
Key Data Formats
Transcript Response
Returns dialogue[] array with speaker-attributed entries:
{
"data": {
"callId": "AC...",
"dialogue": [
{
"content": "Hello",
"start": 0.16,
"end": 0.48,
"identifier": "+15551234567",
"userId": "US..."
},
{
"content": "Hi, my name is Jane",
"start": 1.0,
"end": 2.5,
"identifier": "+15559876543",
"userId": null
}
]
}
}
Contact Fields
defaultFields: firstName, lastName, company, role, emails[], phoneNumbers[]customFields: Array of {key, value} pairs (keys from/contact-custom-fields)- β οΈ PATCH replaces entire
defaultFieldsβ always include ALL existing fields
Custom Fields (Julianna's workspace)
Property Associated(key:1712532493777, type: string)Address(key:1700067557182, type: address)
Notes
- Transcripts require call recording enabled in Quo settings
- Phone numbers in E.164 format (+1XXXXXXXXXX)
- Contacts API has no phone number search β
search-phone,--unknown, andgatheruse a local cache at/tmp/quo-contacts-cache.json(5-min TTL, use--refreshto rebuild) - Voicemail endpoint returns single object (not array)
gatherdefaults to last 30 days, text only (no audio URLs or media)
Weekly Installs
1
Repository
technickai/openβ¦w-configGitHub Stars
34
First Seen
10 days ago
Security Audits
Installed on
amp1
cline1
openclaw1
opencode1
cursor1
kimi-cli1