Create SMPP or HTTP-API carrier
Register your own upstream termination carrier — an SMPP bind (type='smpp' with remoteHost, remotePort, remoteSystemId, remotePassword, optional bindType and TLS flags) or an HTTP API (type='http' with httpUrl, httpAuthType, httpCredentials) — that outbound MT traffic routes through while the row is active, at $0/message from Devotel. Routing fields pick what the carrier serves: scope='all' or scope='by_country_mcc' with a scopeFilter.mccs list (1–50 three-digit MCCs), plus a priority (lower wins). Submit status='inactive' to stage the row before flipping it live. The reconciler picks the row up on its next 30-second tick and opens the bind / installs the route. Owner / admin only, rate-limited to 20/hour per tenant; a missing connection block for the declared type is a 422.
Authorizations
Dashboard JWT token from Clerk
Headers
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
1 - 255Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Body
Human-readable name, 1–64 characters (required).
Carrier type: smpp (SMPP bind, default) or http (HTTP API).
SMPP: upstream host — hostname, IPv4 or IPv6 literal, no scheme or port (required for type='smpp').
SMPP: upstream port, 1–65535 (required for type='smpp').
SMPP: bind system_id, 1–15 characters per SMPP 3.4 (required for type='smpp').
SMPP: bind password, 1–8 characters (SMPP 3.4 C-Octet cap); encrypted at rest, never echoed back (required for type='smpp').
HTTP: upstream endpoint, HTTPS-only (required for type='http').
HTTP: auth scheme — basic, bearer or custom (required for type='http').
HTTP: opaque credential material the auth scheme consumes; encrypted at rest (required for type='http').
Routing scope: all (default) or by_country_mcc.
Routing filter { mccs: string[] } of 1–50 three-digit MCCs; required when scope='by_country_mcc'.
Route priority, 0–10000 (lower wins; default 100).
Initial lifecycle status — active, suspended or inactive; submit inactive to stage before going live.
Response
The created carrier — with the assigned id, credential material redacted to remotePasswordSet / httpCredentialsSet — wrapped in the standard { data, meta } envelope. Returns 422 when the body is invalid (a missing connection block for the declared type, or scope='by_country_mcc' without scopeFilter.mccs).
The created carrier — with the assigned id, credential material redacted to remotePasswordSet / httpCredentialsSet — wrapped in the standard { data, meta } envelope. Returns 422 when the body is invalid (a missing connection block for the declared type, or scope='by_country_mcc' without scopeFilter.mccs).