Skip to main content

Plans

One balance, and every call draws from it. Running a tool needs an active plan. A plan fills the balance every month with more credit than the plan costs, and once you are on one, a one-time top-up adds more credit whenever you like. Credit you bought stays yours until you spend it. Signing up is free, and so is looking around: browsing the catalog, discover, inspect, and reading your runs and balance never need a plan. Three rules carry most of the weight. Included credit lands when Stripe confirms the invoice paid and expires at the end of that billing period, so it does not roll over. Purchased credit never expires, and it is available only to a workspace with an active plan, as overage once included credit runs out. Nothing is ever charged to a card while you are not on the page. The rest is under Plan rules below.

Three ways a tool prices

Goro fronts three providers and they meter their work in different ways, so a quoted price does not mean the same thing everywhere. Which shape applies is written on the tool’s page, and comes back as price.type from discover and inspect. Only the first has a total that cannot be known before the call, and most of this page is about that case. The other two are arithmetic you can do in advance.

Flat

An image generation call costs what it costs, whatever comes back: 0.0120onZImage,0.0120 on Z-Image, 0.06 on Grok Imagine, 0.0825onSeedream5Lite,0.0825 on Seedream 5 Lite, 0.18 on Nano Banana 2. There is no ceiling to read and nothing to settle afterwards, and a call that fails is not charged at all. video.veo prices the same way, at $3.8250 a call, because it only makes videos of one length.

Metered

A voice call bills a published rate against a quantity you can measure yourself. Text to speech is 0.0450per1,000UTF8bytesofthetextyousend,andnocallcanexceed0.0450 per 1,000 UTF-8 bytes of the text you send, and no call can exceed 0.36. Speech to text is 0.0003persecondofaudio,whichworksoutat0.0003 per second of audio, which works out at 1.08 an hour, and no call can exceed $1.08. The other five video endpoints bill the same way, against the seconds of video you ask for. The rate is per second and differs by model, from 0.0450onGrokImagineto0.0450 on Grok Imagine to 0.6150 on Seedance 5 Pro, and duration is the only field that changes the price. The ceiling on one of those is that rate times the longest clip the endpoint accepts. The rate is exact, so the total is your input size times the rate. The ceiling is still a ceiling: it is the price of the largest request the endpoint takes, not a typical call.

Three numbers, three jobs

This is the per-result case, the one every search, social, maps, commerce and people tool uses.
1

The rate

Every one of those tools publishes a rate per result, for example 0.0069perprofileor0.0069 per profile or 0.0075 per result page. That is what one row costs you, and it is on the tool’s page in the catalog.
2

The total

The total is the rate times the results the call actually produced. Ask for 3 rows and you pay for 3. Ask for 300 and the call finds 40, you pay for 40.
3

The ceiling

Before the call runs, discover and inspect return a ceiling for your specific request. You are never charged above it. It is a maximum, not an estimate of what you will pay.
So a call reads like this: 0.0069perprofile,thisrequestiscappedat0.0069 per profile, this request is capped at 0.14, the final charge lands wherever the results land.

Why the total is not fixed up front

How many rows a request produces is not knowable before it runs. A search for a niche term returns four results; the same query next week returns forty. Goro bills what the call consumed rather than an average that would overcharge the small calls to cover the large ones.
1

The hold

Before the call runs, Goro reserves an amount against your balance, sized from what you asked for. A small request holds a small amount, a large one holds more. The hold never exceeds the ceiling.
2

The charge

When the call finishes, Goro works out what it actually did, takes that amount, and releases the rest of the hold.

A call that returns nothing

If a call completes with no results, the per-call floor is waived and you pay only the published rate for what it actually did, which for an empty result is fractions of a cent. If the call cost nothing to serve, it bills nothing at all and comes back marked free. You are never charged for rows you did not receive. A flat-priced or metered call is different in kind: it either produced the thing you asked for, in which case it costs its published price, or it failed, in which case it costs nothing.

Holds are not charges

A hold reserves balance, it does not spend it. If a call fails, times out, or you stop it, the whole hold is released and nothing is charged. Your available balance is what you can spend right now: the credit you bought, plus any unexpired included or promotional credit, minus anything currently held by a running call.

Budgets

You can set a daily or monthly spend cap on a workspace, and choose whether hitting it blocks further calls or just notifies you. The cap is enforced when the hold is taken, so a call that would breach it never runs. A blocked call answers 402 with the code budget_exceeded.

Plan rules

Running a tool needs an active plan, Build or Scale, with a Stripe status of trialing, active, or past_due (Stripe is still retrying the card, and credit already granted keeps the expiry it was given). Signing up, browsing the catalog, discover, inspect, and reading your runs and balance never need one. Without an active plan, running a tool (POST /v1/run, MCP run_tool, the CLI run) and creating an upload (POST /v1/uploads, MCP create_upload) answer 402 with the code subscription_required, and nothing is charged or held:
A workspace that has never subscribed keeps its wallet, including any purchased or promotional credit sitting on it. It just cannot spend that credit on a run until it picks a plan. Included credit lands in your balance when Stripe confirms the invoice paid, and expires at the end of that billing period. What you have not spent by then is gone. It does not roll over. Purchased credit never expires, and it is sold only to a workspace with an active plan: a checkout for one-time credit also answers subscription_required on a workspace with no plan. Included credit is spent before purchased credit, so a top-up you made sits untouched until the period’s included credit is used up. When both are gone, a run fails with insufficient_funds instead. The error carries your plan, the top_up_url and, on a plan, renews_at, and the message names the renewal date, so an agent can tell you whether to add credit now or wait. Nothing is ever charged to your card while you are not on the page: a plan fee is charged on its renewal date, a top-up when you make one, and nothing else. You change or cancel a plan from the Wallet page, through the Stripe customer portal, and both take effect at the next renewal. Cancelling stops the next charge; the cycle you already paid for runs to its end with its included credit, and you can keep running tools until it does. If a renewal payment fails, Stripe retries the card on its own schedule and emails you about it: included credit ends at the period end it already had, but the plan itself stays active while retries continue, so purchased credit keeps working. If Stripe gives up, the plan ends: you cannot run tools again until you subscribe. Purchased credit is never lost. It stays on the wallet and starts working again the moment you resubscribe. Plan fees are billed monthly in advance and are not refundable. There is no free trial on a plan.

Reading prices from the API

discover and inspect return a price object per tool. Read type first, because it decides which of the other fields are there: usage_based and metered carry a ceiling in max_usd, per_call carries a fixed base_usd and no ceiling at all, and per_call_variant carries a variants list, one exact price per value of the input named in selector. billed_on_actual_usage is the field to branch on. Where it is true, the total depends on the call and max_usd is a maximum rather than a price. Where it is absent, the quoted number is the price. Either way an agent can tell them apart without parsing English. Field by field, see the API reference.
Questions about a specific charge? Email hello@usegoro.ai with the run id and we will break it down.