Supplier
Supplier guide · Get started

From sign up to your first Listing.

You set the net price you want to earn per million tokens. The platform sets the buyer-facing price on top and routes eligible demand to the most competitive supply. Your API key and your net price are never shown to buyers. Setup takes about 15 minutes.

01Step

Create your account

Sign up is self-serve — no sales call and no waitlist. Continue with GitHub, or register with an email and a password of at least 12 characters containing an uppercase letter, a lowercase letter, and a number. First and last name are optional; we derive them from your email if you leave them blank.

Already have a buyer account? Use it. Supplier access sits on the same identity — sign in instead of signing up and you will land straight in step 2.

02Step

Connect your endpoint

Once your account exists, the console walks you into Connect your endpoint. You bring your own key (BYOK): we call your endpoint with it, and it is stored encrypted and never shown to buyers or to other suppliers.

The record this step creates is called a Supplier — one Supplier is one endpoint: a base URL plus the keys we call it with. Everything you list later hangs off a Supplier.

FieldWhat to enter
Display namePublicYour brand name. Shown on the Providers directory and under each Model you serve.
RegionOptionalWhere this endpoint is hosted. Display only — it does not affect routing or billing. Leave as “No region” if it does not matter.
TypeThe API dialect your endpoint speaks. openai_compat covers most endpoints.
Base URLThe endpoint we call. Must be https, publicly reachable, and carry no trailing slash.
Key nameA label for your own reference, e.g. primary. Not public.
API keyYour upstream key. Stored encrypted; never returned by any API you or a buyer can call.
Lock this key down on your provider
This key stays in your upstream provider's account, so keep its blast radius small: set a spend cap and an expiry, and restrict it by source IP so only we can use it. The egress IP addresses to allow-list are shown in the console whenever you add a key.

Most setup failures are a base URL that is not reachable from the public internet. Check yours before you submit:

bash
curl -sS https://api.acme.ai/v1/models \
  -H "Authorization: Bearer YOUR_UPSTREAM_KEY"
Base URLs that will not work
  • http://… — must be https
  • http://localhost:8000/v1 — not reachable from us
  • https://10.0.0.5/v1 — private IP
  • https://api.acme.ai/v1/ — trailing slash

Accept the Model Provider Agreement and continue. Supply → Suppliers is where every Supplier you run lives from then on — this is not a one-time form. Add a second one as a backup, or one per region or API dialect, and manage each independently:

What you can doDetails
Add SuppliersRun up to 3. A backup endpoint, a second region, or a different API dialect each gets its own Supplier, with its own base URL and keys. Name and region together must be unique.
Edit connectionChange the display name, region, type, base URL, or contact info at any time.
Manage keysAdd, edit, and delete keys — up to 10 per Supplier. There is no reset, so rotate by adding the new key, confirming traffic is healthy, then deleting the old one.
Set default capabilitiesDeclare what the endpoint supports as a whole. A Listing can override this for its own model.
Sync upstream modelsPull the model catalog your endpoint exposes, and edit the list by hand. This is what the Model selector reads when you create a Listing.
Delete a SupplierAvailable in the danger zone. Removing a live Supplier submits a removal request; one that never went live is removed immediately.
Edits go through the same review
Once a Supplier is approved, a change to it is submitted as a change request and it keeps serving at its current values while that is reviewed — the same behaviour as Listings. A Supplier that has not been approved yet takes edits immediately.
03Step

List a model

A Listing binds your upstream model to a Slug — the client-facing model name buyers call — and carries your net price. Create one from Supply → Model Listings → New listing.

Identity

Pick the Supplier (the endpoint from step 2 — its type and base URL show underneath so you can confirm) and the Model as your endpoint exposes it upstream.

Pricing — your net for this record

Selecting a Slug from the catalog auto-fills the pricing type, context length, and capabilities. If no matching Model exists yet, ask an admin to add it. Leave the context cap at Unlimited for a single price band, or set a cap and add a tier to price long context differently.

The rows you fill are not fixed per pricing type — they come from the Model you picked:

Pricing typeRows you may see
ChatInput and Output per 1M tokens — plus, where the Model defines them, Cache read, Cache write, and Reasoning tokens
EmbeddingInput per 1M tokens
ImageA per-image net
You set net. We set the buyer price.
Enter 1.50 as your Input net and you earn $1.50 per 1M input tokens. The platform adds its margin on top during review to produce the buyer-facing price — you never enter a retail price or a markup. Sub-cent pricing is common; the icon beside the net column sets precision up to six decimal places for every tier on the record.
Do not enter 0 to skip a row
Every row shown must have a net greater than zero. If a dimension does not apply to your supply, remove the row — hover it and click the × — rather than leaving it at 0. A zero is rejected on submit, and a row you zero out would silently disappear from the record the next time you open it.

Policy

Set the context length and max output in tokens, and optionally a quantization. Turn on only the capabilities your endpoint genuinely supports — function calling, vision, JSON mode, structured output, reasoning. Structured output requires JSON mode. The review checks these against your live endpoint, and buyers route around supply that does not deliver what it claims.

One Listing per model, context, and quantization
That combination is unique per supplier. To offer the same model at a different context cap or quantization, create a separate Listing.

Listing dozens of models, or repricing everything you serve at once? Do it in one file instead — see Bulk listing and repricing.

04Step

Platform review

Every new Listing — and every change to a live one — is reviewed before it serves traffic. Your Model Listings table tracks this in two separate columns, and reading them together is the whole picture.

ColumnWhat it tells you
ReviewWhere your submission stands: Pending review → Approved or Rejected.
ActiveWhether it is serving right now: Paused or Active. Read-only — it follows the review outcome. There is no toggle to flip.
StateWhat it meansWhat to do
Pending review · PausedSubmitted, not yet serving. We are checking your pricing, your declared specs, and that your endpoint is reachable.Nothing. You can still edit — an edit re-enters review.
Rejected · PausedNot serving. The reason is shown on the Listing itself.Fix and resubmit. No penalty, no limit on attempts.
Approved · ActiveLive and receiving routed demand.Watch Activity → Usage for volume and net earned.
Editing a live Listing never takes it offline
A change to an approved Listing is submitted as a change request, and the Listing keeps serving at its current values the whole time it is reviewed — so you never take an outage to change a price. After you save, the form shows the live values again. That is expected, not a lost edit: your pending change appears in the banner above the form.
To stop serving a Listing, delete it
Because Active is read-only, there is no self-serve pause. Deleting a live Listing submits a removal request and it keeps serving until that is processed; deleting one that never went live takes effect immediately.
05Step

Get paid

Earnings accrue to your wallet at your net price as buyers consume your Listings. There is nothing to withdraw — payouts are automatic, and the platform takes no commission.

WhenWhat happens
ContinuousEarnings accrue at your net price, in real time as requests are served.
Within 7 daysWe initiate the payout automatically. No action from you.
+1–2 daysFunds arrive. Transit time is set by your payout rail, not by us — the 7-day window is when we send.
AlwaysNo platform commission, no listing fee, no charge to keep a Listing live. Payout-rail costs, if any, are yours.

You will not receive funds until a payout account is bound. Add yours under Earnings → Payout details. Payouts currently settle to US bank accounts in USD over local ACH; you will need the account number, the routing number, and the account holder name exactly as the bank has it. Bank details are held by our payment processor — we do not store them. Only one account can be active at a time, so remove the existing one before adding a replacement.

Sent is not the same as arrived
A payout marked Sent has left us; Arrived means the rail confirmed delivery. Both states are shown so you can tell them apart. A balance below the minimum is not lost — it rolls into the next run, and your exact threshold is shown on the Wallet page.
PageWhat it shows
Earnings → WalletAvailable balance, net earnings by day or month, recent payouts.
Earnings → Payout detailsFull payout history with status, CSV export, downloadable receipts.
Activity → UsageNet earnings aggregated by model, endpoint, or day.
Activity → LogsPer-request detail: tokens, latency, errors, net earned.
06Reference

Bulk listing and repricing

Creating Listings one at a time is fine for a handful. For dozens — or an upstream price change across everything you serve — use the Bulk CSV button at the top right of Supply → Model Listings. It is one round trip: export the current configuration, edit it in a spreadsheet, upload it back, check the preview, apply.

ScenarioHow
First bulk listingDownload the empty template, fill in your models, upload.
Bulk repricingExport CSV, change the numbers in your spreadsheet, upload the file back.
Add and edit at onceExport, edit the rows you want, append new models at the end. Each row is judged on its own: model_id filled means update, blank means create.

For one or two models, the detail page is faster — bulk import earns its keep from a few models up. The export always contains every model under the selected supplier, regardless of any filter on the list; a file only covers one supplier, so import each of yours separately.

Five rules, most important first

1
Applying is submitting, not going live

The same review as step 4: new models enter Pending review, and a change to a live Listing becomes a change request while it keeps serving at its current values — including its current price. A Listing that already has a pending change merges the new import into it.

2
One row is one price tier, not one model

A model with three tiers is three rows, its identity columns (Slug, context length, quantization) repeated on each. max_input_tokens is that tier's input cap — blank means no cap, the top tier. Identity columns must match exactly across a model's rows or the file is rejected; the usual culprit is Excel drag-fill.

3
A model’s rows are all of its tiers

Export three tiers, upload two, and the third is deleted — the preview flags any model whose tier count shrinks. Whole models are safe: anything not in the file is untouched, so deleting the rows you do not want to change is fine.

4
Blank means keep — except in price cells

A blank identity or capability cell keeps the current value (or the default on create). A blank price cell means 0, because tiers are replaced whole — fill every price cell as if from scratch, leaving blank only the dimensions your upstream does not charge for. Costs only; there are no retail columns.

5
All or nothing

One invalid row rejects the entire file — nothing is written until you apply a clean preview, and the apply button stays disabled while any error remains. Errors carry the same row numbers you see in your spreadsheet: fix, save, drop the file back in.

File rules: save as CSV UTF-8 — workbook formats like .xlsx are rejected with a hint to convert. Up to 4 MB per upload, decimal point . only, no scientific notation. The # comment lines at the top of an export are ignored on upload; keep the header row and columns exactly as downloaded.

07Reference

Win more demand

Routing is automatic and decided on the merits. Buyers do not pick a supplier per call, so you cannot win by relationship — two levers move traffic your way.

A sharper net price. The router favours the most competitive eligible price. Because your net is never published, you can compete hard without revealing your floor to buyers or to rivals. Change it at any time; the change goes through review while the Listing keeps serving.

Delivering what you declared. Accurate specs, honest capabilities, and reliable uptime keep demand flowing. Use Activity → Logs to catch error spikes and latency regressions early — supply that underdelivers gets routed around.

08Reference

Troubleshooting

SymptomCause and fix
Listing rejectedUsually an unreachable base URL, declared capabilities the endpoint does not support, or a required net row left at zero.Open the Listing to read the reason, fix it, resubmit.
Active stuck on PausedActive follows the review outcome; it stays Paused while Review is Pending or Rejected.Check the Review column. If Rejected, read the reason and resubmit.
Submit fails on pricingA row shown in the pricing table is still 0.Give it a net above zero, or remove the row with the × if the dimension does not apply.
Bulk CSV upload rejectedUsually a workbook format (.xlsx) instead of CSV UTF-8, a header that no longer matches the template, or one invalid row — an upload is all-or-nothing.Save as CSV UTF-8 without adding or removing columns, fix the rows flagged in the preview (numbers match your spreadsheet), and upload again.
Endpoint check failsBase URL is not https, carries a trailing slash, or is not reachable from the public internet.Fix the URL, and allow-list our egress IPs if your upstream restricts by source IP.
No payout receivedNo payout account bound, or the balance is below the minimum.Bind an account under Earnings → Payout details; sub-minimum balances roll into the next run.
09Reference

FAQ

Who can see my API key?

Only you. Keys are stored encrypted, are never shown to buyers or to other suppliers, and are never returned by any API you or a buyer can call.

Who can see my net price?

Nobody outside the platform. Buyers see only the buyer-facing price, and other suppliers see nothing — which is why you can price aggressively without exposing your floor.

What do buyers know about me?

Your display name is public, on the Providers directory and under each Model you serve. Which supplier handled a specific request is not shown — that stays anonymous per call.

What is a Slug?

The client-facing model name buyers call. Binding your upstream model to a Slug from the catalog is what makes supply from different suppliers comparable. If no matching Model exists yet, ask an admin to add it.

Can I list more than one model?

Yes, and more than one endpoint. Each Listing is priced independently, including the same model at different context caps or quantizations.

How do I change my price?

Open the Listing, edit the net values, save. The change enters review; the Listing keeps serving at its current price until the change is approved, so there is no outage.

How do I rotate a key?

Add the new key, confirm traffic is healthy, then delete the old one. Adding before removing means you never serve with no valid key.

How often am I paid?

We initiate a payout within 7 days of accrual, automatically. Arrival depends on your payout rail, typically one to two business days after we send.

Does the platform take a cut of my payout?

No. There is no platform commission, no listing fee, and no charge to keep a Listing live. You receive your full accrued balance. Payout-rail costs, if any, are yours — we neither add to them nor cover them.

I do not have a US bank account. Can I still get paid?

Not yet. Payouts currently settle to US bank accounts in USD over local ACH. Additional rails are on the roadmap — contact us and we will let you know when yours is supported.

Start listing today.

Self-serve from here. A quality check runs before your Listing serves demand.