C Connecfy / Docs
v1

Errors

Every error below is the literal response shape a given failure produces — not a paraphrase. Where a field is named error versus code, that's the real, if occasionally inconsistent, field name in that response.

Authentication

HTTPCodeWhyFix
401auth_invalid_keyThe API key is missing, misspelled, or has been revoked.Check the Authorization: Bearer … header is present and use an active key from API Keys.
JSON
{ "error": "Invalid or inactive API key.", "code": "auth_invalid_key" }

Validation (400)

Malformed input fails with DRF's standard per-field shape — a dictionary keyed by the field name, valued with a list of messages for that field:

JSON
// to: "0000" 
{ "to": ["'0000' is not a valid E.164 number. Expected format: +212612345678"] }

More than one field can fail at once; each appears as its own key in the same object.

Quota and plan limits

HTTPWhereWhyFix
402SendingMonthly SMS quota used up for your plan.Wait for the next billing period, or upgrade your plan.
402Pairing a SIMYour plan's device limit is already in use.Remove an existing SIM, or upgrade. See SIM Cards.
JSON
// 402 — sending past your SMS quota
{
  "error": "quota_exceeded",
  "code": "monthly_limit_reached",
  "detail": "You have used 300 of 300 messages this month. Upgrade your plan to continue sending."
}
JSON
// 402 — pairing past your device limit
{
  "error": "device_limit_reached",
  "detail": "Device limit reached for your plan (1/1). Upgrade at connecfy.com to add more devices."
}

Sender number routing

HTTPCodeWhyFix
403from_number_not_foundThe from number isn't attached to any SIM on your account.Use a number that belongs to one of your SIMs, or check for a typo.
403from_number_access_deniedThe number exists, but this account has no rights to send from it.Ask an admin to grant access, or use a number you own outright.
503device_inactiveThe SIM behind that number has been deactivated.Register a replacement SIM, or contact your admin.

Not found

HTTPCodeWhy
404not_foundNo message with that id exists on your account — this includes ids that exist on someone else's account, so it can't be used to enumerate other accounts' messages.

Rate limiting (429)

JSON
// 429, header: Retry-After: 14
{ "detail": "Request was throttled. Expected available in 14 seconds." }

Full numbers per endpoint in Rate Limits.