Resources and revisions
Learn what you sell and how a completed transaction remains understandable after your product changes.
A resource identifies the API endpoint, operation, or digital item that a payer can buy. It answers: what access is being sold?
Each Resource has an immutable resource key such as text_generator. The key is unique inside one environment. Equivalent test and live Resources can share that key. Promotion also preserves the public rvk_… revision key while creating separate Resource and revision records in live.
A revision defines the fixed usage contract for one version of that resource. It declares the resource's variables: input variables are known when access is requested, and output variables are reported at completion. It answers: which values explain this execution, where do they come from, and how should a historical transaction be interpreted?
For example, a text-generation resource might have one revision that requires input_tokens and output_tokens. After you publish it, those rules do not change. Every transaction using that revision keeps the same meaning later.
Because published revisions do not change:
- Adding, removing, or changing a variable, including whether it is an input or output variable, requires a new revision.
- A new revision changes how future executions capture usage. It does not rewrite historical transactions.
- A price change is a separate payment-policy change. It does not change the usage contract.
Framework integrations use the revision to capture request input and validate values returned by the handler. Direct HTTP integrations send the same variables in Merchant API requests.
The guides use these values:
| Dashboard item | Example value | What your server keeps |
|---|---|---|
| Resource | API · Text generation API · text_generator | The resource key correlates equivalent test and live Resources. |
| Published revision | Text generation v1 with input_tokens and output_tokens | The generated Python type, or an rvk_… revision key for direct HTTP or a raw revision. |
| Price | Fixed 0.01 USD | Nothing supplied by the caller; recuut applies it. |
Create and publish these values in Set up your product. Copy the revision key only after publication.
See how prices stay separate →
Input and output variable values must be non-negative integers. Zero is valid. Send canonical digit strings with at most 18 digits in HTTP requests. The Python SDK also accepts integers. Fractions, floats, booleans, signs and exponents are rejected. Price amounts and rate denominators keep their decimal precision.