Aether Logistics

DDev User

2026-08-01

API contract

The compatibility layer is a translation gateway: parser → canonical command → native service → serializer. The core never speaks 2010-04-01. Public IDs are SID-shaped; internals are ULID.

Native JSON

Canonical commands

CommandNativeCompatNotes

CreateMessage

{ command, to, from?, body, messaging_service_id?, send_at?, idempotency_key? }
POST /v1/messagesPOST /2010-04-01/Accounts/{Sid}/Messages.jsonReturns accepted before DLR. GSM-7 / UCS-2 segmentation is computed here.

CreateCall

{ command, to, from, twiml? }
POST /v1/callsPOST /2010-04-01/Accounts/{Sid}/Calls.jsonA Call is a graph of legs. TwiML is executed on the media plane.

CreateVerification

{ command, to, channel }
POST /v1/verificationsPOST /v2/Services/{Sid}/VerificationsOrchestration, not a random SMS. Velocity 60203.

CheckVerification

{ command, to, code }
POST /v1/verifications/checkPOST /v2/Services/{Sid}/VerificationCheckRated only on successful approval.

CreateConversation

{ command, friendly_name, sms_address? }
POST /v1/conversationsPOST /v1/ConversationsShould-tier. SMS participant posts ride the messaging plane.

LookupNumber

{ command, e164 }
POST /v1/lookupsGET /v2/PhoneNumbers/{Phone}Line type, carrier, port, CNAM, risk.

CreateEmail

{ command, to, subject, preview }
POST /v1/emailsPOST /v3/mail/sendSeparate delivery plane. Same tenant.

CreateNotification

{ command, identity, body }
POST /v1/notificationsPOST /v1/Services/{Sid}/NotificationsFans onto bindings. Not a new pipe.

EnqueueTask

{ command, queue_id, attributes }
POST /v1/tasksPOST /v1/Workspaces/{Sid}/TasksTaskRouter work item. Not a Call.

EmitEvent

{ command, type, payload }
POST /v1/streamsEvent Streams sink fan-out.

TranscribeCall

{ command, call_id }
POST /v1/transcriptionsPOST /v1/Calls/{Sid}/TranscriptionsControl-plane strip of TwiML. Live STT runs on the SIP lab via Web Speech.

Error catalog

  • 20001

    Parser or command map

    invalid_json / unknown_command
  • 20003

    Balance, credit limit, or suspend flag

    account_suspended
  • 20005

    Billing-account daily fuse

    daily_quota_exceeded
  • 20006

    Billing-account monthly fuse

    monthly_quota_exceeded
  • 20404

    Resource missing

    not_found
  • 20429

    Retryable velocity

    rate_limit_exceeded
  • 21211

    E.164 required

    invalid_to
  • 21210

    Not voice-capable

    invalid_from
  • 21217

    DID not on project

    unknown_number
  • 21408

    Destination not allow-listed

    geo_blocked
  • 21606

    From not in inventory

    invalid_from
  • 21610

    STOP recorded

    opt_out
  • 21612

    Provision blocked on catalog

    bundle_required
  • 30006

    LCR empty after health filter

    no_route
  • 60202

    Verify check

    incorrect_code
  • 60203

    Verify velocity

    max_send_attempts_reached

Webhook signatures

Native
X-Meridian-Signature: t=<unix_ms>,v1=<hex(HMAC-SHA256(secret, t.body))>

Reject |now − t| > 300s. Replay protection is the timestamp window.

Twilio compat
X-Twilio-Signature: Base64(HMAC-SHA1(authToken, url + sorted(key+value)))

Form body, not JSON. Compatibility only — the core does not emit this.

Idempotency
Header or field idempotency_key on CreateMessage. Same key returns the original resource instead of a second send.
Tenancy
Organization → Billing Account → Project (subaccount) → Resource. Compat AccountSid maps to a project. Daily and monthly fuses live on the billing account.