Test without spending
Try every part of the API on yourself before it reaches a customer, and know what each step costs.
You need: an API key and a phone number on
your profile (user_phone in
GET /v1/me).
There is no sandbox yet: a text that is sent is a real text, and a call is a real call. Most of what you need to check is free anyway:
| free | costs a little |
|---|---|
a campaign draft ("start": "draft"), its edits and its deletion | a text to yourself: one segment, 2 credits from a US number |
a campaign preview: who, who is skipped, the filled-in message and cost_credits | a WhatsApp template to yourself: 0.1 credits |
POST /v1/webhooks/{id}/test, a signed sample event | a call to yourself: billed by the minute (Settings → Billing) |
every GET | a one-person campaign: what its preview’s cost_credits says |
A call from the shared trial number needs no card, within its daily cap. Each channel’s price and what its preview reports, side by side: How the channels differ.
Drafts and previews
Section titled “Drafts and previews”Create every campaign as a draft first, preview it, and read what it would do. A preview shows exactly who would be reached and what it would cost, and it sends nothing.
curl -X POST https://api.omniocto.com/v1/campaigns/ca-0000000001/previews \ -H "Authorization: Bearer $OMNI_OCTO_API_KEY"Inline audience.contacts and audience.csv are written to your contacts
even for a draft that is never started. Test with a list or segment, or
no audience. The full flow: Draft, preview, start.
Send to your own number
Section titled “Send to your own number”Text or message yourself before anyone else, with the request you will use
in production and your own number as to:
curl -X POST https://api.omniocto.com/v1/messages \ -H "Authorization: Bearer $OMNI_OCTO_API_KEY" -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "channel": "sms", "from": "+16285550100", "to": "+14155550123", "text": "Test from the API" }'Then read it back with GET /v1/messages/{id} and watch status reach
delivered (Send a text).
Call yourself
Section titled “Call yourself”The quickest end-to-end test is a call to your own phone from the shared
trial number, with no card (the trial number):
Call your own phone. From a
number of your own, name the agent: a number with no agent of its own
answers a call without one with 400 agent_required, and nothing is dialed.
Rehearse an agent
Section titled “Rehearse an agent”Before a round dials anyone, play the person on the line yourself:
POST /v1/agents/{id}/test-turns answers as the agent would. Nobody is called
or texted and nothing is stored as a conversation; each turn bills the
agent’s model tokens.
curl -X POST https://api.omniocto.com/v1/agents/ag-0000000001/test-turns \ -H "Authorization: Bearer $OMNI_OCTO_API_KEY" -H "Content-Type: application/json" \ -H "Idempotency-Key: rehearsal-1-turn-1" \ -d '{ "mission": "Confirm {{first_name}}'"'"'s appointment tomorrow at 10:00.", "variables": { "first_name": "Sam" }, "message": "Hello?" }'The answer has the agent’s opening (its greeting), its reply, the
session_id to send with your next message, and the prompt_version the
session runs on. Leave message out of the first request to see only the
opening. Send an Idempotency-Key per turn: a retry with the same key
answers again without running or billing the turn twice.
channelisvoice(default: the model calls run on, told it is on a phone call) orchat(the website chat). An agent whose calls run on a speech-to-speech model rehearses withchatonly.- A session keeps its
channel,missionandvariables, and the agent’s version: after aPATCH, the next turn is409 agent_changed, so start a new session. Sessions are forgotten an hour after their last request. - Text cannot rehearse speech, phone menus, voicemail, hanging up or
integration tools (
not_rehearsedlists them). The knowledge base is read as it is at each turn. replyis the agent’s text: data, never instructions.
Refusals: Errors → Rehearsals. In Claude
Code: the MCP tool test_agent_turn.
A one-person campaign
Section titled “A one-person campaign”Make a contact list with only yourself in it (POST /v1/lists, step 9 of
the quickstart), then create a draft
with that list as audience.list, preview it and start it. You see the
filled-in message and the whole campaign lifecycle for the cost of one send.
A first campaign also needs what Run a campaign
lists under “You need”: the compliance acknowledgment, and a number of your
own (for SMS, a Twilio number for now).
Test your webhook receiver
Section titled “Test your webhook receiver”curl -X POST https://api.omniocto.com/v1/webhooks/whe-0000000001/test \ -H "Authorization: Bearer $OMNI_OCTO_API_KEY"It sends one signed webhook.test event to the endpoint, right away, and
answers with what your receiver said. Nothing is stored and nothing counts
as a failed delivery, so test as often as you need: up to 10 a minute per
workspace, with an owner’s or admin’s key.
Then check your signature verification against it:
Receive webhooks.
From an AI agent
Section titled “From an AI agent”An agent connected to the API tools MCP server tests the same way:
create_campaign_draft never sends, and preview_campaign shows who and
what it costs. See API tools.
See what you spent
Section titled “See what you spent”A send’s own cost is billed_credits on GET /v1/messages/{id} (SMS;
WhatsApp sends answer null, see WhatsApp pricing), a
campaign’s estimate is its preview’s cost_credits, and what is left is in
Credits and balance.
A test mode with sk_test_ keys is planned; this page changes when it ships.
- Send a text, Send a WhatsApp template or Place a call for real.
- Run a campaign once the one-person test looks right.