simsonic
ShopSignup for free
API Docs

simsonic Developer API

Full reference for the simsonic Developer API. All endpoints require dual authentication.

Authentication

Every request requires dual authentication — both factors must be present.

Factor 1 — Bearer Token

Your personal Developer Bearer token, generated from the Developer page. This is separate from your login password.

Copy
Authorization: Bearer simbearer_<prefix>_<secret>

Factor 2 — API Key Header

Your customer-group API key, obtained from the Developer page. Either header name is accepted.

Copy
X-Customer-API-Key: simdev_<prefix>_<secret>
# or
X-simsonic-API-Key: simdev_<prefix>_<secret>

Scope

API keys are scoped to a customer group. Responses include SIMs belonging to that customer and all of its sub-customers. Access never flows upward — a sub-customer's key cannot see its parent's data.

Rate Limiting

Limits are enforced per user and customer group. When exceeded, the API returns HTTP 429 with a Retry-After header.

LimitValue
Burst10 requests per 10s
Per minute60 requests
Per hour1500 requests
Min poll interval5s between list requests

Rate-limit status is returned in response headers on every request:

Copy
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 58
X-RateLimit-Limit-Hour: 1500
X-RateLimit-Remaining-Hour: 1498
X-RateLimit-Limit-Burst: 10
X-RateLimit-Remaining-Burst: 9

List SIMs

GEThttps://management.simsonic.com/developer/api/sims/

Returns a paginated list of all SIMs within your customer group scope.

Query Parameters

ParameterTypeDescription
pageoptionalintegerPage number. Defaults to 1.
page_sizeoptionalintegerResults per page. Default 25, max 100.
statusoptionalstringFilter by SIM status. One of: active, inactive, suspended, cancelled, stock, dispatched, trial.
customeroptionalstringFilter to a specific sub-customer by exact account name. Returns only SIMs directly owned by that customer. Returns 404 if not found within your scope.
updated_afteroptionalISO-8601Return only SIMs updated after this timestamp. Max lookback: 31 days. Example: 2026-03-01T00:00:00Z.

Example Request

Copy
curl -H "Authorization: Bearer simbearer_<prefix>_<secret>" \
  -H "X-Customer-API-Key: simdev_<prefix>_<secret>" \
  "https://management.simsonic.com/developer/api/sims/?page=1&page_size=25"

Filter by Sub-Customer

Copy
curl -H "Authorization: Bearer simbearer_<prefix>_<secret>" \
  -H "X-Customer-API-Key: simdev_<prefix>_<secret>" \
  "https://management.simsonic.com/developer/api/sims/?customer=Sub-Customer+Name"

Example Response

Copy
{
  "count": 142,
  "page": 1,
  "page_size": 25,
  "total_pages": 6,
  "results": [
    {
      "iccid": "89444611503500000001",
      "msisdn": "883190603000001",
      "status": "active",
      "connection_status": "active",
      "customer_name": "My Customer",
      "group": null,
      "tariff_name": "AAA-933",
      "usage": {
        "data_used_mb": "12.30",
        "data_overage_mb": "0.00"
      },
      "cost": {
        "currency": "GBP",
        "base_cost": "£0.06",
        "overage_cost": "£0.00",
        "total_cost": "£0.06"
      },
      "data_bundle": null,
      "updated_at": "2026-03-30T10:15:00+00:00"
    }
  ]
}
Note: group is only populated when the SIM belongs to a sub-customer. It is null for SIMs directly owned by your customer group.

Get SIM

GEThttps://management.simsonic.com/developer/api/sims/<sim_id>/

Returns a single SIM by its internal database ID. The SIM must be within your customer group scope.

Path Parameters

ParameterTypeDescription
sim_idrequiredintegerInternal SIM ID.

Example Request

Copy
curl -H "Authorization: Bearer simbearer_<prefix>_<secret>" \
  -H "X-Customer-API-Key: simdev_<prefix>_<secret>" \
  "https://management.simsonic.com/developer/api/sims/123/"

Example Response

Copy
{
  "iccid": "89444611503500000001",
  "msisdn": "883190603000001",
  "status": "active",
  "connection_status": "active",
  "customer_name": "My Customer",
  "group": null,
  "tariff_name": "AAA-933",
  "usage": { "data_used_mb": "12.30", "data_overage_mb": "0.00" },
  "cost": { "currency": "GBP", "base_cost": "£0.06", "overage_cost": "£0.00", "total_cost": "£0.06" },
  "data_bundle": null,
  "updated_at": "2026-03-30T10:15:00+00:00"
}

Send SMS

POSThttps://management.simsonic.com/developer/api/sims/<iccid>/sms/

Send a Mobile Terminated (MT) SMS to a SIM within your customer group scope. The SIM is identified by ICCID; its MSISDN is looked up automatically. The message is delivered via the Wireless Logic SMS network.

Path Parameters

ParameterTypeDescription
iccidrequiredstringICCID of the target SIM (up to 20 digits). Must be within your scope.

Request Body — JSON, Content-Type: application/json

FieldTypeDescription
messagerequiredstringSMS message body. Max 160 characters.
message_idoptionalstringYour correlation ID for this message (max 48 chars). If omitted, one is generated for you. Must be globally unique.
callback_urloptionalstring (URL)HTTPS endpoint to receive a delivery receipt POST when the message is delivered or expires. See Delivery Receipts below.

Example Request

Copy
curl -H "Authorization: Bearer simbearer_<prefix>_<secret>" \
  -H "X-Customer-API-Key: simdev_<prefix>_<secret>" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{"message": "Hello from simsonic", "callback_url": "https://your-server.example/sms-receipt"}' \
  "https://management.simsonic.com/developer/api/sims/89444611503500000001/sms/"

Example Response

Copy
{
  "message_id": "sms_a3f1b2c4d5e6f708",
  "status": "sent",
  "iccid": "89444611503500000001",
  "msisdn": "883190603000001"
}

Returns HTTP 202 Accepted. The message has been submitted to the network; status will be sent.

Delivery Receipts

If you provide a callback_url, simsonic will POST the following JSON payload to that URL when a delivery receipt is received from the network:

Copy
{
  "message_id": "sms_a3f1b2c4d5e6f708",
  "iccid": "89444611503500000001",
  "msisdn": "883190603000001",
  "status": "delivered",
  "received_at": "2026-03-30T14:22:05+00:00"
}
Possible status values: delivered, expired, failed. Your endpoint should return any 2xx response; failed forwards are logged but not retried.

SIM Object Reference

FieldTypeDescription
iccidstringUnique SIM identifier (up to 20 digits).
msisdnstringMobile number assigned to the SIM.
statusstringSIM lifecycle status: active, inactive, suspended, cancelled, stock, dispatched, trial.
connection_statusstringCurrent network connection: active or inactive.
customer_namestringAccount name of the customer that owns this SIM.
groupstring | nullPopulated with the sub-customer name when the SIM belongs to a sub-customer of the API key's customer group. null for root-level SIMs.
tariff_namestring | nullCustomer-facing tariff name assigned to this SIM.
usage.data_used_mbstringMonth-to-date data used in MB.
usage.data_overage_mbstringMonth-to-date overage in MB beyond the included allowance.
cost.currencystringAlways GBP.
cost.base_coststringMonthly base/line rental cost formatted as GBP (e.g. £0.06).
cost.overage_coststringCurrent month overage cost formatted as GBP.
cost.total_coststringTotal cost (base + overage) formatted as GBP.
data_bundleobject | nullPresent when SIM is on a data bundle tariff. See below.
updated_atISO-8601Timestamp of last sync from SIMPro.

data_bundle Object

Present only when data_bundle is not null.

FieldTypeDescription
is_data_bundlebooleanAlways true.
bundle_data_allowance_mbstringTotal shared pool allowance in MB.
bundle_monthly_coststringMonthly cost for the shared bundle.
per_sim_access_feestringPer-SIM access fee on top of the bundle cost.
pool_used_mbstringTotal MB used across all SIMs in the pool this month.
pool_total_mbstringTotal pool allowance in MB.

Errors

Every error response from the API — including invalid paths, wrong methods, authentication failures, and rate limits — returns JSON. HTML is never returned for any /developer/api/ path.

All error bodies contain detail (human-readable message) and code (machine-readable identifier). Rate limit errors additionally include retry_after_seconds.

HTTPCodeMeaning
400invalid_status_filterThe status query param is not a valid SIM status.
400invalid_updated_afterThe updated_after value is not a valid ISO-8601 datetime.
400updated_after_range_exceededThe updated_after value is older than 31 days.
400invalid_jsonRequest body is not valid JSON (SMS endpoint).
400invalid_callback_urlcallback_url must be HTTPS and point to a publicly reachable host.
400message_requiredNo message field in SMS request body.
400message_too_longSMS message exceeds 160 characters.
400message_id_too_longProvided message_id exceeds 48 characters.
401bearer_token_requiredNo Bearer token provided in Authorization header.
401invalid_bearer_tokenBearer token is invalid or has been revoked.
401user_inactiveThe user account associated with the Bearer token is inactive.
401api_key_requiredNo X-Customer-API-Key header provided.
401invalid_api_keyAPI key is invalid or has been revoked.
403developer_access_requiredUser does not have the developer role.
403tenant_scope_mismatchAPI key belongs to a different customer group than the authenticated user.
404not_foundThe endpoint path does not exist, or the requested SIM is not within your scope.
404customer_not_foundThe customer filter name does not match any customer in your scope.
405method_not_allowedHTTP method is not supported by this endpoint. Verify you are using the correct method (GET or POST) as documented.
409duplicate_message_idThe provided message_id has already been used.
422no_msisdnThe SIM does not have a MSISDN assigned — SMS cannot be sent.
429rate_limited_burstBurst limit exceeded. Check Retry-After header.
429rate_limited_minutePer-minute limit exceeded.
429rate_limited_hourPer-hour limit exceeded.
429rate_limited_poll_intervalMinimum poll interval not respected.
502sms_provider_errorSMS network provider returned an error. Try again.
502sms_provider_unreachableSMS network provider is unreachable. Try again.
503sms_not_configuredSMS service is not enabled on this instance.