Developers
Everything the portal does, over HTTP
There is no separate “API plan”. Every action available in the portal is available as a REST call with the same permissions, so you can provision numbers, manage endpoints and send messages straight from your own systems.
Authentication
Bearer tokens
Create a key under Portal → API keys. The key is shown once. Send it as a bearer token on every request. Keys are scoped to the account that created them and can be revoked at any time without affecting others.
Authorization header
Authorization: Bearer nip_live_7f3c9a2b1e8d4056a1c2b3d4e5f60718Rate limit: 120 requests per minute per key. Exceeding it returns 429 with a Retry-After header.
Reference
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/portal/numbers | List the numbers on your account. |
| POST | /api/portal/numbers | Order a number and route it to an endpoint. |
| PATCH | /api/portal/numbers | Change where a number routes. |
| GET | /api/portal/subaccounts | List SIP endpoints with live registration state. |
| POST | /api/portal/subaccounts | Create an endpoint and receive its credentials once. |
| DELETE | /api/portal/subaccounts | Delete an endpoint that has no numbers routed to it. |
| GET | /api/portal/messages | Fetch message threads for the last N days. |
| POST | /api/portal/messages | Send an SMS from one of your numbers. |
| GET | /api/portal/cdr | Pull call detail records with a cost summary. |
| GET | /api/portal/balance | Read balance, monthly recurring and recent ledger. |
| GET | /api/catalog/dids | Search available numbers by area code. Public. |
Examples
Common operations
Send an SMS
curl -X POST https://nextip.moorinnovations.com/api/portal/messages \
-H "Authorization: Bearer $NEXTIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"did": "15195550142",
"to": "+15195550188",
"message": "Your appointment is confirmed for 4pm."
}'Order a number
curl -X POST https://nextip.moorinnovations.com/api/portal/numbers \
-H "Authorization: Bearer $NEXTIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"did": "15195550142",
"routing": "account:office1a2b",
"enableSms": true,
"billingType": 2
}'Inbound message webhook payload
{
"event": "message.received",
"id": "msg_01HQ8Z3K2M",
"did": "15195550142",
"from": "+15195550188",
"body": "Can I move my appointment to 5?",
"receivedAt": "2026-08-22T14:07:31Z"
}Webhooks are signed with HMAC-SHA256 over the raw body. Verify the X-NextIP-Signature header before trusting a payload.
Errors
Error handling
400
Bad request
Validation failed. The `error` field names the problem.
401
Unauthorized
Missing, malformed or revoked API key.
403
Forbidden
The resource exists but is not on your account.
409
Conflict
The action is blocked by current state, e.g. SMS not enabled.
429
Rate limited
Back off and retry after the interval in `Retry-After`.
424
Upstream
A carrier or billing system we depend on rejected the request. Safe to retry with backoff.
503
Unavailable
A dependency is down. Retry with exponential backoff.
500
Server error
Unexpected failure on our side. Contact support with the response.