API documentation

Sandbox

Build and test against the real API with test keys: sandbox data only, nothing ever sent, no quota — and simulated customer messages on any channel.

Create a test key in Developers → API keys. It starts with ib_test_ and works exactly like a live key — same endpoints, same rules, same errors — against sandbox data:

  • Nothing is ever sent. A message you send is marked sent, then delivered a moment later — or failed, if its text contains simulate:failed. Sandbox sends use no API quota.
  • Separate data. Sandbox conversations and contacts never appear in your inbox or reports, and live keys never see them.
  • Simulated customers.POST /v1/test/inbound (below) makes a customer write in on any channel; the event simulator in the portal's test console does the same with a click.
  • Webhooks. Sandbox events carry livemode: false and go only to endpoints with sandbox events on — typically a staging URL. They are retried and ordered exactly like live ones, so you can rehearse your receiver failing and recovering. Only the portal's Send test event (on the Webhooks page) is sent once.
POST/v1/test/inboundSign in to try

A customer message on any channel, as if it had just arrived (test keys only)

Use a test key (ib_test_…). Add comment: true on Instagram to simulate a comment instead of a DM. The message lands in a sandbox conversation — the same from continues it — and produces the same webhooks a real one would, marked livemode: false, for endpoints with test events on. Reply to it with POST /messages and the same test key.

Request
curl -X POST "https://api.iotabot.com/v1/test/inbound" \
  -H "Authorization: Bearer $IOTABOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "channel": "whatsapp",
  "from": "+15550000001",
  "name": "Priya Sharma",
  "text": "Hi, where is my order #1042?"
}'
Response · 201
{
  "data": {
    "livemode": false,
    "conversation": {
      "id": "6a4bc1…",
      "object": "conversation",
      "channel": "whatsapp",
      "status": "open",
      "mode": "ai"
    },
    "message": {
      "id": "6a4bc2…",
      "object": "message",
      "direction": "inbound",
      "text": "Hi, where is my order #1042?",
      "status": "received"
    }
  }
}
Errors
test_key_requiredchannel_not_allowedwebsite_not_allowed