Nitrosend API
v1.1.4https://api.nitrosend.comProductionhttp://localhost:8000Local developmentMulti-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:
- API Key —
Authorization: Bearer nskey_live_... - JWT —
Authorization: Bearer <jwt>(obtained fromPOST /v1/login) - Shopify ID token — supplied by App Bridge for an installed embedded app
Pagination
Paginated endpoints return these headers:
X-Total-Count— total recordsX-Total-Pages— total pagesX-Page-Number— current pageX-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
BearerAuthhttpAuthentication 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
PartnerProvisioningCredentialhttpManager-account provisioning credential revealed once at issuance.
Scheme: bearer (nspk_live)
ManagementCredentialhttpOne-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
Body
userobjectrequiredResponse
Account created
Validation failed
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(){
"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
Body
userobjectrequiredResponse
Signed in
Not authenticated
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(){
"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
Response
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.
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
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
Popup context
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.
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
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
plan_idintegerrequiredaccount_idinteger | nullstripe_tokenstring | nullResponse
Popup can continue to consent
Not authenticated
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.
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(){
"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
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
providerstringgoogle_oauth2githubrequiredauth_intentstringappagentappauth_stepstringloginsignuploginresume_urlstring<uri> | nullRequired when auth_intent=agent; must point to the frontend /oauth/connect route.
Response
Launch URL created
Invalid provider or resume 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(){
"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
Response
User profile
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.
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
Body
first_namestringlast_namestringemailstring | Array<string>mobilestringtime_zonestring | nullResponse
Updated user
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.
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(){
"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
Response
Current impersonation state
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.
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
Response
Impersonation session revoked
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.
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
Response
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.
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(){
"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
Body
namestringavatarstringSigned blob ID
bannerstringSigned blob ID
Response
Updated account
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.
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(){
"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)
Parameters
pageinteger1queryperinteger<= 100100queryResponse
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.
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()[
{
"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
Only the canonical owner of the selected managed account may use this endpoint.
Response
Current management grant
Not authorized
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.
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
This endpoint cannot record owner consent or bypass paid activation.
Body
management_grant_idintegerrequiredExact grant returned by the show endpoint; prevents a stale command from targeting a replacement grant.
Response
Active management grant
Bad request
Not authorized
Resource not found
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.
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(){
"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
Revocation takes effect on the next REST or MCP request and is idempotent for the exact grant.
Body
management_grant_idintegerrequiredExact grant returned by the show endpoint; prevents a stale command from targeting a replacement grant.
Response
Revoked management grant
Bad request
Not authorized
Resource not found
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.
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(){
"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
Response
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.
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(){
"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)
Parameters
pageinteger1queryperinteger<= 100100queryResponse
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.
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()[
{
"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
Parameters
idintegerrequiredpathResponse
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.
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(){
"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
Body
rolestringmemberadminParameters
idintegerrequiredpathResponse
Updated membership
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.
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(){
"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)
Parameters
pageinteger1queryperinteger<= 100100queryResponse
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.
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()[
{
"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
Body
emailstring<email>requiredrolestringmemberadminResponse
Created invite
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.
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(){
"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
Parameters
idintegerrequiredpathResponse
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.
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(){
"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
Parameters
idstringrequiredpathResponse
Accepted invite
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.
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
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
Affiliate Center payload or temporary setup state
Not authorized
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.
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
Session/JWT-only repair path. This is idempotent and uses the same existing-or-create behavior as background reconciliation.
Body
first_namestringlast_namestringResponse
Existing or already-linked affiliate
Affiliate identity linked to the account
Not authorized
Resource not found
Validation failed
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.
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(){
"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
Parameters
pageinteger1queryperinteger<= 10025queryqstringquerystatusManagedAccountLifecycleStatusFilterqueryUse needs_setup to group preparing, awaiting owner, payment required, and payment issue rows.
sortstringcreated_atnameowner_emailstatuscreated_atquerydirectionstringascdescdescqueryResponse
Bounded managed-client portfolio
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.
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
Body
managed_accountobjectrequiredParameters
Idempotency-KeystringrequiredheaderExact-request idempotency key; changed normalized input conflicts.
Response
Exact idempotent replay
Client provisioned in preparing state; no owner invitation has been sent
Not authorized
Request conflicts with durable lifecycle or idempotency state
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.
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(){
"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
Parameters
idintegerrequiredpathResponse
Managed-client portfolio row
Not authorized
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.
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
Parameters
idintegerrequiredpathResponse
Updated portfolio row; no invitation capability is returned
Not authorized
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.
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
Parameters
idintegerrequiredpathResponse
Updated portfolio row; no invitation capability is returned
Not authorized
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.
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
Parameters
idintegerrequiredpathResponse
Reminder accepted for delivery
Not authorized
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.
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
Parameters
idintegerrequiredpathResponse
Ended managed-client relationship
Not authorized
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.
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
Response
Provisioning credential metadata
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.
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
Body
credentialobjectrequiredResponse
One-time credential result
Not authorized
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.
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(){
"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
Parameters
idintegerrequiredpathResponse
Revoked credential metadata
Not authorized
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.
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
Body
claimobjectrequiredResponse
Bounded claim projection
One-time capability is invalid, expired, rotated, or consumed
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(){
"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
Body
claimobjectrequiredResponse
Consent recorded; status remains payment_required until paid activation
Not authorized
One-time capability is invalid, expired, rotated, or consumed
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.
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(){
"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
Response
Managed-client portfolio
Not authenticated
Not authorized
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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
Body
managed_accountobjectrequiredParameters
Idempotency-KeystringrequiredheaderExact-request idempotency key; changed normalized input conflicts.
Response
Exact idempotent replay
Client provisioned in preparing state; no owner invitation has been sent
Not authenticated
Not authorized
Request conflicts with durable lifecycle or idempotency state
Validation failed
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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(){
"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
Parameters
idintegerrequiredpathResponse
Managed-client portfolio row
Not authenticated
Not authorized
Resource not found
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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
Parameters
idintegerrequiredpathResponse
Updated portfolio row; no invitation capability is returned
Not authenticated
Not authorized
Request conflicts with durable lifecycle or idempotency state
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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
Parameters
idintegerrequiredpathResponse
Updated portfolio row; no invitation capability is returned
Not authenticated
Not authorized
Request conflicts with durable lifecycle or idempotency state
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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
Parameters
provisioning_idintegerrequiredpathManager-scoped provisioning row id.
Response
Agent credential metadata; plaintext secrets are never listed
Not authenticated
Not authorized
Resource not found
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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
Body
credentialobjectrequiredParameters
provisioning_idintegerrequiredpathManager-scoped provisioning row id.
Response
One-time credential result; the secret cannot be recovered
Not authenticated
Not authorized
Resource not found
Request conflicts with durable lifecycle or idempotency state
Validation failed
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.
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(){
"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
Parameters
provisioning_idintegerrequiredpathManager-scoped provisioning row id.
idintegerrequiredpathResponse
Revoked credential metadata
Not authenticated
Not authorized
Resource not found
Authorization
PartnerProvisioningCredentialhttp (bearer)Manager-account provisioning credential revealed once at issuance.