- A predictable
{ success, data, meta }response envelope on every call. - One
page/pageSizepagination scheme on every list endpoint. - One error-code taxonomy (
SIM_NOT_FOUND,RATE_LIMITED, and so on) instead of ad hoc messages per endpoint. - An optional
Idempotency-Keyheader on write endpoints, so a retried call replays instead of repeating. - One async pattern for anything that takes real-world time (provisioning an eSIM, a checkout session): the call returns a
transactionIdimmediately that you poll a single status endpoint with until it resolves.
Base URL
https://api.spenza.comWhat you can build
Fleet management
List and inspect the SIMs on your account, see live usage against the current billing cycle, and assign or reassign SIMs to users.
Self-serve provisioning
Purchase and activate plans, provision eSIMs (with an activation QR code), and check eligibility / port existing numbers in from another carrier.
Billing integrations
Pull invoices and usage summaries into your own finance tooling, check prepaid credit balance, and create top-up checkout sessions.
Team & fleet organization
Organize SIMs, devices, and users into named groups with spend limits and data quotas; manage the device catalog and who it’s assigned to.
Account administration
Invite and manage Team Members (account admins) with role tiers, and configure account-wide notification preferences.
Voice / SMS & webhooks
Send outbound SMS from a provisioned number, and register webhooks (with payload signing) for inbound SMS/voice events.
Quickstart
A complete, copy-ready integration flow from token to first purchase.
How the API is organized
Where to go next
- New to the API? Start with Getting Started to get credentials and configure your environment.
- Want the mental model first? Read Core Concepts for the envelope, pagination, and async pattern used everywhere.
- Ready to write code? Jump to the Quickstart for a complete, copy-ready integration flow.
- Looking for a specific endpoint? Browse the API Reference in the sidebar.

