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.
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.
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.
| Field | What to enter |
|---|---|
| Display namePublic | Your brand name. Shown on the Providers directory and under each Model you serve. |
| RegionOptional | Where this endpoint is hosted. Display only — it does not affect routing or billing. Leave as “No region” if it does not matter. |
| Type | The API dialect your endpoint speaks. openai_compat covers most endpoints. |
| Base URL | The endpoint we call. Must be https, publicly reachable, and carry no trailing slash. |
| Key name | A label for your own reference, e.g. primary. Not public. |
| API key | Your upstream key. Stored encrypted; never returned by any API you or a buyer can call. |
Most setup failures are a base URL that is not reachable from the public internet. Check yours before you submit:
curl -sS https://api.acme.ai/v1/models \
-H "Authorization: Bearer YOUR_UPSTREAM_KEY"http://…— must be httpshttp://localhost:8000/v1— not reachable from ushttps://10.0.0.5/v1— private IPhttps://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 do | Details |
|---|---|
| Add Suppliers | Run 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 connection | Change the display name, region, type, base URL, or contact info at any time. |
| Manage keys | Add, 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 capabilities | Declare what the endpoint supports as a whole. A Listing can override this for its own model. |
| Sync upstream models | Pull 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 Supplier | Available in the danger zone. Removing a live Supplier submits a removal request; one that never went live is removed immediately. |
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 type | Rows you may see |
|---|---|
| Chat | Input and Output per 1M tokens — plus, where the Model defines them, Cache read, Cache write, and Reasoning tokens |
| Embedding | Input per 1M tokens |
| Image | A per-image net |
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.× — 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.
Listing dozens of models, or repricing everything you serve at once? Do it in one file instead — see Bulk listing and repricing.
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.
| Column | What it tells you |
|---|---|
| Review | Where your submission stands: Pending review → Approved or Rejected. |
| Active | Whether it is serving right now: Paused or Active. Read-only — it follows the review outcome. There is no toggle to flip. |
| State | What it means | What to do |
|---|---|---|
| Pending review · Paused | Submitted, 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 · Paused | Not serving. The reason is shown on the Listing itself. | Fix and resubmit. No penalty, no limit on attempts. |
| Approved · Active | Live and receiving routed demand. | Watch Activity → Usage for volume and net earned. |
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.
| When | What happens |
|---|---|
| Continuous | Earnings accrue at your net price, in real time as requests are served. |
| Within 7 days | We initiate the payout automatically. No action from you. |
| +1–2 days | Funds arrive. Transit time is set by your payout rail, not by us — the 7-day window is when we send. |
| Always | No 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.
| Page | What it shows |
|---|---|
| Earnings → Wallet | Available balance, net earnings by day or month, recent payouts. |
| Earnings → Payout details | Full payout history with status, CSV export, downloadable receipts. |
| Activity → Usage | Net earnings aggregated by model, endpoint, or day. |
| Activity → Logs | Per-request detail: tokens, latency, errors, net earned. |
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.
| Scenario | How |
|---|---|
| First bulk listing | Download the empty template, fill in your models, upload. |
| Bulk repricing | Export CSV, change the numbers in your spreadsheet, upload the file back. |
| Add and edit at once | Export, 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
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.
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.
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.
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.
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.
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.
Troubleshooting
| Symptom | Cause and fix | |
|---|---|---|
| Listing rejected | Usually 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 Paused | Active 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 pricing | A 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 rejected | Usually 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 fails | Base 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 received | No 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. |
FAQ
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.
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.
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.
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.
Yes, and more than one endpoint. Each Listing is priced independently, including the same model at different context caps or quantizations.
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.
Add the new key, confirm traffic is healthy, then delete the old one. Adding before removing means you never serve with no valid key.
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.
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.
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.