Quickstart
Make your first call in five minutes.
This walks through sign-up, verification, getting an API key, and placing your first outbound call.
1. Sign up
Go to app.openphn.com/signup, accept the AUP, and create your account.
Verification gate
New accounts start at verification_status=pending_review. API calls return
403 until an admin approves you. Approval usually takes under a business
day — email us at the address in your dashboard if it stalls.
2. Bring your Twilio credentials (outbound)
Outbound calls run on your Twilio subaccount. You supply the Account SID and auth token; OpenPhn verifies the credentials and picks an active number from your Twilio numbers list.
curl -X POST https://api.openphn.com/v1/providers/twilio/verify \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"auth_token": "your-twilio-auth-token"
}'A successful response lists numbers on the subaccount. Pick one:
curl -X POST https://api.openphn.com/v1/providers/select-number \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "e164": "+14155551234" }'Inbound numbers can also be provisioned directly by OpenPhn via a managed subaccount — see Numbers.
3. Get an API key
From the dashboard, go to Settings → API keys and create a key. Keys are
sk_live_* (no test/sandbox mode today). The secret is shown once — copy
it into your password manager immediately.
export OPENPHN_KEY="sk_live_..."You can optionally scope a key to specific number_ids and/or a list of
permission scopes (calls:create, webhooks:read, etc.). See
Authentication.
4. Place your first call
curl -X POST https://api.openphn.com/v1/calls \
-H "Authorization: Bearer $OPENPHN_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"to": "+14155551234",
"objective": "Confirm the order #A-14421 ships today",
"outcome_schema": {
"will_ship_today": { "type": "boolean" },
"tracking": { "type": "string", "optional": true },
"eta": { "type": "datetime", "optional": true }
},
"consent_type": "existing_business_relationship"
}'Response:
{
"call_id": "cll_01HV...",
"status": "queued"
}OpenPhn dials the number, runs the objective, and populates the outcome at completion.
5. Read the result
Poll or register a webhook. To poll:
curl https://api.openphn.com/v1/calls/cll_01HV... \
-H "Authorization: Bearer $OPENPHN_KEY"Once status == "completed", the response includes outcome (typed JSON
matching your outcome_schema), transcript, cost_total, and more.
To receive a signed POST when the call completes instead of polling, register a webhook — see Webhooks.
Next steps
- Concepts — how calls, numbers, flows, and transfers fit together.
- API reference — every endpoint, auth model, rate limits.
- MCP quickstart — wire OpenPhn into Claude Desktop.