ready. Try Ready →Sign up

#Client accounts

For agencies running one Ready account per customer. Each client account has its own numbers, 10DLC registration, card and balance, and pays for its own texts.

Details

Call these with an rsms_ key from your own account.

Two kinds of sub-account. An independent sub-account (account_kind: "client") pays from its own card and balance. A Workspace in the guides is different: your main account's balance pays for it.

Markup and how you're paid

Markup can't be set anymore: any markup above 0 is refused with 400. Set your clients' prices with partner fees on the Partner page. It's in the Agency view: click your business name in the top bar, then Agency view. A client that already pays a markup keeps paying it, as described below.

Details
  • Price: a client pays your base rate plus your markup per segment (Set a client's markup).
  • Payout: markup goes to your reseller balance, only for texts a client sends after it submits its 10DLC registration. Earlier texts aren't credited later. You earn no affiliate commission on your own clients.

Acting as a client

Add X-Sub-Account-Id: <client id> to any /v1 API-key request to run it as that client: what you create is the client's, and its card and balance pay.

Details

The key can be sent as X-API-Key or Authorization: Bearer. Your own numbers aren't visible while you act as a client. Buy with POST /v1/numbers/checkout, not /phone-numbers/checkout.

Buy a number for a client: POST /v1/numbers/checkout then POST /v1/numbers, both with the header (a payment your own account made also works for the second call). Then poll GET /v1/numbers/:id, with the header, until it's active.

Refusals (nothing runs):

HTTPCodeMeaning
400invalid_sub_account_idNot a numeric id (also 0 or empty).
400sub_account_header_not_supportedPath outside /v1.
400sub_account_header_needs_api_keyNo rsms_ API key.
403sub_account_forbiddenNot a client you manage (including your own id).
403sub_account_suspendedClient suspended.
404sub_account_not_foundNo account has that id.
503AUTH_CHECK_UNAVAILABLECouldn't check. Nothing ran; retry.
GET /v1/numbers as a client
curl "https://api.tryready.com/v1/numbers" \
  -H "X-API-Key: $READY_API_KEY" \
  -H "X-Sub-Account-Id: 4812"

#Create a client account

POST/v1/sub-accounts

Creates a client account with its own login, card, numbers and registration.

  • Auth API key with team management
  • Cost Free

Body parameters

emailstringRequired
The client owner's email.
first_name, last_namestringOptional
company_namestringOptional
send_invitebooleanOptionalDefault true
Emails the client an invite to set up their login and card.
DetailsSend false to skip the email and send them invite_link yourself.
billingstringOptionalDefault client
client: the client adds their own card and pays their own bill. agency: your card pays for the client’s registration, numbers and messages, at your prices.

Returns

dataobject
id (use it as X-Sub-Account-Id), email, company_name, account_kind: "client", client_rate, invite_link.
Detailsclient_rate is what the client pays per segment (your base rate plus your default markup). It's null unless your markup is on and your default markup is above 0.

Errors

HTTPCodeWhen
400invalid_requestMissing email.
400unknown_fieldA field it doesn't accept.
403agency_onlyYour account is another agency's client or workspace.
409client_already_yoursAlready your client.
409email_reservedEmail can't be used (403 for a staff address).

#List client accounts

GET/v1/sub-accounts

The client accounts you manage, newest first. Pages with a cursor.

  • Auth API key with team management
  • Cost Free

Query parameters

limitintegerOptionalDefault 50Max 200
Page size.
before_idintegerOptional
The next_before_id from the previous page.

Returns

data[]object[]
id, email, first_name, last_name, company_name, status, markup_usd_per_segment, created_at.
has_moreboolean
Today it's true on any full page, even if nothing follows. Page until data is empty.
next_before_idinteger | null
Pass as before_id.

Errors

HTTPCodeWhen
403permission_deniedThe key lacks team management (all four endpoints).

#Get a client account

GET/v1/sub-accounts/:id

One client account.

  • Auth API key with team management
  • Cost Free

Path parameters

idintegerRequired
The client account id.

Errors

HTTPCodeWhen
404sub_account_not_foundNot a client you manage.

#Set a client's markup

PUT/v1/sub-accounts/:id/rate

What the client pays you per segment on top of your own rate. Any markup above 0 is refused now; set prices with partner fees on the Partner page, in the Agency view.

  • Auth API key with team management
  • Cost Free

Path parameters

idintegerRequired
The client account id.

Body parameters

markupnumberOptional
Dollars per segment, from 0 to 0.06.
use_defaultbooleanOptional
true to use your default markup instead.
dialer_markup, use_default_dialernumber, booleanOptional
The same, for calls.

Returns

dataobject
markup, is_custom, base_rate (your rate), client_rate (the client's per-segment price).

Errors

HTTPCodeWhen
400invalid_requestNegative markup, or nothing to change.
400unknown_fieldA field it doesn't accept.
400terms_requiredReseller terms not accepted.
400invalid_markupAbove $0.06 a segment.
403reseller_not_approvedMarkup above 0, setup under review.
403forbiddenMarkup above 0 while markup is off, or not your main account.
404sub_account_not_foundNot a client you manage.
409rate_lockedRate locked; contact support.