For agents and developers
Let your agent make the call.
A small REST API for the Call Lab. Rehearse a business conversation on your own phone, inspect the transcript, and refine your offer. This is the same calling service and credit balance used by the dashboard.
OpenAPI specification · Agent instructions · Create a token
1. Get access
Buy five call credits for $5, sign in, then create an API token. Tokens last seven days. Changing your account password revokes existing tokens. Pass the token in the Authorization header; never put it in a URL.
2. Place a call
curl https://www.startup25.com/api/v1/calls \
-H "Authorization: Bearer $STARTUP25_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: rehearsal-001' \
-d '{
"phone": "+12125550123",
"first_name": "Alex",
"salon_name": "Your business",
"offer_text": "$25 off your next visit this week",
"notes": "Keep the introduction short.",
"timezone": "America/New_York",
"consent": true
}'Replace the example number with your own real US or Canadian number. Fictional 555 numbers are rejected. Set consent to true only for yourself or someone who requested this call. Calls are allowed from 8am to 9pm in the recipient’s timezone. Suppressed numbers cannot be called.
Use a unique Idempotency-Key for each intended call. Keep the same key when retrying after a network timeout: an accepted key identifies one call, even across retries. To change a request that has already been recorded, use a new key. Do not repeatedly retry errors with new keys.
3. Read the result
# Remaining credits
curl https://www.startup25.com/api/v1/account \
-H "Authorization: Bearer $STARTUP25_TOKEN"
# Poll every 5 seconds until phase is "ended"
curl https://www.startup25.com/api/v1/calls/CALL_ID \
-H "Authorization: Bearer $STARTUP25_TOKEN"POST returns HTTP 202 when the call request is accepted, with an id. A repeated request may return HTTP 200 with its existing status. The status response includes phase, outcome, transcript, summary, durationSeconds and refunded. Transcripts can be null until the call settles, or if no conversation occurred. Stop polling when phase is ended.
Request fields
| Field | Meaning |
|---|---|
phone | Required. Real US/Canada number, preferably +1 format. |
first_name | Required. Person to greet, up to 40 characters. |
salon_name | Required. Business name, 2–80 characters. |
offer_text | Required. Your offer, 8–300 characters. |
consent | Required. Boolean true after the person requests the call. |
timezone | Recipient’s IANA timezone. Defaults to America/New_York. |
notes | Optional. Conversation guidance, up to 600 characters. |
voice | Optional. marin or cedar on the direct calling engine. |
Credits and errors
One call consumes one credit. A failed connection is refunded. A completed or unanswered call is not a guaranteed booking. The API checks your balance, consent, calling hours and do-not-call status before dialing.
- 400: invalid JSON, missing consent or invalid idempotency key.
- 401: missing, expired or revoked token.
- 404: call not found in your account.
- 413: request exceeds the size limit.
- 422: invalid fields, no credits, calling restrictions, or a rejected call. Read the error message.
- 5xx: service error. Retry using the same idempotency key.
The lab rehearses your business offer. It is not a general-purpose tool for arbitrary third-party calls. For consented customer campaigns, set up your business campaign.