readyDocs Open the appOpen the app

Partner program

Ready partners bring businesses to Ready, help run their accounts and earn a share of Ready’s profit on everything those clients send. Everything happens on the Partner page.

On Sub-accounts, the Partner button opens the same page with these sections:

  • Earnings shows Ready to pay out, Your share (a percent of the margin), Paid out and Payout details, where Add or Change sets where a bank payout goes. Get paid takes what’s ready, and Default fees sets what new clients pay.
  • Invite shows your partner link with Copy and Change (the link’s name), how it’s doing (clicks, sign-ups and the percent who joined), and an invite by email: Business name, Their email, Invite. Pending lists invites not yet answered.
  • White label shows where your white label stands, with Join white label to start, Continue setup while it’s part done, or Manage once it’s on. Only the agency owner sees it.
  • Clients lists each client with Joined, Status, Texts sent and You earn. Revenue by product shows Volume and You earn for each product, and Payouts lists each payout’s Date, Amount, Method and Status.

#How you earn

You earn 20% of Ready’s profit on every text your clients send, unless Ready agreed a different rate with you. You start earning once a client sends. The Invite window shows your rate.

The top of the page shows your numbers for the time range you pick (1D, 1W, 1M, 1Y or ALL): revenue, profit and segments sent. Revenue by product breaks that down for each thing your clients pay for. Below it, Clients lists your clients with what you earned from each.

If another agency joined the partner program through you, a Partners tab shows next to Accounts, with what you earned from each of them. When another partner offers to share a client with you or give you one, the offer shows on the Client offers card, with what you’d earn. Accept or decline it there. To change or end a split, contact Ready support.

#Invite a client

Once you’re an approved partner, Partner in your account menu, and next to Sub-accounts at the top of that page, opens your Partner page. The first time you open it, Ready asks you to accept the Ready Partner Terms. You can’t set fees, send invites or ask for access until you do.

Click Invite on the Partner page. There are two ways to bring someone in.

  • Email. Enter their Business name and Their email, then click Invite. Ready emails them an invite to join as your client.
  • Link. Copy your partner link and share it anywhere. Anyone who signs up from it becomes your client. You can add a custom link name, like yourname, and change it later.

When you invite by email, you can ask for account or agency access at the same time with Access to their account, or pick No access and ask later. The invite email tells them what you asked for, and Ready asks them to allow it the first time they sign in. They can say no and still join as your client.

If you have a snapshot, pick it under Start them with and the new client starts with your setup already in place. You can also set a snapshot per link, so everyone who signs up from that link gets it.

A client on your white label gets no free trial texts. They can’t text anyone until their own business registration is approved, so register their business as soon as they join, from their account or over the API. Registration is a monthly charge, paid by whoever pays for that client.

#Get access to a client’s account

Open a client from Clients and click Request access. The client gets an email and a popup in their account, and the request waits until they answer. You can cancel it while it’s waiting with Cancel access request. Preview what (their name) sees shows the request as they’ll get it.

  • Account access lets you open their account and work in it as an admin. You can run their campaigns, inbox and contacts, and send texts from their numbers. They stay the sender of record.
  • Agency access also lets you connect their account to other tools for them, like GoHighLevel, and puts their account on your Sub-accounts page, next to your other clients. A client who has sub-accounts of their own can’t give agency access, but they can still give account access.

Once you have access, click Open account to work in it. Some things stay off limits no matter what. You can never change their card, delete or export their contacts, or override opt-outs.

Your client sees you as their Ready partner, with a note that you set their fees and help with their account. They accept or decline your partner and access requests, and see an access log of every sign-in, action and text you sent in their account. They can remove your agency access and keep account access, or remove all access. You stay their partner, their fees stay the same, and you keep earning on the account.

#Set your clients' fees

You set what each client pays per text. Your earnings come from the gap between their fee and Ready’s cost.

  • Default fees apply to new clients. Click Default fees in the Earnings section of the Partner page. Clients you already have keep their own fees.
  • One client’s fees: open the client and click Edit prices on their Usage and billing card.

You can charge up to twice Ready’s fee. Carrier fees are added on top, and you can’t change them. Until a client accepts you as their partner, you can lower their fees but you can’t raise them above Ready’s.

Clients always hear about a change first. They get an email and an alert in Ready. A decrease starts right away. An increase starts 48 hours after the alert.

Markup can’t be set anymore. A sub-account that already pays a markup keeps paying your base rate plus that markup per segment, and you can remove it but not add it back.

#Bill your sub-accounts

Setup steps and moving clients over are in Bill your clients on Whop or Stripe.

Ready can bill each sub-account you pay for, so you don’t have to work out what every sub-account owes. You pick how in Settings, Billing, User billing:

  • Ready bills users for you (choose SaaS or CRM first). Ready charges the card each sub-account already has saved on your own Stripe account, and the money lands in your Stripe. Connect the Stripe account your sub-accounts' cards are saved on. Use Whop? Add your Whop API key instead of connecting Stripe, and Ready charges the cards saved on your Whop.
  • I bill users myself. Ready works out what each sub-account owes and sends it to your webhook as a signed client.rebill event, once it owes the amount, or after the number of days, that your billing setup shows, whichever comes first. You collect the money.

Each sub-account pays for their texts and calls at the price you set on your Partner page. Number and registration fees you paid for them pass through at cost. Once billing is on, open a sub-account from Sub-accounts: its Payments card shows each charge with its status, Charged, Retrying, Failed or Waiting. To pick who bills your sub-accounts or connect Stripe, open Settings, Billing, User billing. An agency already on Sub-accounts add a card keeps it; it isn’t offered to new setups. Once billing has started, the way you bill can’t be switched. That holds if you turn billing off and back on, too. When you turn off billing through Ready, the charges that haven’t gone through yet show as Failed, with a note to bill that sub-account yourself, and they’re never charged later.

#The client.rebill webhook

Save the URL that gets client.rebill with PUT /reseller/billing-settings and a body of { "webhook_url": "https://you.example.com/ready-rebill" }. It needs the manage_billing permission. This URL is separate from your account webhook, and so is its secret: the save that first stores a URL answers with webhook_secret. Keep it, because it is shown only that once. Send "webhook_url": "" to stop the events.

Ready POSTs client.rebill when it works out what a sub-account owes, when that charge is paid, and when it fails for good. A POST your URL doesn’t accept is sent again, with the same X-Ready-Event-Id, for up to 48 hours (first after 5 minutes, then at growing gaps up to 6 hours). Each charge in GET /reseller/client-charges shows what your URL last answered, under webhook.

The body is not shaped like the account webhook’s events. event sits at the top, with no timestamp and no data: event (client.rebill), charge_id, reseller_id, client ({ "id", "name", "email" }), period_start, period_end, usage_cents, markup_cents, amount_cents, detail, mode, status, stripe_payment_intent_id, whop_payment_id and error. Amounts are whole cents.

The headers are Content-Type: application/json, User-Agent, X-Ready-Event: client.rebill, X-Ready-Event-Id, X-Signature and X-Ready-Signature. Both signature headers hold the same sha256=<hex> value. Check it as you check the account webhook’s signature, keyed with webhook_secret. X-Ready-Event-Id is client_charge_ plus the charge id, the same on every POST for one charge, so drop repeats by charge_id and status together.

#Get paid

The top of the Partner page shows what’s Ready to pay out. New earnings clear for 3 days before you can take them. Click Get paid and choose how you want it:

  • Ready credit. Any amount up to what’s ready, added to your Ready balance right away.
  • Bank wire. From $100 up to what’s ready. The first time, you add your bank and tax details. Ready reviews each bank payout and sends the wire.

#Onboard clients over the API

If your own system sets up each new client (a form, a CRM workflow or an AI agent), it can do it in four calls, in this order. Use an API key from your agency’s main account, not one made inside a sub-account. Steps 2 and 3 send X-Sub-Account-Id with the id from step 1. Without it, the registration and the login land in your own account.

  1. Create the sub-account with POST /v1/sub-accounts, using the client’s own email as the owner login. Its billing decides who pays: client (the default) pays with their own card at the fees you set in step 4, and agency means you pay at Ready’s price and step 4 doesn’t apply. The API can’t change it later. Keep the id it returns.
  2. Register the client’s business with POST /v1/registration/brand. It’s paid, by whoever pays for the sub-account, so for billing: "client" the client signs in and adds a card first. Then check GET /v1/registration until can_send_registered is true.
  3. Give anyone else a login with POST /v1/team-members. The owner from step 1 already gets a sign-in link.
  4. Set the client’s fees with PUT /v1/partner/clients/{id}/fees, once the client has accepted you. The fee rules above apply. PUT /v1/partner/default-fees sets the same fees for every new client.

The rest of the Partner page is in the API too. Invite a business, list and revoke invites, read your overview and clients, and read and set your white label brand, custom domain and join link.

Every call is safe to retry except step 2, which is paid: after a timeout, send the identical request again. It reuses the same pending checkout and never charges twice, while a payment still being checked doesn’t show in GET /v1/registration. Fields and errors for each call are in the API reference.