AI phone answering. By API.
List your phone numbers, fetch live call transcripts, summarize completed conversations, and trigger outbound voice messages โ all over plain REST + JSON. The same engine that runs ShuiLink-managed numbers, exposed to your tools.
๐ What you can build
A few patterns we built this for. If your idea isn't here, email us.
CRM auto-logging
Drop every call summary, transcript, and booking outcome straight into HubSpot, Salesforce, or your own CRM.
Calendar integrations
When a customer books on a call, push the appointment to Google Calendar / Cal.com / your scheduling tool.
Lead alerts
Slack or SMS your team the second a hot lead calls in โ with the AI's qualification summary attached.
Custom reporting
Pipe call metrics into your data warehouse, finance system, or BI tool of choice.
Multilingual call centers
One API, dozens of languages. Route Spanish callers to a Spanish script, Mandarin to Mandarin, automatically.
Outbound campaigns
Trigger reminder calls, appointment confirmations, or re-engagement campaigns from a webhook.
๐ Quickstart
Get your first response in under 60 seconds.
Create an account
Sign up with email + password or Google. New accounts land in pending-approval and need admin promotion before they can call the API.
Sign up โGenerate an API key
Go to the Keys page โ click + Create key โ pick a tier โ copy the raw key. It's only shown once, so save it somewhere safe.
sl_e332f39d5878f54d140b6ee1537fdfe8f7906cec53ab92f6b8c22301634bda80 โโโดโโ 64 hex characters โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Make your first call
List all phone numbers across your authorized account:
curl https://voice.shuilink.com/api/v1/numbers/ \ -H "Authorization: Bearer sl_YOUR_KEY"
๐ Authentication
All API requests must include your API key in the Authorization header.
Authorization: Bearer sl_e332f39d5878...
Alternative headers accepted: X-Api-Key: sl_.... Avoid query params
(?api_key=) โ they leak into server logs and browser history.
Keys are 67-character strings prefixed with sl_. We store only the SHA-256 hash โ
if you lose a key, you must revoke and generate a new one. The same key works for both ads and voice endpoints.
๐ Rate limits
Limits are enforced per-key. Every response carries headers so you can self-throttle.
| Tier | Daily limit | Per-minute | Max keys | Best for |
|---|---|---|---|---|
| Free | 100 req / day | 10 req / min | 2 active | Try it out, prototypes |
| Pro | 10,000 req / day | 100 req / min | 5 active | Production, 1โ10 phone numbers |
| Enterprise | Unlimited | Unlimited | 20 active | White-label, SLA, dedicated support |
Response headers
Every successful response includes these. Watch X-RateLimit-Remaining to back off before you 429.
X-Tier: pro X-RateLimit-Limit: 10000 X-RateLimit-Remaining: 9837
โ ๏ธ Errors
All errors return JSON with a single error field describing the problem.
| Status | When | What to do |
|---|---|---|
| 401 | Missing or invalid API key | Check Authorization header. Key revoked? Generate a new one. |
| 403 | Key valid but account pending approval | Email voice@shuilink.com to request access. |
| 405 | Wrong HTTP method (e.g. POST to GET endpoint) | Check the endpoint reference below. |
| 422 | Tier max-keys reached on create | Revoke an old key or upgrade tier. |
| 429 | Daily quota exceeded | Wait until UTC midnight reset, or upgrade tier. |
| 500 | Upstream provider error (Twilio, Vapi) | Retry with exponential backoff. Status persists โ email us. |
Example 429 body:
{
"error": "Daily quota of 100 requests reached for tier free.",
"reason": "DAILY_QUOTA_EXCEEDED"
}
โ๏ธ Numbers
List, provision, and configure the phone numbers handled by your AI receptionist.
Returns every phone number connected to your account, with its provider, assigned script, and last-active timestamp.
Query parameters
| (none in v1 โ filtering coming in v1.1) |
Example response
{
"version": "v1",
"fetched_at": "2026-05-25T00:34:06.105Z",
"numbers": [
{
"id": "num_01HPQR...",
"phone_number": "+15551234567",
"provider": "twilio",
"script_id": "scr_hibachi_booking",
"status": "active",
"last_call_at": "2026-05-25T00:18:42.000Z"
}
]
}
Body
{
"provider": "twilio",
"phone_number": "+15551234567",
"script_id": "scr_hibachi_booking"
}
๐ Calls
Inspect inbound and outbound calls, including duration, outcome, and recording URL.
Example response
[
{
"id": "call_01HPQR...",
"from": "+15555550142",
"to": "+15551234567",
"started_at": "2026-05-25T00:14:32.000Z",
"duration_s": 154,
"ai_handled": true,
"booking_created": true,
"recording_url": "https://recordings.shuilink.com/...",
"cost_usd": 0.18
}
]
Body
{
"call_id": "call_01HPQR...",
"language_hint": "en"
}
๐ Transcripts
Get the full conversation text, turn by turn, with timestamps.
{
"call_id": "call_01HPQR...",
"language": "en",
"turns": [
{ "t_s": 0, "speaker": "ai", "text": "Hi, thanks for calling Kobe Hibachi!" },
{ "t_s": 4, "speaker": "caller", "text": "I'd like to book a chef for June 15." },
{ "t_s": 9, "speaker": "ai", "text": "How many guests?" }
]
}
๐ Scripts
Read and edit the call scripts your AI receptionist follows.
[
{ "id": "scr_hibachi_booking", "name": "Hibachi โ Booking",
"industry": "hibachi-catering", "languages": ["en", "es"] }
]
๐ง AI summaries
Generate scripts from a business description and summarize completed calls.
Body
{
"business": "Kobe Hibachi Catering",
"industry": "hibachi-catering",
"tone": "warm",
"languages": ["en", "es", "zh"]
}
Example response
{
"greeting": "Hi, thanks for calling Kobe Hibachi!...",
"qualifying_questions": ["What date?", "How many guests?", "..."],
"objection_handling": [...],
"closing": "Perfect โ I've got you down for..."
}
Body
{
"call_id": "call_01HPQR..."
}
๐ค Outbound calls
Trigger outbound voice messages โ reminders, confirmations, re-engagement. Pro+ only.
Body
{
"from": "+15551234567",
"to": "+15555550142",
"script_id": "scr_appointment_reminder",
"variables": { "appointment_date": "June 15, 6 PM" }
}
Ready to start automating?
Free tier doesn't need a credit card. You'll have a working API key in 60 seconds.
Sign up free โ