Skip to main content
The isolated demo is being prepared for rollout. These steps require an activated demo account and the deployed demo service; a regular Trackly account does not automatically have access.
The demo API uses synthetic senders, contacts and messages. You do not need a registered number. No SMS reaches a carrier, and simulated sends incur no SMS charges. The supported workflow includes a real human approval step.

Create a key

Sign in to your demo account and open Demo API keys. Name and create a key, then copy it before leaving the page. The secret appears only once. Keys expire after seven days; you can keep up to five active keys. Revoke a key from the same page when finished. Use this base URL:
Send the key in the X-Api-Key header. Keep it in your local secret store or Postman’s secret variable storage. Do not put it in a URL, source control or chat. Demo keys cannot authenticate against the production API. If key creation times out, refresh the list, revoke the key whose secret you did not receive, then create another. Do not automatically retry key creation.

Discover sample data

The examples assume TRACKLY_DEMO_API_KEY is already set securely in your local environment:
Confirm the intended account and execution_environment: "reviewer_demo". Use the returned sender.phone_number and contacts[0].phone_number as the message’s list_number and to. Other recipients are rejected.

Prepare and approve a simulated SMS

Save a JSON file named demo-hold.json, replacing the placeholders with the returned sample numbers:
Create one hold using a unique, stable idempotency key for this exact message:
Save the returned hold id. Open Demo send approvals as the demo owner, inspect the exact message and approve it. An API key cannot approve a hold. Read GET /pending-sends/<id> until that same hold reports approved, then execute it with the key that created it:
Use the returned message ID with GET /messages/<id> or inspect GET /messages?api_key=me. These records are simulated outcomes, not proof of carrier delivery. To cancel before execution, use DELETE /pending-sends/<id>.

Supported operations and limits

Limits are shared across MCP connections and API keys: 30 requests per minute, two concurrent requests, 20 open holds and 100 simulated executions per rolling 24 hours per account. Retained sample records have separate capacity limits. New keys do not reset allowances. Requests have a 64 KiB body limit. Billing, provisioning, webhooks, paid previews, real recipients, bulk sends and immediate sends are unavailable. Registration drafts remain private samples. Honor Retry-After when supplied. After an uncertain hold creation, reconcile using the same idempotency key and exact body. After uncertain execution, read the same hold and its message result before taking another action. Never create a replacement message to resolve an unknown outcome. If the demo is unavailable, stop; switching to the production API is not a recovery step.