Skip to content

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_7f3c9a2b1e8d4056a1c2b3d4e5f60718

Rate limit: 120 requests per minute per key. Exceeding it returns 429 with a Retry-After header.

Reference

Endpoints

MethodPathDescription
GET/api/portal/numbersList the numbers on your account.
POST/api/portal/numbersOrder a number and route it to an endpoint.
PATCH/api/portal/numbersChange where a number routes.
GET/api/portal/subaccountsList SIP endpoints with live registration state.
POST/api/portal/subaccountsCreate an endpoint and receive its credentials once.
DELETE/api/portal/subaccountsDelete an endpoint that has no numbers routed to it.
GET/api/portal/messagesFetch message threads for the last N days.
POST/api/portal/messagesSend an SMS from one of your numbers.
GET/api/portal/cdrPull call detail records with a cost summary.
GET/api/portal/balanceRead balance, monthly recurring and recent ledger.
GET/api/catalog/didsSearch 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.