Skip to main content
Fetch, Geocode and field requests are free. Enrich, Search, driving calculations, Ask and Ask-site use a dollar balance. There are no conversion credits. The current machine-readable contract is GET /v1/meta/plans. Source capacity, concurrency and input-size limits also apply; a larger balance does not bypass them.

Your balance

Every eligible account receives $10 once, with no expiry and no recurring refill. Existing accounts receive the launch welcome grant once as part of the account reset. It is promotional usage allowance, not a purchase. Add funds in amounts of at least $10. Purchased funds do not expire. When a paid plan’s monthly allowance runs out, purchased funds continue at that active plan’s rates: Build stays Build and Growth stays Growth. Auto-recharge is optional and requires explicit payment consent; a free API call never triggers it. Unused paid monthly allowance carries for one additional paid billing period, capped at the upcoming monthly allowance. It does not accumulate indefinitely. Welcome and purchased funds have no monthly reset. The billing response shows available, reserved and expiring amounts separately. Charges from the last few seconds can still be on their way into the ledger: when that applies, the wallet also shows pending_usd (recent charges and work still running), already subtracted from available_usd. If that figure cannot be read right now the wallet says so with pending_unavailable: true and pending_usd: null; it is never shown as zero. After Checkout, the dashboard verifies the returned session before confirming that its funds were applied. A larger wallet balance alone is not payment proof. POST /v1/users/me/billing/checkout-return is a Firebase-authenticated, read-only confirmation: its topup object identifies the session_id, a status of processing, funded or incomplete, and the canonical lot_id only when funded. Processing or incomplete responses have a null lot ID. A fully spent purchase can still be confirmed; a recorded refund or unresolved/lost dispute cannot produce a new funding confirmation. The return confirmation never applies a payment or grants purchased funds.

Search with enrichment

Basic Search returns a shortlist with APN, address, administrative areas, acreage and the stored parcel analysis point. Scalar filter values and requested public Search/Enrich extras appear in fields, excluding duplicate identity values, and are included in the query price. Set enrich: true to attempt the full Enrich catalog and return compact enriched_fields instead of fields, regardless of field selection. On Free, a query returning ten successfully enriched parcels costs $0.20 + 10 × $0.02 = $0.40. A valid query with zero matches still costs the Search unit price. A query that cannot execute costs zero. Failed enrichments keep the matched parcel and incur no Enrich charge.

Spending controls and retries

For paid calls, send max_cost_usd as a decimal string, such as "0.40". Search with enrichment reserves the query price plus limit parcel units before starting, then settles only the completed query and successful delivered enrichments. Unused reserved funds are released. No-match, ambiguous and unavailable Enrich results cost zero. An incomplete Ask answer costs zero. Use a stable Idempotency-Key for HTTP retries, or idempotency_key for hosted MCP. The same key and payload return the saved result without a second source run or charge. Changing the payload under the same key is an error. Omitting the key creates a new paid operation on every call. Paid responses include billing with operation_id, charged_usd, currency, pricing_version and replayed. A client disconnect does not cancel an owned paid operation. Reuse its stable key or read GET /v1/operations/{operation_id} to recover the result. Saved paid results are retained for 30 days and require fresh authorization when read. Results are saved for replay just after the response; in the rare case a charged result could not be saved, recovery returns 410 result_not_retained with a receipt of the charge, and a new key runs the work again. Licensed results also require continuing dataset permission: a dataset withdrawal can make an unexpired result unavailable without changing historical billing records.