Home

Nitrosend API

v1.1.4
Base URLs
https://api.nitrosend.comProduction
http://localhost:8000Local development

Multi-channel marketing automation API. Send email campaigns, build automation flows, manage contacts and segments, track events, and configure your Brand Kit — all via a single REST API.

Authentication

All /v1/my/* endpoints require authentication via Bearer token. Three token types are accepted:

  1. API KeyAuthorization: Bearer nskey_live_...
  2. JWTAuthorization: Bearer <jwt> (obtained from POST /v1/login)
  3. Shopify ID token — supplied by App Bridge for an installed embedded app

Pagination

Paginated endpoints return these headers:

  • X-Total-Count — total records
  • X-Total-Pages — total pages
  • X-Page-Number — current page
  • X-Next-Page — next page (omitted on last page)
  • X-Prev-Page — previous page (omitted on first page)

Use page and limit (or per) query params to control pagination. Maximum limit is 100, default is 30.

Error Responses

All errors return a consistent JSON shape:

{
  "code": 422,
  "message": "Description of error",
  "error": true,
  "validation_errors": { "field": ["error message"] }
}

The validation_errors key is only present on 422 responses.

Authentication

BearerAuthhttp

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Scheme: bearer

PartnerProvisioningCredentialhttp

Manager-account provisioning credential revealed once at issuance.

Scheme: bearer (nspk_live)

ManagementCredentialhttp

One-time-revealed operator_v1 credential pinned to one active management grant and Brand.

Scheme: bearer (nsmc_live)

Auth

Login, logout, and registration

Create a new account

POST
https://api.nitrosend.com/v1/signup

Body

application/json
userobjectrequired
Show child attributes
first_namestring
last_namestring
emailstring<email>required
mobilestring
invite_tokenstring | null
passwordstring<password>required
password_confirmationstring<password>

Response

201CreatedUser

Account created

422Unprocessable EntityError & object

Validation failed

Create a new account
curl -X POST 'https://api.nitrosend.com/v1/signup' \
  -H 'Content-Type: application/json' \
  -d '{
    "user": {
      "first_name": "string",
      "last_name": "string",
      "email": "user@example.com",
      "mobile": "string",
      "invite_token": "string",
      "password": "********",
      "password_confirmation": "********"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/signup', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "user": {
        "first_name": "string",
        "last_name": "string",
        "email": "user@example.com",
        "mobile": "string",
        "invite_token": "string",
        "password": "********",
        "password_confirmation": "********"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "user": {
    "first_name": "string",
    "last_name": "string",
    "email": "user@example.com",
    "mobile": "string",
    "invite_token": "string",
    "password": "********",
    "password_confirmation": "********"
  }
}

response = requests.post('https://api.nitrosend.com/v1/signup', json=payload)
data = response.json()
Request Body
{
  "user": {
    "first_name": "string",
    "last_name": "string",
    "email": "user@example.com",
    "mobile": "string",
    "invite_token": "string",
    "password": "********",
    "password_confirmation": "********"
  }
}
{
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "email": "user@example.com",
  "mobile": "string",
  "country_code": "string",
  "time_zone": "string",
  "admin": true,
  "ui_login_count": 0,
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Sign in and receive a JWT

POST
https://api.nitrosend.com/v1/login

Body

application/json
userobjectrequired
Show child attributes
emailstring<email>required
passwordstring<password>required

Response

200OKUser

Signed in

401UnauthorizedError

Not authenticated

Sign in and receive a JWT
curl -X POST 'https://api.nitrosend.com/v1/login' \
  -H 'Content-Type: application/json' \
  -d '{
    "user": {
      "email": "user@example.com",
      "password": "********"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "user": {
        "email": "user@example.com",
        "password": "********"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "user": {
    "email": "user@example.com",
    "password": "********"
  }
}

response = requests.post('https://api.nitrosend.com/v1/login', json=payload)
data = response.json()
Request Body
{
  "user": {
    "email": "user@example.com",
    "password": "********"
  }
}
{
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "email": "user@example.com",
  "mobile": "string",
  "country_code": "string",
  "time_zone": "string",
  "admin": true,
  "ui_login_count": 0,
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Sign out and revoke JWT

DELETE
https://api.nitrosend.com/v1/logout

Response

204No Content

Signed out

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Sign out and revoke JWT
curl -X DELETE 'https://api.nitrosend.com/v1/logout'
const response = await fetch('https://api.nitrosend.com/v1/logout', {
  method: 'DELETE',
});

const data = await response.json();
import requests

response = requests.delete('https://api.nitrosend.com/v1/logout')
data = response.json()

Get OAuth popup context

GET
https://api.nitrosend.com/v1/oauth/me

Returns the account-selection and subscription context used by the /oauth/connect popup. This endpoint accepts the normal Bearer JWT and, for popup resume flows, the authenticated browser session cookie established by Devise/OmniAuth.

Response

200OKOAuthPopupContext

Popup context

401UnauthorizedError

Not authenticated

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get OAuth popup context
curl -X GET 'https://api.nitrosend.com/v1/oauth/me'
const response = await fetch('https://api.nitrosend.com/v1/oauth/me', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/oauth/me')
data = response.json()
{
  "accounts": [
    {
      "id": 0,
      "name": "string",
      "access": {
        "source": "owner",
        "delegated": true,
        "manager_account_id": 0,
        "manager_account_name": "string",
        "management_grant_id": 0,
        "permission_set": "operator_v1",
        "credential_type": "management"
      },
      "can_manage": true,
      "needs_subscribe": true
    }
  ],
  "plans": [
    {
      "id": 0,
      "name": "string",
      "slug": "string",
      "base_price_cents": 0,
      "interval": "string"
    }
  ],
  "stripe_publishable_key": "string"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Subscribe the selected OAuth popup account

POST
https://api.nitrosend.com/v1/oauth/subscribe

Finalizes plan selection for the /oauth/connect popup before the browser returns to the Doorkeeper consent screen. This endpoint accepts the normal Bearer JWT and, for popup resume flows, the authenticated browser session cookie established by Devise/OmniAuth.

Body

application/json
plan_idintegerrequired
account_idinteger | null
stripe_tokenstring | null

Response

200OKOAuthPopupSubscribeResponse

Popup can continue to consent

401UnauthorizedError

Not authenticated

422Unprocessable Entityobject

Account or plan selection failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Subscribe the selected OAuth popup account
curl -X POST 'https://api.nitrosend.com/v1/oauth/subscribe' \
  -H 'Content-Type: application/json' \
  -d '{
    "plan_id": 0,
    "account_id": 0,
    "stripe_token": "string"
  }'
const response = await fetch('https://api.nitrosend.com/v1/oauth/subscribe', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "plan_id": 0,
      "account_id": 0,
      "stripe_token": "string"
    }),
});

const data = await response.json();
import requests

payload = {
  "plan_id": 0,
  "account_id": 0,
  "stripe_token": "string"
}

response = requests.post('https://api.nitrosend.com/v1/oauth/subscribe', json=payload)
data = response.json()
Request Body
{
  "plan_id": 0,
  "account_id": 0,
  "stripe_token": "string"
}
{
  "next_step": "consent"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "error": "string"
}

Create a CSRF-safe OAuth provider launch URL

POST
https://api.nitrosend.com/v1/oauth/launch

Mints a short-lived launch URL for Google or GitHub sign-in. The frontend follows the returned API-origin launch page, which renders the real POST form to /auth/:provider with a valid Rails authenticity token. This preserves OmniAuth's POST-only request phase and CSRF protection for both the app popup flow and the /oauth/connect agent popup flow.

Body

application/json
providerstringgoogle_oauth2githubrequired
auth_intentstringappagentapp
auth_stepstringloginsignuplogin
resume_urlstring<uri> | null

Required when auth_intent=agent; must point to the frontend /oauth/connect route.

Response

200OKOAuthLaunchResponse

Launch URL created

400Bad Requestobject

Invalid provider or resume URL

Create a CSRF-safe OAuth provider launch URL
curl -X POST 'https://api.nitrosend.com/v1/oauth/launch' \
  -H 'Content-Type: application/json' \
  -d '{
    "provider": "google_oauth2",
    "auth_intent": "app",
    "auth_step": "login",
    "resume_url": "https://example.com"
  }'
const response = await fetch('https://api.nitrosend.com/v1/oauth/launch', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "provider": "google_oauth2",
      "auth_intent": "app",
      "auth_step": "login",
      "resume_url": "https://example.com"
    }),
});

const data = await response.json();
import requests

payload = {
  "provider": "google_oauth2",
  "auth_intent": "app",
  "auth_step": "login",
  "resume_url": "https://example.com"
}

response = requests.post('https://api.nitrosend.com/v1/oauth/launch', json=payload)
data = response.json()
Request Body
{
  "provider": "google_oauth2",
  "auth_intent": "app",
  "auth_step": "login",
  "resume_url": "https://example.com"
}
{
  "launch_url": "https://example.com"
}
{
  "error": "string"
}

User

Current user profile

Get current user profile

GET
https://api.nitrosend.com/v1/my/user

Response

200OKUser

User profile

401UnauthorizedError

Not authenticated

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get current user profile
curl -X GET 'https://api.nitrosend.com/v1/my/user'
const response = await fetch('https://api.nitrosend.com/v1/my/user', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/user')
data = response.json()
{
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "email": "user@example.com",
  "mobile": "string",
  "country_code": "string",
  "time_zone": "string",
  "admin": true,
  "ui_login_count": 0,
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Update current user profile

PATCH
https://api.nitrosend.com/v1/my/user

Body

application/json
first_namestring
last_namestring
emailstring | Array<string>
mobilestring
time_zonestring | null

Response

200OKUser

Updated user

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Update current user profile
curl -X PATCH 'https://api.nitrosend.com/v1/my/user' \
  -H 'Content-Type: application/json' \
  -d '{
    "first_name": "string",
    "last_name": "string",
    "email": "user@example.com",
    "mobile": "string",
    "time_zone": "string"
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/user', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "first_name": "string",
      "last_name": "string",
      "email": "user@example.com",
      "mobile": "string",
      "time_zone": "string"
    }),
});

const data = await response.json();
import requests

payload = {
  "first_name": "string",
  "last_name": "string",
  "email": "user@example.com",
  "mobile": "string",
  "time_zone": "string"
}

response = requests.patch('https://api.nitrosend.com/v1/my/user', json=payload)
data = response.json()
Request Body
{
  "first_name": "string",
  "last_name": "string",
  "email": "user@example.com",
  "mobile": "string",
  "time_zone": "string"
}
{
  "id": 0,
  "first_name": "string",
  "last_name": "string",
  "email": "user@example.com",
  "mobile": "string",
  "country_code": "string",
  "time_zone": "string",
  "admin": true,
  "ui_login_count": 0,
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Get current impersonation status

GET
https://api.nitrosend.com/v1/my/impersonation

Response

200OKImpersonationStatus

Current impersonation state

401UnauthorizedError

Not authenticated

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get current impersonation status
curl -X GET 'https://api.nitrosend.com/v1/my/impersonation'
const response = await fetch('https://api.nitrosend.com/v1/my/impersonation', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/impersonation')
data = response.json()
{
  "impersonating": true,
  "impersonator": {
    "id": 0,
    "email": "user@example.com",
    "name": "string"
  }
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Revoke the active impersonation session

DELETE
https://api.nitrosend.com/v1/my/impersonation

Response

200OKImpersonationExit

Impersonation session revoked

401UnauthorizedError

Not authenticated

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Revoke the active impersonation session
curl -X DELETE 'https://api.nitrosend.com/v1/my/impersonation'
const response = await fetch('https://api.nitrosend.com/v1/my/impersonation', {
  method: 'DELETE',
});

const data = await response.json();
import requests

response = requests.delete('https://api.nitrosend.com/v1/my/impersonation')
data = response.json()
{
  "redirect_url": "https://api.nitrosend.com/adm"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Account

Account settings and configuration

Get account details

GET
https://api.nitrosend.com/v1/my/account

Response

200OKAccount

Account with brands and billing

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get account details
curl -X GET 'https://api.nitrosend.com/v1/my/account'
const response = await fetch('https://api.nitrosend.com/v1/my/account', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/account')
data = response.json()
200
{
  "id": 0,
  "name": "string",
  "avatar": "string",
  "banner": "string",
  "commercial_tier": "unsubscribed",
  "safe_mode_enabled": true,
  "access": {
    "source": "owner",
    "delegated": true,
    "manager_account_id": 0,
    "manager_account_name": "string",
    "management_grant_id": 0,
    "permission_set": "operator_v1",
    "credential_type": "management"
  },
  "billing": {
    "access_policy": "free_allowed",
    "plan_name": "string",
    "plan": {
      "id": 0,
      "name": "string",
      "active": true,
      "probation_recipient_cap_24h": 0,
      "standard_recipient_cap_24h": 0,
      "trusted_recipient_cap_24h": 0,
      "entitlements": {
        "agent_inbox": {
          "enabled": true,
          "max_inboxes": 0,
          "inbound_messages_included": 0,
          "inbound_messages_metered": true,
          "inbound_message_overage_rate_cents": "string",
          "max_inbound_domains": 0,
          "max_apex_domains": 0,
          "apex_mx": true,
          "legacy_forwarding": true,
          "catch_all": true,
          "retention_days": 0,
          "advanced_queue_controls": true
        }
      }
    },
    "spend_cap_monthly_cents": 0,
    "comped": true,
    "overage": {},
    "entitlements": {
      "agent_inbox": {
        "enabled": true,
        "max_inboxes": 0,
        "inbound_messages_included": 0,
        "inbound_messages_metered": true,
        "inbound_message_overage_rate_cents": "string",
        "max_inbound_domains": 0,
        "max_apex_domains": 0,
        "apex_mx": true,
        "legacy_forwarding": true,
        "catch_all": true,
        "retention_days": 0,
        "advanced_queue_controls": true
      }
    },
    "resources": {
      "email": {
        "used": 0,
        "allowance": 0,
        "remaining": 0,
        "overage_rate": 0,
        "mode": "budget",
        "budget": 0,
        "budget_used": 0
      },
      "sms": {
        "used": 0,
        "allowance": 0,
        "remaining": 0,
        "overage_rate": 0,
        "mode": "budget",
        "budget": 0,
        "budget_used": 0
      },
      "ai": {
        "used": 0,
        "allowance": 0,
        "remaining": 0,
        "overage_rate": 0,
        "mode": "budget",
        "budget": 0,
        "budget_used": 0
      }
    },
    "funding": {},
    "provider_route": {},
    "brands": {
      "used": 0,
      "limit": 0,
      "remaining": 0,
      "unlimited": true,
      "can_create": true
    },
    "lifetime": {
      "email_sent": 0,
      "sms_sent": 0,
      "ai_used": 0
    }
  },
  "brands": [
    {
      "id": 0,
      "sid": "string",
      "account_id": 0,
      "brand_color": "string",
      "text_color": "string",
      "bg_color": "string",
      "radius": 0,
      "spacing_density": "compact",
      "font_heading": "string",
      "font_body": "string",
      "heading_size": 12,
      "body_size": 12,
      "brand_document": "string",
      "company_description": "string",
      "default_header": {},
      "default_footer": {},
      "default_theme": {},
      "physical_address": "string",
      "company_name": "string",
      "source_url": "string",
      "last_scraped_at": "2024-01-15T09:30:00Z",
      "links": [
        {
          "url": "string",
          "icon": "string",
          "title": "string"
        }
      ],
      "logo": "string",
      "complete": true,
      "email_from_name": "string",
      "email_from_email": "string",
      "email_reply_to": "string",
      "from_email_domain_status": "blank",
      "effective_from_email": "user@example.com",
      "effective_reply_to": "user@example.com",
      "effective_sending_domain": "string",
      "effective_source_email": "user@example.com",
      "sender_configured": true,
      "email_view_online": true,
      "test_email_recipients": [
        "user@example.com"
      ],
      "onboarding_state": {},
      "onboarding": {
        "steps": {},
        "progress": {
          "completed": 0,
          "total": 0
        }
      },
      "domain_verified": true,
      "can_send": true,
      "brand_subdomain": {
        "namespace_status": "unreserved",
        "status": "brand_identity_required",
        "ready": true,
        "selected": true,
        "preparation_required": true,
        "from_email": "user@example.com",
        "fqdn": "string",
        "apex": "string",
        "local_part": "string",
        "local_part_editable": true,
        "fqdn_changeable": false
      },
      "byo_routing": {
        "mismatch": true,
        "provider": "string",
        "bypassing_domains": [
          "string"
        ],
        "message": "string"
      },
      "subscribed_contacts_count": 0,
      "logo_url": "https://example.com",
      "screenshot_url": "https://example.com",
      "capabilities": {},
      "sms_provisioned": true,
      "created_at": "2024-01-15T09:30:00Z",
      "updated_at": "2024-01-15T09:30:00Z"
    }
  ],
  "team": {
    "seat_limit": 0,
    "seat_count": 0,
    "member_count": 0,
    "invite_count": 0,
    "current_role": "string",
    "can_manage_team": true
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}

Update account settings

PATCH
https://api.nitrosend.com/v1/my/account

Body

application/json
namestring
avatarstring

Signed blob ID

bannerstring

Signed blob ID

Response

200OKAccount

Updated account

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Update account settings
curl -X PATCH 'https://api.nitrosend.com/v1/my/account' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "string",
    "avatar": "string",
    "banner": "string"
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/account', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "name": "string",
      "avatar": "string",
      "banner": "string"
    }),
});

const data = await response.json();
import requests

payload = {
  "name": "string",
  "avatar": "string",
  "banner": "string"
}

response = requests.patch('https://api.nitrosend.com/v1/my/account', json=payload)
data = response.json()
Request Body
{
  "name": "string",
  "avatar": "string",
  "banner": "string"
}
{
  "id": 0,
  "name": "string",
  "avatar": "string",
  "banner": "string",
  "commercial_tier": "unsubscribed",
  "safe_mode_enabled": true,
  "access": {
    "source": "owner",
    "delegated": true,
    "manager_account_id": 0,
    "manager_account_name": "string",
    "management_grant_id": 0,
    "permission_set": "operator_v1",
    "credential_type": "management"
  },
  "billing": {
    "access_policy": "free_allowed",
    "plan_name": "string",
    "plan": {
      "id": 0,
      "name": "string",
      "active": true,
      "probation_recipient_cap_24h": 0,
      "standard_recipient_cap_24h": 0,
      "trusted_recipient_cap_24h": 0,
      "entitlements": {
        "agent_inbox": {
          "enabled": true,
          "max_inboxes": 0,
          "inbound_messages_included": 0,
          "inbound_messages_metered": true,
          "inbound_message_overage_rate_cents": "string",
          "max_inbound_domains": 0,
          "max_apex_domains": 0,
          "apex_mx": true,
          "legacy_forwarding": true,
          "catch_all": true,
          "retention_days": 0,
          "advanced_queue_controls": true
        }
      }
    },
    "spend_cap_monthly_cents": 0,
    "comped": true,
    "overage": {},
    "entitlements": {
      "agent_inbox": {
        "enabled": true,
        "max_inboxes": 0,
        "inbound_messages_included": 0,
        "inbound_messages_metered": true,
        "inbound_message_overage_rate_cents": "string",
        "max_inbound_domains": 0,
        "max_apex_domains": 0,
        "apex_mx": true,
        "legacy_forwarding": true,
        "catch_all": true,
        "retention_days": 0,
        "advanced_queue_controls": true
      }
    },
    "resources": {
      "email": {
        "used": 0,
        "allowance": 0,
        "remaining": 0,
        "overage_rate": 0,
        "mode": "budget",
        "budget": 0,
        "budget_used": 0
      },
      "sms": {
        "used": 0,
        "allowance": 0,
        "remaining": 0,
        "overage_rate": 0,
        "mode": "budget",
        "budget": 0,
        "budget_used": 0
      },
      "ai": {
        "used": 0,
        "allowance": 0,
        "remaining": 0,
        "overage_rate": 0,
        "mode": "budget",
        "budget": 0,
        "budget_used": 0
      }
    },
    "funding": {},
    "provider_route": {},
    "brands": {
      "used": 0,
      "limit": 0,
      "remaining": 0,
      "unlimited": true,
      "can_create": true
    },
    "lifetime": {
      "email_sent": 0,
      "sms_sent": 0,
      "ai_used": 0
    }
  },
  "brands": [
    {
      "id": 0,
      "sid": "string",
      "account_id": 0,
      "brand_color": "string",
      "text_color": "string",
      "bg_color": "string",
      "radius": 0,
      "spacing_density": "compact",
      "font_heading": "string",
      "font_body": "string",
      "heading_size": 12,
      "body_size": 12,
      "brand_document": "string",
      "company_description": "string",
      "default_header": {},
      "default_footer": {},
      "default_theme": {},
      "physical_address": "string",
      "company_name": "string",
      "source_url": "string",
      "last_scraped_at": "2024-01-15T09:30:00Z",
      "links": [
        {
          "url": "string",
          "icon": "string",
          "title": "string"
        }
      ],
      "logo": "string",
      "complete": true,
      "email_from_name": "string",
      "email_from_email": "string",
      "email_reply_to": "string",
      "from_email_domain_status": "blank",
      "effective_from_email": "user@example.com",
      "effective_reply_to": "user@example.com",
      "effective_sending_domain": "string",
      "effective_source_email": "user@example.com",
      "sender_configured": true,
      "email_view_online": true,
      "test_email_recipients": [
        "user@example.com"
      ],
      "onboarding_state": {},
      "onboarding": {
        "steps": {},
        "progress": {
          "completed": 0,
          "total": 0
        }
      },
      "domain_verified": true,
      "can_send": true,
      "brand_subdomain": {
        "namespace_status": "unreserved",
        "status": "brand_identity_required",
        "ready": true,
        "selected": true,
        "preparation_required": true,
        "from_email": "user@example.com",
        "fqdn": "string",
        "apex": "string",
        "local_part": "string",
        "local_part_editable": true,
        "fqdn_changeable": false
      },
      "byo_routing": {
        "mismatch": true,
        "provider": "string",
        "bypassing_domains": [
          "string"
        ],
        "message": "string"
      },
      "subscribed_contacts_count": 0,
      "logo_url": "https://example.com",
      "screenshot_url": "https://example.com",
      "capabilities": {},
      "sms_provisioned": true,
      "created_at": "2024-01-15T09:30:00Z",
      "updated_at": "2024-01-15T09:30:00Z"
    }
  ],
  "team": {
    "seat_limit": 0,
    "seat_count": 0,
    "member_count": 0,
    "invite_count": 0,
    "current_role": "string",
    "can_manage_team": true
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

List accessible accounts (paginated)

GET
https://api.nitrosend.com/v1/my/accounts

Parameters

pageinteger1query
perinteger<= 100100query

Response

200OKArray<Account>

Accessible accounts

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

List accessible accounts (paginated)
curl -X GET 'https://api.nitrosend.com/v1/my/accounts'
const response = await fetch('https://api.nitrosend.com/v1/my/accounts', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/accounts')
data = response.json()
200
[
  {
    "id": 0,
    "name": "string",
    "avatar": "string",
    "banner": "string",
    "commercial_tier": "unsubscribed",
    "safe_mode_enabled": true,
    "access": {
      "source": "owner",
      "delegated": true,
      "manager_account_id": 0,
      "manager_account_name": "string",
      "management_grant_id": 0,
      "permission_set": "operator_v1",
      "credential_type": "management"
    },
    "billing": {
      "access_policy": "free_allowed",
      "plan_name": "string",
      "plan": {
        "id": 0,
        "name": "string",
        "active": true,
        "probation_recipient_cap_24h": 0,
        "standard_recipient_cap_24h": 0,
        "trusted_recipient_cap_24h": 0,
        "entitlements": {
          "agent_inbox": {
            "enabled": true,
            "max_inboxes": 0,
            "inbound_messages_included": 0,
            "inbound_messages_metered": true,
            "inbound_message_overage_rate_cents": "string",
            "max_inbound_domains": 0,
            "max_apex_domains": 0,
            "apex_mx": true,
            "legacy_forwarding": true,
            "catch_all": true,
            "retention_days": 0,
            "advanced_queue_controls": true
          }
        }
      },
      "spend_cap_monthly_cents": 0,
      "comped": true,
      "overage": {},
      "entitlements": {
        "agent_inbox": {
          "enabled": true,
          "max_inboxes": 0,
          "inbound_messages_included": 0,
          "inbound_messages_metered": true,
          "inbound_message_overage_rate_cents": "string",
          "max_inbound_domains": 0,
          "max_apex_domains": 0,
          "apex_mx": true,
          "legacy_forwarding": true,
          "catch_all": true,
          "retention_days": 0,
          "advanced_queue_controls": true
        }
      },
      "resources": {
        "email": {
          "used": 0,
          "allowance": 0,
          "remaining": 0,
          "overage_rate": 0,
          "mode": "budget",
          "budget": 0,
          "budget_used": 0
        },
        "sms": {
          "used": 0,
          "allowance": 0,
          "remaining": 0,
          "overage_rate": 0,
          "mode": "budget",
          "budget": 0,
          "budget_used": 0
        },
        "ai": {
          "used": 0,
          "allowance": 0,
          "remaining": 0,
          "overage_rate": 0,
          "mode": "budget",
          "budget": 0,
          "budget_used": 0
        }
      },
      "funding": {},
      "provider_route": {},
      "brands": {
        "used": 0,
        "limit": 0,
        "remaining": 0,
        "unlimited": true,
        "can_create": true
      },
      "lifetime": {
        "email_sent": 0,
        "sms_sent": 0,
        "ai_used": 0
      }
    },
    "brands": [
      {
        "id": 0,
        "sid": "string",
        "account_id": 0,
        "brand_color": "string",
        "text_color": "string",
        "bg_color": "string",
        "radius": 0,
        "spacing_density": "compact",
        "font_heading": "string",
        "font_body": "string",
        "heading_size": 12,
        "body_size": 12,
        "brand_document": "string",
        "company_description": "string",
        "default_header": {},
        "default_footer": {},
        "default_theme": {},
        "physical_address": "string",
        "company_name": "string",
        "source_url": "string",
        "last_scraped_at": "2024-01-15T09:30:00Z",
        "links": [
          {
            "url": "string",
            "icon": "string",
            "title": "string"
          }
        ],
        "logo": "string",
        "complete": true,
        "email_from_name": "string",
        "email_from_email": "string",
        "email_reply_to": "string",
        "from_email_domain_status": "blank",
        "effective_from_email": "user@example.com",
        "effective_reply_to": "user@example.com",
        "effective_sending_domain": "string",
        "effective_source_email": "user@example.com",
        "sender_configured": true,
        "email_view_online": true,
        "test_email_recipients": [
          "user@example.com"
        ],
        "onboarding_state": {},
        "onboarding": {
          "steps": {},
          "progress": {
            "completed": 0,
            "total": 0
          }
        },
        "domain_verified": true,
        "can_send": true,
        "brand_subdomain": {
          "namespace_status": "unreserved",
          "status": "brand_identity_required",
          "ready": true,
          "selected": true,
          "preparation_required": true,
          "from_email": "user@example.com",
          "fqdn": "string",
          "apex": "string",
          "local_part": "string",
          "local_part_editable": true,
          "fqdn_changeable": false
        },
        "byo_routing": {
          "mismatch": true,
          "provider": "string",
          "bypassing_domains": [
            "string"
          ],
          "message": "string"
        },
        "subscribed_contacts_count": 0,
        "logo_url": "https://example.com",
        "screenshot_url": "https://example.com",
        "capabilities": {},
        "sms_provisioned": true,
        "created_at": "2024-01-15T09:30:00Z",
        "updated_at": "2024-01-15T09:30:00Z"
      }
    ],
    "team": {
      "seat_limit": 0,
      "seat_count": 0,
      "member_count": 0,
      "invite_count": 0,
      "current_role": "string",
      "can_manage_team": true
    },
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  }
]

Get the current account's pending or active management grant

GET
https://api.nitrosend.com/v1/my/account/management_grant

Only the canonical owner of the selected managed account may use this endpoint.

Response

200OKAccountManagementGrant

Current management grant

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get the current account's pending or active management grant
curl -X GET 'https://api.nitrosend.com/v1/my/account/management_grant'
const response = await fetch('https://api.nitrosend.com/v1/my/account/management_grant', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/account/management_grant')
data = response.json()
{
  "id": 0,
  "status": "pending",
  "permission_set": "operator_v1",
  "manager_account": {
    "id": 0,
    "name": "string"
  },
  "requested_at": "2024-01-15T09:30:00Z",
  "activated_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "released_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Reconcile a consented, paid managed-account grant

POST
https://api.nitrosend.com/v1/my/account/management_grant/confirm

This endpoint cannot record owner consent or bypass paid activation.

Body

application/json
management_grant_idintegerrequired

Exact grant returned by the show endpoint; prevents a stale command from targeting a replacement grant.

Response

200OKAccountManagementGrant

Active management grant

400Bad RequestError

Bad request

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

409ConflictError

The grant cannot transition from its current state

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Reconcile a consented, paid managed-account grant
curl -X POST 'https://api.nitrosend.com/v1/my/account/management_grant/confirm' \
  -H 'Content-Type: application/json' \
  -d '{
    "management_grant_id": 0
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/account/management_grant/confirm', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "management_grant_id": 0
    }),
});

const data = await response.json();
import requests

payload = {
  "management_grant_id": 0
}

response = requests.post('https://api.nitrosend.com/v1/my/account/management_grant/confirm', json=payload)
data = response.json()
Request Body
{
  "management_grant_id": 0
}
{
  "id": 0,
  "status": "pending",
  "permission_set": "operator_v1",
  "manager_account": {
    "id": 0,
    "name": "string"
  },
  "requested_at": "2024-01-15T09:30:00Z",
  "activated_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "released_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Revoke an exact pending or active management grant

POST
https://api.nitrosend.com/v1/my/account/management_grant/revoke

Revocation takes effect on the next REST or MCP request and is idempotent for the exact grant.

Body

application/json
management_grant_idintegerrequired

Exact grant returned by the show endpoint; prevents a stale command from targeting a replacement grant.

Response

200OKAccountManagementGrant

Revoked management grant

400Bad RequestError

Bad request

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

409ConflictError

The grant cannot transition from its current state

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Revoke an exact pending or active management grant
curl -X POST 'https://api.nitrosend.com/v1/my/account/management_grant/revoke' \
  -H 'Content-Type: application/json' \
  -d '{
    "management_grant_id": 0
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/account/management_grant/revoke', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "management_grant_id": 0
    }),
});

const data = await response.json();
import requests

payload = {
  "management_grant_id": 0
}

response = requests.post('https://api.nitrosend.com/v1/my/account/management_grant/revoke', json=payload)
data = response.json()
Request Body
{
  "management_grant_id": 0
}
{
  "id": 0,
  "status": "pending",
  "permission_set": "operator_v1",
  "manager_account": {
    "id": 0,
    "name": "string"
  },
  "requested_at": "2024-01-15T09:30:00Z",
  "activated_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "released_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Get team metadata for the current account

GET
https://api.nitrosend.com/v1/my/account/team

Response

200OKAccountTeam

Team metadata

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get team metadata for the current account
curl -X GET 'https://api.nitrosend.com/v1/my/account/team'
const response = await fetch('https://api.nitrosend.com/v1/my/account/team', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/account/team')
data = response.json()
200
{
  "account": {
    "id": 0,
    "name": "string",
    "avatar": "string",
    "banner": "string",
    "commercial_tier": "unsubscribed",
    "safe_mode_enabled": true,
    "access": {
      "source": "owner",
      "delegated": true,
      "manager_account_id": 0,
      "manager_account_name": "string",
      "management_grant_id": 0,
      "permission_set": "operator_v1",
      "credential_type": "management"
    },
    "billing": {
      "access_policy": "free_allowed",
      "plan_name": "string",
      "plan": {
        "id": 0,
        "name": "string",
        "active": true,
        "probation_recipient_cap_24h": 0,
        "standard_recipient_cap_24h": 0,
        "trusted_recipient_cap_24h": 0,
        "entitlements": {
          "agent_inbox": {
            "enabled": true,
            "max_inboxes": 0,
            "inbound_messages_included": 0,
            "inbound_messages_metered": true,
            "inbound_message_overage_rate_cents": "string",
            "max_inbound_domains": 0,
            "max_apex_domains": 0,
            "apex_mx": true,
            "legacy_forwarding": true,
            "catch_all": true,
            "retention_days": 0,
            "advanced_queue_controls": true
          }
        }
      },
      "spend_cap_monthly_cents": 0,
      "comped": true,
      "overage": {},
      "entitlements": {
        "agent_inbox": {
          "enabled": true,
          "max_inboxes": 0,
          "inbound_messages_included": 0,
          "inbound_messages_metered": true,
          "inbound_message_overage_rate_cents": "string",
          "max_inbound_domains": 0,
          "max_apex_domains": 0,
          "apex_mx": true,
          "legacy_forwarding": true,
          "catch_all": true,
          "retention_days": 0,
          "advanced_queue_controls": true
        }
      },
      "resources": {
        "email": {
          "used": 0,
          "allowance": 0,
          "remaining": 0,
          "overage_rate": 0,
          "mode": "budget",
          "budget": 0,
          "budget_used": 0
        },
        "sms": {
          "used": 0,
          "allowance": 0,
          "remaining": 0,
          "overage_rate": 0,
          "mode": "budget",
          "budget": 0,
          "budget_used": 0
        },
        "ai": {
          "used": 0,
          "allowance": 0,
          "remaining": 0,
          "overage_rate": 0,
          "mode": "budget",
          "budget": 0,
          "budget_used": 0
        }
      },
      "funding": {},
      "provider_route": {},
      "brands": {
        "used": 0,
        "limit": 0,
        "remaining": 0,
        "unlimited": true,
        "can_create": true
      },
      "lifetime": {
        "email_sent": 0,
        "sms_sent": 0,
        "ai_used": 0
      }
    },
    "brands": [
      {
        "id": 0,
        "sid": "string",
        "account_id": 0,
        "brand_color": "string",
        "text_color": "string",
        "bg_color": "string",
        "radius": 0,
        "spacing_density": "compact",
        "font_heading": "string",
        "font_body": "string",
        "heading_size": 12,
        "body_size": 12,
        "brand_document": "string",
        "company_description": "string",
        "default_header": {},
        "default_footer": {},
        "default_theme": {},
        "physical_address": "string",
        "company_name": "string",
        "source_url": "string",
        "last_scraped_at": "2024-01-15T09:30:00Z",
        "links": [
          {
            "url": "string",
            "icon": "string",
            "title": "string"
          }
        ],
        "logo": "string",
        "complete": true,
        "email_from_name": "string",
        "email_from_email": "string",
        "email_reply_to": "string",
        "from_email_domain_status": "blank",
        "effective_from_email": "user@example.com",
        "effective_reply_to": "user@example.com",
        "effective_sending_domain": "string",
        "effective_source_email": "user@example.com",
        "sender_configured": true,
        "email_view_online": true,
        "test_email_recipients": [
          "user@example.com"
        ],
        "onboarding_state": {},
        "onboarding": {
          "steps": {},
          "progress": {
            "completed": 0,
            "total": 0
          }
        },
        "domain_verified": true,
        "can_send": true,
        "brand_subdomain": {
          "namespace_status": "unreserved",
          "status": "brand_identity_required",
          "ready": true,
          "selected": true,
          "preparation_required": true,
          "from_email": "user@example.com",
          "fqdn": "string",
          "apex": "string",
          "local_part": "string",
          "local_part_editable": true,
          "fqdn_changeable": false
        },
        "byo_routing": {
          "mismatch": true,
          "provider": "string",
          "bypassing_domains": [
            "string"
          ],
          "message": "string"
        },
        "subscribed_contacts_count": 0,
        "logo_url": "https://example.com",
        "screenshot_url": "https://example.com",
        "capabilities": {},
        "sms_provisioned": true,
        "created_at": "2024-01-15T09:30:00Z",
        "updated_at": "2024-01-15T09:30:00Z"
      }
    ],
    "team": {
      "seat_limit": 0,
      "seat_count": 0,
      "member_count": 0,
      "invite_count": 0,
      "current_role": "string",
      "can_manage_team": true
    },
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  },
  "memberships": [
    {
      "id": 0,
      "role": "member",
      "user_id": 0,
      "email": "user@example.com",
      "name": "string",
      "created_at": "2024-01-15T09:30:00Z",
      "updated_at": "2024-01-15T09:30:00Z"
    }
  ],
  "invites": [
    {
      "id": 0,
      "account_id": 0,
      "email": "user@example.com",
      "role": "member",
      "token": "string",
      "status": "pending",
      "accepted_at": "2024-01-15T09:30:00Z",
      "revoked_at": "2024-01-15T09:30:00Z",
      "expires_at": "2024-01-15T09:30:00Z",
      "created_at": "2024-01-15T09:30:00Z",
      "updated_at": "2024-01-15T09:30:00Z"
    }
  ],
  "accessible_accounts": [
    {
      "id": 0,
      "name": "string",
      "avatar": "string",
      "banner": "string",
      "commercial_tier": "unsubscribed",
      "safe_mode_enabled": true,
      "access": {
        "source": "owner",
        "delegated": true,
        "manager_account_id": 0,
        "manager_account_name": "string",
        "management_grant_id": 0,
        "permission_set": "operator_v1",
        "credential_type": "management"
      },
      "billing": {
        "access_policy": "free_allowed",
        "plan_name": "string",
        "plan": {
          "id": 0,
          "name": "string",
          "active": true,
          "probation_recipient_cap_24h": 0,
          "standard_recipient_cap_24h": 0,
          "trusted_recipient_cap_24h": 0,
          "entitlements": {
            "agent_inbox": {
              "enabled": true,
              "max_inboxes": 0,
              "inbound_messages_included": 0,
              "inbound_messages_metered": true,
              "inbound_message_overage_rate_cents": "string",
              "max_inbound_domains": 0,
              "max_apex_domains": 0,
              "apex_mx": true,
              "legacy_forwarding": true,
              "catch_all": true,
              "retention_days": 0,
              "advanced_queue_controls": true
            }
          }
        },
        "spend_cap_monthly_cents": 0,
        "comped": true,
        "overage": {},
        "entitlements": {
          "agent_inbox": {
            "enabled": true,
            "max_inboxes": 0,
            "inbound_messages_included": 0,
            "inbound_messages_metered": true,
            "inbound_message_overage_rate_cents": "string",
            "max_inbound_domains": 0,
            "max_apex_domains": 0,
            "apex_mx": true,
            "legacy_forwarding": true,
            "catch_all": true,
            "retention_days": 0,
            "advanced_queue_controls": true
          }
        },
        "resources": {
          "email": {
            "used": 0,
            "allowance": 0,
            "remaining": 0,
            "overage_rate": 0,
            "mode": "budget",
            "budget": 0,
            "budget_used": 0
          },
          "sms": {
            "used": 0,
            "allowance": 0,
            "remaining": 0,
            "overage_rate": 0,
            "mode": "budget",
            "budget": 0,
            "budget_used": 0
          },
          "ai": {
            "used": 0,
            "allowance": 0,
            "remaining": 0,
            "overage_rate": 0,
            "mode": "budget",
            "budget": 0,
            "budget_used": 0
          }
        },
        "funding": {},
        "provider_route": {},
        "brands": {
          "used": 0,
          "limit": 0,
          "remaining": 0,
          "unlimited": true,
          "can_create": true
        },
        "lifetime": {
          "email_sent": 0,
          "sms_sent": 0,
          "ai_used": 0
        }
      },
      "brands": [
        {
          "id": 0,
          "sid": "string",
          "account_id": 0,
          "brand_color": "string",
          "text_color": "string",
          "bg_color": "string",
          "radius": 0,
          "spacing_density": "compact",
          "font_heading": "string",
          "font_body": "string",
          "heading_size": 12,
          "body_size": 12,
          "brand_document": "string",
          "company_description": "string",
          "default_header": {},
          "default_footer": {},
          "default_theme": {},
          "physical_address": "string",
          "company_name": "string",
          "source_url": "string",
          "last_scraped_at": "2024-01-15T09:30:00Z",
          "links": [
            {
              "url": "string",
              "icon": "string",
              "title": "string"
            }
          ],
          "logo": "string",
          "complete": true,
          "email_from_name": "string",
          "email_from_email": "string",
          "email_reply_to": "string",
          "from_email_domain_status": "blank",
          "effective_from_email": "user@example.com",
          "effective_reply_to": "user@example.com",
          "effective_sending_domain": "string",
          "effective_source_email": "user@example.com",
          "sender_configured": true,
          "email_view_online": true,
          "test_email_recipients": [
            "user@example.com"
          ],
          "onboarding_state": {},
          "onboarding": {
            "steps": {},
            "progress": {
              "completed": 0,
              "total": 0
            }
          },
          "domain_verified": true,
          "can_send": true,
          "brand_subdomain": {
            "namespace_status": "unreserved",
            "status": "brand_identity_required",
            "ready": true,
            "selected": true,
            "preparation_required": true,
            "from_email": "user@example.com",
            "fqdn": "string",
            "apex": "string",
            "local_part": "string",
            "local_part_editable": true,
            "fqdn_changeable": false
          },
          "byo_routing": {
            "mismatch": true,
            "provider": "string",
            "bypassing_domains": [
              "string"
            ],
            "message": "string"
          },
          "subscribed_contacts_count": 0,
          "logo_url": "https://example.com",
          "screenshot_url": "https://example.com",
          "capabilities": {},
          "sms_provisioned": true,
          "created_at": "2024-01-15T09:30:00Z",
          "updated_at": "2024-01-15T09:30:00Z"
        }
      ],
      "team": {
        "seat_limit": 0,
        "seat_count": 0,
        "member_count": 0,
        "invite_count": 0,
        "current_role": "string",
        "can_manage_team": true
      },
      "created_at": "2024-01-15T09:30:00Z",
      "updated_at": "2024-01-15T09:30:00Z"
    }
  ]
}

List account memberships (paginated)

GET
https://api.nitrosend.com/v1/my/account/memberships

Parameters

pageinteger1query
perinteger<= 100100query

Response

200OKArray<AccountMembership>

Memberships

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

List account memberships (paginated)
curl -X GET 'https://api.nitrosend.com/v1/my/account/memberships'
const response = await fetch('https://api.nitrosend.com/v1/my/account/memberships', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/account/memberships')
data = response.json()
200
[
  {
    "id": 0,
    "role": "member",
    "user_id": 0,
    "email": "user@example.com",
    "name": "string",
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  }
]

Remove a membership

DELETE
https://api.nitrosend.com/v1/my/account/memberships/{id}

Parameters

idintegerrequiredpath

Response

200OKAccountMembership

Removed membership

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Remove a membership
curl -X DELETE 'https://api.nitrosend.com/v1/my/account/memberships/{id}'
const response = await fetch('https://api.nitrosend.com/v1/my/account/memberships/{id}', {
  method: 'DELETE',
});

const data = await response.json();
import requests

response = requests.delete('https://api.nitrosend.com/v1/my/account/memberships/{id}')
data = response.json()
200
{
  "id": 0,
  "role": "member",
  "user_id": 0,
  "email": "user@example.com",
  "name": "string",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}

Update a membership role

PATCH
https://api.nitrosend.com/v1/my/account/memberships/{id}

Body

application/json
rolestringmemberadmin

Parameters

idintegerrequiredpath

Response

200OKAccountMembership

Updated membership

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Update a membership role
curl -X PATCH 'https://api.nitrosend.com/v1/my/account/memberships/{id}' \
  -H 'Content-Type: application/json' \
  -d '{
    "role": "member"
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/account/memberships/{id}', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "role": "member"
    }),
});

const data = await response.json();
import requests

payload = {
  "role": "member"
}

response = requests.patch('https://api.nitrosend.com/v1/my/account/memberships/{id}', json=payload)
data = response.json()
Request Body
{
  "role": "member"
}
{
  "id": 0,
  "role": "member",
  "user_id": 0,
  "email": "user@example.com",
  "name": "string",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

List account invites (paginated)

GET
https://api.nitrosend.com/v1/my/account/invites

Parameters

pageinteger1query
perinteger<= 100100query

Response

200OKArray<AccountInvite>

Invites

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

List account invites (paginated)
curl -X GET 'https://api.nitrosend.com/v1/my/account/invites'
const response = await fetch('https://api.nitrosend.com/v1/my/account/invites', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/account/invites')
data = response.json()
200
[
  {
    "id": 0,
    "account_id": 0,
    "email": "user@example.com",
    "role": "member",
    "token": "string",
    "status": "pending",
    "accepted_at": "2024-01-15T09:30:00Z",
    "revoked_at": "2024-01-15T09:30:00Z",
    "expires_at": "2024-01-15T09:30:00Z",
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  }
]

Create an account invite

POST
https://api.nitrosend.com/v1/my/account/invites

Body

application/json
emailstring<email>required
rolestringmemberadmin

Response

201CreatedAccountInvite

Created invite

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Create an account invite
curl -X POST 'https://api.nitrosend.com/v1/my/account/invites' \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "user@example.com",
    "role": "member"
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/account/invites', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "email": "user@example.com",
      "role": "member"
    }),
});

const data = await response.json();
import requests

payload = {
  "email": "user@example.com",
  "role": "member"
}

response = requests.post('https://api.nitrosend.com/v1/my/account/invites', json=payload)
data = response.json()
Request Body
{
  "email": "user@example.com",
  "role": "member"
}
{
  "id": 0,
  "account_id": 0,
  "email": "user@example.com",
  "role": "member",
  "token": "string",
  "status": "pending",
  "accepted_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "expires_at": "2024-01-15T09:30:00Z",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Revoke an invite

DELETE
https://api.nitrosend.com/v1/my/account/invites/{id}

Parameters

idintegerrequiredpath

Response

200OKAccountInvite

Revoked invite

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Revoke an invite
curl -X DELETE 'https://api.nitrosend.com/v1/my/account/invites/{id}'
const response = await fetch('https://api.nitrosend.com/v1/my/account/invites/{id}', {
  method: 'DELETE',
});

const data = await response.json();
import requests

response = requests.delete('https://api.nitrosend.com/v1/my/account/invites/{id}')
data = response.json()
200
{
  "id": 0,
  "account_id": 0,
  "email": "user@example.com",
  "role": "member",
  "token": "string",
  "status": "pending",
  "accepted_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "expires_at": "2024-01-15T09:30:00Z",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}

Accept an invite token

POST
https://api.nitrosend.com/v1/my/account/invites/{id}/accept

Parameters

idstringrequiredpath

Response

200OKAccountInvite

Accepted invite

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Accept an invite token
curl -X POST 'https://api.nitrosend.com/v1/my/account/invites/{id}/accept'
const response = await fetch('https://api.nitrosend.com/v1/my/account/invites/{id}/accept', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/my/account/invites/{id}/accept')
data = response.json()
{
  "id": 0,
  "account_id": 0,
  "email": "user@example.com",
  "role": "member",
  "token": "string",
  "status": "pending",
  "accepted_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "expires_at": "2024-01-15T09:30:00Z",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Affiliate Center

Entitled affiliate link, standing, and lifetime performance

Get the current account's Affiliate Center

GET
https://api.nitrosend.com/v1/my/affiliate

Session/JWT only. API keys are rejected. For an entitled account that is not linked locally, the first read starts one background reconciliation. That reconciliation links an existing Rewardful affiliate by the account owner's email or creates one when absent.

Response

200OKAffiliateCenterPayload

Affiliate Center payload or temporary setup state

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get the current account's Affiliate Center
curl -X GET 'https://api.nitrosend.com/v1/my/affiliate'
const response = await fetch('https://api.nitrosend.com/v1/my/affiliate', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/affiliate')
data = response.json()
{
  "enrolled": true,
  "available": true,
  "state": "active",
  "setup_status": "pending",
  "share_url": "https://example.com",
  "stats": {
    "visitors": 0,
    "leads": 0,
    "conversions": 0
  },
  "earnings": {
    "known": true,
    "total_cents": 0,
    "currency": "string"
  }
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Reconcile the current account's affiliate immediately

POST
https://api.nitrosend.com/v1/my/affiliate

Session/JWT-only repair path. This is idempotent and uses the same existing-or-create behavior as background reconciliation.

Body

application/json
first_namestring
last_namestring

Response

200OKAffiliateCenterPayload

Existing or already-linked affiliate

201CreatedAffiliateCenterPayload

Affiliate identity linked to the account

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

422Unprocessable EntityError & object

Validation failed

503Service UnavailableError

Upstream service unavailable

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Reconcile the current account's affiliate immediately
curl -X POST 'https://api.nitrosend.com/v1/my/affiliate' \
  -H 'Content-Type: application/json' \
  -d '{
    "first_name": "string",
    "last_name": "string"
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/affiliate', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "first_name": "string",
      "last_name": "string"
    }),
});

const data = await response.json();
import requests

payload = {
  "first_name": "string",
  "last_name": "string"
}

response = requests.post('https://api.nitrosend.com/v1/my/affiliate', json=payload)
data = response.json()
Request Body
{
  "first_name": "string",
  "last_name": "string"
}
{
  "enrolled": true,
  "available": true,
  "state": "active",
  "setup_status": "pending",
  "share_url": "https://example.com",
  "stats": {
    "visitors": 0,
    "leads": 0,
    "conversions": 0
  },
  "earnings": {
    "known": true,
    "total_cents": 0,
    "currency": "string"
  }
}
{
  "enrolled": true,
  "available": true,
  "state": "active",
  "setup_status": "pending",
  "share_url": "https://example.com",
  "stats": {
    "visitors": 0,
    "leads": 0,
    "conversions": 0
  },
  "earnings": {
    "known": true,
    "total_cents": 0,
    "currency": "string"
  }
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Managed Clients

Explicitly enabled client provisioning, consent, and portfolio operations

List the selected manager account's client portfolio

GET
https://api.nitrosend.com/v1/my/managed_accounts

Parameters

pageinteger1query
perinteger<= 10025query
qstringquery
statusManagedAccountLifecycleStatusFilterquery

Use needs_setup to group preparing, awaiting owner, payment required, and payment issue rows.

sortstringcreated_atnameowner_emailstatuscreated_atquery
directionstringascdescdescquery

Response

200OKArray<ManagedAccountProvisioning>

Bounded managed-client portfolio

403ForbiddenError

Not authorized

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

List the selected manager account's client portfolio
curl -X GET 'https://api.nitrosend.com/v1/my/managed_accounts'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/managed_accounts')
data = response.json()
[
  {
    "id": 0,
    "external_ref": "string",
    "source": "dashboard",
    "status": "preparing",
    "permission_set": "operator_v1",
    "allowed_actions": [
      "send_invitation"
    ],
    "managed_account": {
      "id": 0,
      "name": "string"
    },
    "owner": {
      "email": "user@example.com"
    },
    "invitation": {
      "expired": true,
      "expires_at": "2024-01-15T09:30:00Z",
      "deadline_at": "2024-01-15T09:30:00Z",
      "notice_sent_at": "2024-01-15T09:30:00Z",
      "claimed_at": "2024-01-15T09:30:00Z",
      "reissues_remaining": 0
    },
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  }
]
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Provision a paid-required, client-owned account

POST
https://api.nitrosend.com/v1/my/managed_accounts

Body

application/json
managed_accountobjectrequired
Show child attributes
owner_emailstring<email>required
owner_first_namestring
owner_last_namestring
account_namestringrequired

Parameters

Idempotency-Keystringrequiredheader

Exact-request idempotency key; changed normalized input conflicts.

Response

200OKManagedAccountProvisioning & object

Exact idempotent replay

201CreatedManagedAccountProvisioning & object

Client provisioned in preparing state; no owner invitation has been sent

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Provision a paid-required, client-owned account
curl -X POST 'https://api.nitrosend.com/v1/my/managed_accounts' \
  -H 'Content-Type: application/json' \
  -d '{
    "managed_account": {
      "owner_email": "user@example.com",
      "owner_first_name": "string",
      "owner_last_name": "string",
      "account_name": "string"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "managed_account": {
        "owner_email": "user@example.com",
        "owner_first_name": "string",
        "owner_last_name": "string",
        "account_name": "string"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "managed_account": {
    "owner_email": "user@example.com",
    "owner_first_name": "string",
    "owner_last_name": "string",
    "account_name": "string"
  }
}

response = requests.post('https://api.nitrosend.com/v1/my/managed_accounts', json=payload)
data = response.json()
Request Body
{
  "managed_account": {
    "owner_email": "user@example.com",
    "owner_first_name": "string",
    "owner_last_name": "string",
    "account_name": "string"
  }
}
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "idempotent_replay": true
}
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "idempotent_replay": true
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Get one managed-client portfolio row

GET
https://api.nitrosend.com/v1/my/managed_accounts/{id}

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Managed-client portfolio row

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Get one managed-client portfolio row
curl -X GET 'https://api.nitrosend.com/v1/my/managed_accounts/{id}'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts/{id}', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/managed_accounts/{id}')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Invalidate the prior invitation and queue a bounded replacement for owner-only delivery

POST
https://api.nitrosend.com/v1/my/managed_accounts/{id}/resend_invitation

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Updated portfolio row; no invitation capability is returned

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Invalidate the prior invitation and queue a bounded replacement for owner-only delivery
curl -X POST 'https://api.nitrosend.com/v1/my/managed_accounts/{id}/resend_invitation'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts/{id}/resend_invitation', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/my/managed_accounts/{id}/resend_invitation')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Queue the first bounded owner invitation after client setup is ready

POST
https://api.nitrosend.com/v1/my/managed_accounts/{id}/send_invitation

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Updated portfolio row; no invitation capability is returned

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Queue the first bounded owner invitation after client setup is ready
curl -X POST 'https://api.nitrosend.com/v1/my/managed_accounts/{id}/send_invitation'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts/{id}/send_invitation', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/my/managed_accounts/{id}/send_invitation')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Queue a cooldown-bound payment reminder to the owner

POST
https://api.nitrosend.com/v1/my/managed_accounts/{id}/payment_reminder

Parameters

idintegerrequiredpath

Response

204No Content

Reminder accepted for delivery

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Queue a cooldown-bound payment reminder to the owner
curl -X POST 'https://api.nitrosend.com/v1/my/managed_accounts/{id}/payment_reminder'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts/{id}/payment_reminder', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/my/managed_accounts/{id}/payment_reminder')
data = response.json()
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

End the selected manager's relationship with the client

POST
https://api.nitrosend.com/v1/my/managed_accounts/{id}/release

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Ended managed-client relationship

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

End the selected manager's relationship with the client
curl -X POST 'https://api.nitrosend.com/v1/my/managed_accounts/{id}/release'
const response = await fetch('https://api.nitrosend.com/v1/my/managed_accounts/{id}/release', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/my/managed_accounts/{id}/release')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

List non-secret provisioning credential metadata

GET
https://api.nitrosend.com/v1/my/account/provisioning_credentials

Response

200OKArray<AccountProvisioningCredential>

Provisioning credential metadata

403ForbiddenError

Not authorized

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

List non-secret provisioning credential metadata
curl -X GET 'https://api.nitrosend.com/v1/my/account/provisioning_credentials'
const response = await fetch('https://api.nitrosend.com/v1/my/account/provisioning_credentials', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/my/account/provisioning_credentials')
data = response.json()
[
  {
    "id": 0,
    "name": "string",
    "scopes": [
      "provision"
    ],
    "secret_hint": "string",
    "expires_at": "2024-01-15T09:30:00Z",
    "last_used_at": "2024-01-15T09:30:00Z",
    "revoked_at": "2024-01-15T09:30:00Z",
    "created_at": "2024-01-15T09:30:00Z"
  }
]
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Issue a provisioning credential and reveal its secret once

POST
https://api.nitrosend.com/v1/my/account/provisioning_credentials

Body

application/json
credentialobjectrequired
Show child attributes
namestringrequired
scopesArray<string>provisionmanagerequired
expires_atstring<date-time>

Response

201CreatedAccountProvisioningCredential & object

One-time credential result

403ForbiddenError

Not authorized

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Issue a provisioning credential and reveal its secret once
curl -X POST 'https://api.nitrosend.com/v1/my/account/provisioning_credentials' \
  -H 'Content-Type: application/json' \
  -d '{
    "credential": {
      "name": "string",
      "scopes": [
        "provision"
      ],
      "expires_at": "2024-01-15T09:30:00Z"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/my/account/provisioning_credentials', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "credential": {
        "name": "string",
        "scopes": [
          "provision"
        ],
        "expires_at": "2024-01-15T09:30:00Z"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "credential": {
    "name": "string",
    "scopes": [
      "provision"
    ],
    "expires_at": "2024-01-15T09:30:00Z"
  }
}

response = requests.post('https://api.nitrosend.com/v1/my/account/provisioning_credentials', json=payload)
data = response.json()
Request Body
{
  "credential": {
    "name": "string",
    "scopes": [
      "provision"
    ],
    "expires_at": "2024-01-15T09:30:00Z"
  }
}
{
  "id": 0,
  "name": "string",
  "scopes": [
    "provision"
  ],
  "secret_hint": "string",
  "expires_at": "2024-01-15T09:30:00Z",
  "last_used_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "created_at": "2024-01-15T09:30:00Z",
  "secret": "string"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Revoke one manager-bound provisioning credential

DELETE
https://api.nitrosend.com/v1/my/account/provisioning_credentials/{id}

Parameters

idintegerrequiredpath

Response

200OKAccountProvisioningCredential

Revoked credential metadata

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Revoke one manager-bound provisioning credential
curl -X DELETE 'https://api.nitrosend.com/v1/my/account/provisioning_credentials/{id}'
const response = await fetch('https://api.nitrosend.com/v1/my/account/provisioning_credentials/{id}', {
  method: 'DELETE',
});

const data = await response.json();
import requests

response = requests.delete('https://api.nitrosend.com/v1/my/account/provisioning_credentials/{id}')
data = response.json()
{
  "id": 0,
  "name": "string",
  "scopes": [
    "provision"
  ],
  "secret_hint": "string",
  "expires_at": "2024-01-15T09:30:00Z",
  "last_used_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "created_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Inspect a bounded owner consent capability

POST
https://api.nitrosend.com/v1/managed_account_claims/inspect

Body

application/json
claimobjectrequired
Show child attributes
tokenstringrequiredwrite only

Response

200OKManagedAccountClaimInspection

Bounded claim projection

410GoneError

One-time capability is invalid, expired, rotated, or consumed

Inspect a bounded owner consent capability
curl -X POST 'https://api.nitrosend.com/v1/managed_account_claims/inspect' \
  -H 'Content-Type: application/json' \
  -d '{
    "claim": {
      "token": "string"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/managed_account_claims/inspect', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "claim": {
        "token": "string"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "claim": {
    "token": "string"
  }
}

response = requests.post('https://api.nitrosend.com/v1/managed_account_claims/inspect', json=payload)
data = response.json()
Request Body
{
  "claim": {
    "token": "string"
  }
}
{
  "manager": {
    "name": "string"
  },
  "managed_account": {
    "name": "string"
  },
  "owner_email": "string",
  "expires_at": "2024-01-15T09:30:00Z",
  "authentication": "login_required"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Record one-time consent for the exact authenticated owner

POST
https://api.nitrosend.com/v1/managed_account_claims/complete

Body

application/json
claimobjectrequired
Show child attributes
tokenstringrequiredwrite only

Response

200OKManagedAccountClaimCompletion

Consent recorded; status remains payment_required until paid activation

403ForbiddenError

Not authorized

410GoneError

One-time capability is invalid, expired, rotated, or consumed

422Unprocessable EntityError & object

Validation failed

Authorization

BearerAuthhttp (bearer)

Authentication scheme depends on the route:

  • Authenticated endpoints (/v1/my/*) accept a server API key (nskey_live_...), a Nitrosend JWT, or a verified Shopify App Bridge ID token for an active embedded installation. API key is checked first.
  • Public website-form endpoints (/v1/public/*) require a brand public key (wpkey_live_...). Secret keys (nskey_live_...) are rejected here so they can't be smuggled into browser code.

For accounts with multiple brands, include the X-Brand-SID header to scope requests to a specific brand. If omitted, the account's default brand is used. JWT requests can also include X-Account-ID to select an accessible account.

Record one-time consent for the exact authenticated owner
curl -X POST 'https://api.nitrosend.com/v1/managed_account_claims/complete' \
  -H 'Content-Type: application/json' \
  -d '{
    "claim": {
      "token": "string"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/managed_account_claims/complete', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "claim": {
        "token": "string"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "claim": {
    "token": "string"
  }
}

response = requests.post('https://api.nitrosend.com/v1/managed_account_claims/complete', json=payload)
data = response.json()
Request Body
{
  "claim": {
    "token": "string"
  }
}
{
  "claimed": true,
  "status": "payment_required",
  "managed_account": {
    "id": 0,
    "name": "string"
  }
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Partner

Provisioning-credential authenticated managed-client operations

List managed clients using a manager-bound credential

GET
https://api.nitrosend.com/v1/partner/managed_accounts

Response

200OKArray<ManagedAccountProvisioning>

Managed-client portfolio

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

List managed clients using a manager-bound credential
curl -X GET 'https://api.nitrosend.com/v1/partner/managed_accounts'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/partner/managed_accounts')
data = response.json()
[
  {
    "id": 0,
    "external_ref": "string",
    "source": "dashboard",
    "status": "preparing",
    "permission_set": "operator_v1",
    "allowed_actions": [
      "send_invitation"
    ],
    "managed_account": {
      "id": 0,
      "name": "string"
    },
    "owner": {
      "email": "user@example.com"
    },
    "invitation": {
      "expired": true,
      "expires_at": "2024-01-15T09:30:00Z",
      "deadline_at": "2024-01-15T09:30:00Z",
      "notice_sent_at": "2024-01-15T09:30:00Z",
      "claimed_at": "2024-01-15T09:30:00Z",
      "reissues_remaining": 0
    },
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  }
]
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Provision a paid-required client-owned account

POST
https://api.nitrosend.com/v1/partner/managed_accounts

Body

application/json
managed_accountobjectrequired
Show child attributes
external_refstringrequired
owner_emailstring<email>required
owner_first_namestring
owner_last_namestring
account_namestringrequired

Parameters

Idempotency-Keystringrequiredheader

Exact-request idempotency key; changed normalized input conflicts.

Response

200OKManagedAccountProvisioning & object

Exact idempotent replay

201CreatedManagedAccountProvisioning & object

Client provisioned in preparing state; no owner invitation has been sent

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

422Unprocessable EntityError & object

Validation failed

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

Provision a paid-required client-owned account
curl -X POST 'https://api.nitrosend.com/v1/partner/managed_accounts' \
  -H 'Content-Type: application/json' \
  -d '{
    "managed_account": {
      "external_ref": "string",
      "owner_email": "user@example.com",
      "owner_first_name": "string",
      "owner_last_name": "string",
      "account_name": "string"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "managed_account": {
        "external_ref": "string",
        "owner_email": "user@example.com",
        "owner_first_name": "string",
        "owner_last_name": "string",
        "account_name": "string"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "managed_account": {
    "external_ref": "string",
    "owner_email": "user@example.com",
    "owner_first_name": "string",
    "owner_last_name": "string",
    "account_name": "string"
  }
}

response = requests.post('https://api.nitrosend.com/v1/partner/managed_accounts', json=payload)
data = response.json()
Request Body
{
  "managed_account": {
    "external_ref": "string",
    "owner_email": "user@example.com",
    "owner_first_name": "string",
    "owner_last_name": "string",
    "account_name": "string"
  }
}
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "idempotent_replay": true
}
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "idempotent_replay": true
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Get one manager-scoped portfolio row

GET
https://api.nitrosend.com/v1/partner/managed_accounts/{id}

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Managed-client portfolio row

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

Get one manager-scoped portfolio row
curl -X GET 'https://api.nitrosend.com/v1/partner/managed_accounts/{id}'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts/{id}', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/partner/managed_accounts/{id}')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Invalidate the prior invitation and queue a bounded replacement for owner-only delivery

POST
https://api.nitrosend.com/v1/partner/managed_accounts/{id}/resend_invitation

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Updated portfolio row; no invitation capability is returned

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

Invalidate the prior invitation and queue a bounded replacement for owner-only delivery
curl -X POST 'https://api.nitrosend.com/v1/partner/managed_accounts/{id}/resend_invitation'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts/{id}/resend_invitation', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/partner/managed_accounts/{id}/resend_invitation')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Queue the first bounded owner invitation after client setup is ready

POST
https://api.nitrosend.com/v1/partner/managed_accounts/{id}/send_invitation

Parameters

idintegerrequiredpath

Response

200OKManagedAccountProvisioning

Updated portfolio row; no invitation capability is returned

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

409ConflictError

Request conflicts with durable lifecycle or idempotency state

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

Queue the first bounded owner invitation after client setup is ready
curl -X POST 'https://api.nitrosend.com/v1/partner/managed_accounts/{id}/send_invitation'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts/{id}/send_invitation', {
  method: 'POST',
});

const data = await response.json();
import requests

response = requests.post('https://api.nitrosend.com/v1/partner/managed_accounts/{id}/send_invitation')
data = response.json()
{
  "id": 0,
  "external_ref": "string",
  "source": "dashboard",
  "status": "preparing",
  "permission_set": "operator_v1",
  "allowed_actions": [
    "send_invitation"
  ],
  "managed_account": {
    "id": 0,
    "name": "string"
  },
  "owner": {
    "email": "user@example.com"
  },
  "invitation": {
    "expired": true,
    "expires_at": "2024-01-15T09:30:00Z",
    "deadline_at": "2024-01-15T09:30:00Z",
    "notice_sent_at": "2024-01-15T09:30:00Z",
    "claimed_at": "2024-01-15T09:30:00Z",
    "reissues_remaining": 0
  },
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

List non-secret agent credential metadata for one managed client

GET
https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials

Parameters

provisioning_idintegerrequiredpath

Manager-scoped provisioning row id.

Response

200OKArray<AccountManagementCredential>

Agent credential metadata; plaintext secrets are never listed

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

List non-secret agent credential metadata for one managed client
curl -X GET 'https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials')
data = response.json()
[
  {
    "id": 0,
    "account_management_grant_id": 0,
    "name": "string",
    "permission_set": "operator_v1",
    "secret_hint": "string",
    "expires_at": "2024-01-15T09:30:00Z",
    "last_used_at": "2024-01-15T09:30:00Z",
    "revoked_at": "2024-01-15T09:30:00Z",
    "created_at": "2024-01-15T09:30:00Z",
    "brand": {
      "id": 0,
      "sid": "string",
      "name": "string"
    }
  }
]
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}

Issue one grant- and Brand-pinned agent credential

POST
https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials

Body

application/json
credentialobjectrequired
Show child attributes
namestringrequired
brand_sidstring

Defaults to the managed Account's default Brand.

expires_atstring<date-time>

Defaults to 90 days and cannot exceed one year.

Parameters

provisioning_idintegerrequiredpath

Manager-scoped provisioning row id.

Response

201CreatedAccountManagementCredential & object

One-time credential result; the secret cannot be recovered

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

409ConflictError

Request conflicts with durable lifecycle or idempotency state

422Unprocessable EntityError & object

Validation failed

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.

Issue one grant- and Brand-pinned agent credential
curl -X POST 'https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials' \
  -H 'Content-Type: application/json' \
  -d '{
    "credential": {
      "name": "string",
      "brand_sid": "string",
      "expires_at": "2024-01-15T09:30:00Z"
    }
  }'
const response = await fetch('https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "credential": {
        "name": "string",
        "brand_sid": "string",
        "expires_at": "2024-01-15T09:30:00Z"
      }
    }),
});

const data = await response.json();
import requests

payload = {
  "credential": {
    "name": "string",
    "brand_sid": "string",
    "expires_at": "2024-01-15T09:30:00Z"
  }
}

response = requests.post('https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials', json=payload)
data = response.json()
Request Body
{
  "credential": {
    "name": "string",
    "brand_sid": "string",
    "expires_at": "2024-01-15T09:30:00Z"
  }
}
{
  "id": 0,
  "account_management_grant_id": 0,
  "name": "string",
  "permission_set": "operator_v1",
  "secret_hint": "string",
  "expires_at": "2024-01-15T09:30:00Z",
  "last_used_at": "2024-01-15T09:30:00Z",
  "revoked_at": "2024-01-15T09:30:00Z",
  "created_at": "2024-01-15T09:30:00Z",
  "brand": {
    "id": 0,
    "sid": "string",
    "name": "string"
  },
  "secret": "string"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z"
}
{
  "capacity_recovery": {
    "state": "approaching",
    "reason_code": "sending_capacity_warning",
    "blocking_control": "commercial_capacity",
    "usage_percent": 0,
    "requested_quantity": 0,
    "label": "string",
    "detail": "string",
    "capacity": {
      "source": "plan",
      "window_seconds": 86400,
      "status": "known",
      "limit": 0,
      "reserved": 0,
      "accepted": 0,
      "provider_unknown": 0,
      "remaining": 0
    },
    "upgrade_url": "https://example.com",
    "retry_at": "2024-01-15T09:30:00Z",
    "recovery_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    },
    "recovery_actions": [
      {
        "type": "upgrade_plan",
        "label": "string",
        "detail": "string",
        "url": "https://example.com",
        "required_role": "account_owner_or_admin"
      }
    ],
    "owner_action": {
      "type": "upgrade_plan",
      "label": "string",
      "detail": "string",
      "url": "https://example.com",
      "required_role": "account_owner_or_admin"
    }
  },
  "recovery_action": {},
  "code": 0,
  "message": "string",
  "error": true,
  "error_code": "string",
  "provisioning_id": 0,
  "retryable": true,
  "retry_at": "2024-01-15T09:30:00Z",
  "validation_errors": {}
}

Revoke one agent credential immediately

DELETE
https://api.nitrosend.com/v1/partner/managed_accounts/{provisioning_id}/credentials/{id}

Parameters

provisioning_idintegerrequiredpath

Manager-scoped provisioning row id.

idintegerrequiredpath

Response

200OKAccountManagementCredential

Revoked credential metadata

401UnauthorizedError

Not authenticated

403ForbiddenError

Not authorized

404Not FoundError

Resource not found

Authorization

PartnerProvisioningCredentialhttp (bearer)

Manager-account provisioning credential revealed once at issuance.