readyDocs Open the appOpen the app

Registration changes

#Add another campaign

Adds a second campaign with a different use case. Your registration already includes one. Consent is given once, on the brand. No setup fee; billed monthly at your price from submission, first 30 days included. Don’t retry after a timeout: poll GET /v1/registration first. Needs the manage_brands permission.

Parameters

campaign_namestringDefault <business name> Campaign
use_caseenumRequired
One of the use cases, case-insensitive.
brand_idinteger
The brand’s registration_id. Send it when the brand is already approved so the campaign goes straight to review. Without it the campaign waits as awaiting_brand and is filed by itself within about 30 minutes of your account having an approved brand.
campaign_descriptionstring
Leave blank: Ready writes it from your use_case and business name.
Errors
HTTPCodeWhen
400invalid_requestMissing use_case.
400brand_required_firstNo brand yet (one awaiting payment counts).
400invalid_use_casevalid lists them.
409duplicate_use_caseUse case taken (existing_reg_id, existing_campaign_name). The campaign filed with your brand has the brand’s use_case, or MIXED if you sent none.
429duplicate_submissionRepeat within 2 minutes.

#Confirm a payment

After Stripe.js confirms a client_secret, this submits the registration now. Safe to call twice. Needs the manage_brands permission.

Parameters

payment_intent_idstringRequired
The part of client_secret before _secret_.
Errors
HTTPCodeWhen
202payment_processingStill processing; retry shortly.
400payment_intent_id_requiredNo payment_intent_id.
400payment_not_completedPayment failed (status).
403payment_owner_mismatchThe payment is for another registration.
404payment_not_foundNo such payment.
404registration_not_foundPaid, but no registration of yours matches it. Support has been told; don’t pay again.
409payment_refundedThe payment was refunded. Start a new one.
500filing_failedNot filed yet. Retry; you won’t be charged again.
503payment_receipt_unavailable, registration_claim_unconfirmedCouldn’t confirm. Don’t pay again; retry in a minute.
503payment_check_unavailableCouldn’t check the payment. Retry.
503payments_unavailablePayments down. Retry later.

#Resubmit a registration

Resubmits a rejected registration, optionally with corrected fields. Needs the manage_brands permission.

Parameters

idinteger · pathRequired
The rejected registration’s id: the brand.id or campaign.id from GET /v1/registration, not a carrier id.
Idempotency-Keystring · header
Recommended. Resubmitting deregisters and re-registers with the carrier.
fieldsobject
Corrections. Only these keys apply: company_name, dba, ein, website, industry, entity_type, use_cases, campaign_description, street, city, state, zip, email, phone, first_name, last_name, sample_message_1, sample_message_2, optin_text. Others, and empty strings, are ignored. sample_message_1, sample_message_2 and optin_text apply to a campaign only: they are filed in place of the sample messages and opt-in description Ready writes for you. Ready adds your business name and the HELP and STOP line to each sample message. On a US brand, a new company_name or ein is checked against IRS records first; set ein_override to true to submit a brand-new EIN the IRS doesn’t list yet. A brand resubmit is filed with the carriers as a new brand, so any vetting the old brand had does not carry over.
Errors
HTTPCodeWhen
400invalid_fieldfields isn’t an object.
400invalid_idThe path id isn’t a valid registration id.
400invalid_fixA correction is over 500 characters, a sample message is too long once Ready adds your business name and the HELP and STOP line, or the EIN isn’t valid. Nothing changed; error says what to fix.
400ein_name_mismatchThe corrected business name or EIN doesn’t match IRS records. Nothing changed; ein_check says which one is likely wrong and whether ein_override may submit it anyway.
404not_rejectedNot rejected.
500resubmit_unconfirmedDon’t resubmit yet; poll GET /v1/registration.
502carrier_refused, missing_details, missing_website, not_saved, not_sent, state_changed, protected_registration, reconciliation_requiredNot sent to the carriers; error says what to do.

#Rename a registration

A Ready dashboard label; nothing changes with the carriers. Needs the manage_brands permission.

Parameters

idinteger · pathRequired
The registration id.
namestringRequired
Up to 80 characters; longer is cut. GET /v1/registration returns it as name in data.registrations[]; data.campaign.name stays the carrier campaign name.
Errors
HTTPCodeWhen
400name_requiredname is missing.
404registration_not_foundNo registration with this id.

#Cancel a registration

Cancels a registration that isn’t approved yet and stops its monthly fee. This can’t be undone: what you already paid isn’t refunded, and to register again you file and pay again. To stop an approved one, use Turn off a registration. Needs the manage_brands permission and a key of the registration’s own account (its owner or an admin seat) or of its agency.

Parameters

idinteger · pathRequired
The registration id.

Returns { "success": true }.

Errors
HTTPCodeWhen
400registration_approvedApproved. Turn it off with POST /v1/registration/:id/deregister instead.
403owner_onlyThe key isn’t the registration account’s owner, an admin seat there, or its agency.
404registration_not_foundNo registration with this id.
409registration_changedStatus just changed; nothing removed.
502subscription_cancel_failedWe couldn’t confirm the monthly fee stopped.

#Edit a registration

Changes the details of a registration before it’s filed with the carriers. Once the carriers have it, this answers 409: fix a rejected one with Resubmit. Needs the manage_brands permission and a key of the registration’s own account (its owner or an admin seat) or of its agency.

Path parameters

idintegerRequired
The registration id.

Body parameters

<field>stringRequired
One or more of company_name, dba, campaign_name, campaign_description, website, industry, street, city, state, zip, email, phone, first_name, last_name. Other fields are ignored.
Errors
HTTPCodeWhen
400no_editable_fieldsNone of the fields above in the body.
403owner_onlyThe key isn’t the registration account’s owner, an admin seat there, or its agency.
404registration_not_foundNo registration with this id.
409registration_lockedIt’s already with the carriers, or changed while you were editing.
409registration_rejectedIt was rejected. Resubmit it instead.
500edit_failedNothing was saved. Try again in a minute.

#Turn off a registration

Stops an approved brand or campaign at the carriers. Its monthly fee stops first; if Ready can’t stop the fee, nothing is turned off. Your numbers stay on your account and keep their monthly fee, and can go on a new registration. Call it once with dry_run to see the name to confirm, then again with dry_run: false and that name. Send an Idempotency-Key header so a retry gets the first answer. Needs the manage_brands permission and a key of the registration’s own account (its owner or an admin seat) or of its agency.

Path parameters

idintegerRequired
The registration id.

Body parameters

dry_runboolean
Leave it out or send true to change nothing and get data.name and data.numbers (how many numbers are on it). false turns it off.
confirm_namestring
Required with dry_run: false: the data.name from the dry run, any case.
Returns
dry_runboolean
true on a dry run.
dataobject
On a dry run, { name, numbers }.
Errors
HTTPCodeWhen
400registration_not_approvedIt isn’t approved. Cancel it with DELETE /v1/registration/:id.
400confirm_name_mismatchconfirm_name doesn’t match the business name.
400nothing_to_deregisterIt isn’t linked to the carriers. Contact support.
403owner_onlyThe key isn’t the registration account’s owner, an admin seat there, or its agency.
404registration_not_foundNo registration with this id.
409tcr_direct_registrationReady can’t turn this one off for you. Contact support.
502subscription_cancel_failedThe monthly fee didn’t stop, so nothing was turned off. Try again in a minute.
502deregister_partialThe fee is stopped, but the carriers didn’t confirm every step. Ready’s team is finishing it.

#Move a registration to a sub-account

Moves a registration, approved or still in review, to one of your own sub-accounts. The rest of its brand moves with it (the brand and every campaign under it), and with move_numbers the numbers sending on those campaigns move too. There is no charge and the monthly fees don’t change. Only a sub-account directly under the key’s account can receive it; any other account answers 404. A registration moved to a sub-account can’t be moved back to your own account through the API or the dashboard; contact support to undo a move. Needs the manage_brands permission and a key of the registration’s own account (its owner or an admin seat) or of its agency. Test keys can’t move registrations.

Path parameters

idintegerRequired
The registration id, a brand or a campaign.

Body parameters

target_user_idinteger
The sub-account to move it to, its id from GET /v1/sub-accounts. Send this or target_account_name.
target_account_namestring
The sub-account’s exact company name (case aside). A partial name is refused with 409 target_not_exact and the names that contain it, and if more than one has the name you get 409 target_ambiguous; send the id instead.
move_numbersboolean
true to move the numbers on these campaigns as well. Left out, they stay on your account.
Returns
data.transferred_tostring
The sub-account’s company name.
data.registrations_movedinteger
How many registrations moved, this one and the rest of its brand.
data.numbers_movedinteger
How many numbers moved.
data.ghl_relinkedinteger
How many moved numbers were relinked to the sub-account’s GoHighLevel location.

Once it has moved, calling it again answers 404, so a retry never moves it twice.

Errors
HTTPCodeWhen
400target_requiredNeither target_user_id nor target_account_name was sent.
403owner_onlyThe key isn’t the registration account’s owner, an admin seat there, or its agency.
403test_key_not_allowedA test key. Use a live key.
404registration_not_foundNo registration with this id in your account, or it has already moved.
404target_not_foundThe target isn’t a sub-account directly under the key’s account. Nothing moved.
409target_not_exactNo sub-account has exactly that company name; the message lists the names that contain it. Nothing moved. Send the full name or target_user_id.
409target_ambiguousMore than one sub-account has that name. Send target_user_id.
409registration_changedIt was just moved by someone else. Nothing moved again.
429rate_limitedToo many of these in a short time. Wait and try again.
500transfer_failedNothing moved. Try again in a minute.