AutoUncle Data Services is in beta. The API, MCP tools and agent skill may change often, including breaking changes, until version 1.0. Read the changelog before you upgrade an integration.
Credits & billing
Live valuations are paid for with prepaid credits. This page explains what uses a credit, how a credit is reserved and released, where credits come from, and how to cap spending per key.
What uses a credit
| Request | Credits |
|---|---|
Live valuation with status: "valued" |
1, including any VIN or plate lookup it made |
Comparable listings (options.include: ["comparables"]) returned with a valued live valuation (comparables.status included) |
+1 |
Comparables requested but none_found or unavailable (Denmark, a timeout) |
+0 |
Live normalization (POST /v1/vehicles/normalize) with status: "normalized" |
1, plus 1 when photos are used (below) |
Trade-in price (options.include: ["trade_in_price"]) returned with a valued live valuation (trade_in_price.status included) |
+1 |
Trade-in price requested but unavailable (outside its twelve markets, or a failure) |
+0 |
Link to similar cars (options.include: ["similar_cars_link"]) |
0 |
Photos (images) on a valued live valuation or a normalized live normalization, when a value in identification.fields was read from them |
+1 per request, however many photos |
Photos that were skipped or added nothing (image_skipped for every photo, or an images_not_used warning) |
+0 |
Live selling-time forecast with status: "valued" |
2: the valuation (base) and the forecast (selling_time), plus 1 when requested comparables are returned |
Live market & demand request (POST /v1/market) with status: "measured" |
1 |
Market & demand request that is partial or insufficient_data |
0 |
Live valuation, normalization or selling-time forecast that is refused or failed |
0 |
| Any test-key valuation, selling-time forecast, market & demand request or normalization | 0 |
| Idempotent replay of an earlier valuation, forecast or normalization | 0 (the original is charged once) |
| Requests rejected before they start (validation, limits, authentication) | 0 |
Live vehicle lookup (VIN, HSN/TSN or registration plate) that returns vehicle data (resolved, suggested or ambiguous) |
1 |
Live vehicle lookup with no_match, or one that fails |
0 |
| Any test-key vehicle lookup | 0 |
Catalogue, account and GET /v1/valuations/{id} |
0 |
The same rules apply over REST, MCP (API key or OAuth) and the console playground. OAuth-connected agents always run live valuations, so they use credits on success.
Every POST response tells you what happened in usage:
{
"usage": {
"billable": true,
"credits_used": 2,
"original_credits_used": 2,
"charges": { "base": 1, "comparables": 1 },
"credits_remaining": 28,
"cache_hit": false,
"idempotent_replay": false,
"mode": "live"
}
}
credits_used is what this call cost; original_credits_used is what the original valuation cost, which matters on a replay (where credits_used is always 0). charges says what the original credits paid for: base for the request itself and one entry per add-on: comparables, trade_in_price, images or selling_time. It is empty when nothing was charged.
How a live valuation is charged
- Reserve. When a live valuation starts, its credits are reserved from your workspace's balance: one for the valuation, plus one for each add-on requested: comparables, a trade-in price, and photos when
imagesare sent. If the balance cannot cover all of them, the request is rejected with402insufficient_creditsbefore anything runs; it is never run without the add-on. The whole reservation comes from a single credit grant. - Capture or release. A
valuedresult captures the valuation's credit, and an add-on's credit only when the result delivers it (comparables or a trade-in price withstatus: "included", photos that a value inidentification.fieldswas read from); an add-on that delivered nothing is released. A refusal or failure releases everything back to your balance. - Recover. If a process dies mid-request, a background job reconciles the reservation with the recorded outcome, so a credit is never captured for a result you did not get.
Requests rejected for rate or concurrency limits never reach step 1, so they never touch your balance.
Credits are taken from the grant that expires first, then from grants without an expiry date.
Where credits come from
- Signup credits. Each person receives 30 credits once, after verifying their email address. They go to the workspace they create or belong to at that moment, and are not granted again for further workspaces.
- Packages. For more credits, contact sales or choose Request a package under Billing. Packages are added to your workspace by AutoUncle; there are no automatic card charges and no payment details are stored in the console.
- Adjustments. AutoUncle can add manual grants, for example for a pilot.
The Billing page lists every credit grant with its source, amount, remaining credits, expiry and date added, plus your available credits and the credits used this month. GET /v1/account returns the current balance as credits_remaining, so your systems can check it before a large run.
Cap spending per key
Give each live key a monthly credit limit when you create it under API keys. Once a key has used that many credits in the current calendar month, its live valuations are refused with 402 key_spend_limit_reached, while other keys keep working. The count restarts at the beginning of each month.
A key limit only caps spending; it does not grant credits. The workspace balance still has to cover every valuation.
Use limits to:
- keep a staging or experimental live key from spending your whole balance;
- give an agent or an automation a hard budget;
- split a package between teams or systems.
Who can see billing
All workspace roles can see Billing and Usage. Owners and admins manage keys, limits and members; developers manage their own keys; viewers have read-only access. See authentication & keys.
Track usage
- Usage in the console shows requests and credits per day, week or month, per key, and exports up to 10,000 requests as CSV.
- Request logs list individual requests with their status and request ID.
- Each
valuedlive result hasusage.billable: true. Summing that over your own records should match the console.
Handling credit errors in code
| Code | HTTP | What to do |
|---|---|---|
insufficient_credits |
402 | Stop sending live valuations. Alert a workspace owner to request a package. Test keys keep working. |
key_spend_limit_reached |
402 | Stop using this key until next month, or ask an owner or admin to raise its limit. |
Neither is retryable: retrying the same request will fail the same way until the balance or limit changes. In a batch, stop on the first one rather than letting every remaining row fail. See batch & bulk valuations.
Next steps
- Test with test keys to build without spending credits.
- Safety & spend control for agents.
- Production checklist.