Quotes
A bound quote tells you the exact credit cost of one operation before you run it — with no billing or generation side effects.
A bound quote prepares one exact operation and returns its current credit requirement without executing it. Quotes are the preflight authority for cost: creating or reading one has no billing, provider, resource, or job side effects.
Create a quote
POST /v1/quotes
Requires Content-Type: application/json and an Idempotency-Key. A new quote returns 201 with its read URL in Location. Repeating the exact request with the same key replays it (200, Idempotency-Replayed: true); reusing the key for a different request returns 409.
The body picks a stable operation_id from the capability catalog and places that operation’s normal request under input. Operations that act on an existing resource also include a target.
curl -X POST https://api.someone.app/v1/quotes \
-H "Authorization: Bearer $SOMEONE_KEY" \
-H "Idempotency-Key: 019f6e13-1229-7c6c-a149-f2d6a595fb0f" \
-H "Content-Type: application/json" \
-d '{
"operation_id": "image.create.nano-banana-2.generate.v1",
"input": {
"character_id": "CHARACTER_UUID",
"type": "image",
"prompt": "walking through a neon-lit Tokyo street at night"
}
}'
Your key must carry the operation’s scope (characters:write, images:generate, videos:generate, speech:generate, or voices:write). Scope is checked before any resource or pricing read.
What a quote binds
The response binds the authenticated actor, API key, payer authority, normalized input and authorized asset manifest, capability and pricing versions, credit amount, and provider retry budget. Its approval projection reports whether approval is required and the current pending, approved, rejected, or revoked state.
Raw prompts, speech text, provider payloads, and asset URLs are never persisted in the quote or returned by its projection — only bounded summaries and cryptographic asset bindings. A later paid submission must supply and re-authorize the input again, and its normalized-input and ordered-asset hashes must match the quote exactly.
Get a quote
GET /v1/quotes/:id
Returns the quote’s current approval and expiry projection — only to the same actor and API key that created it. Missing quotes and quotes outside your authority both return an opaque 404. This read reveals no raw input, cost contracts, or asset URLs.