{"name":"Last Price","description":"OpenRouter for price computation. One API, any pricing logic, token-metered.","base_url":"https://api.last-price.ai","dashboard_url":"https://app.last-price.ai","docs_url":"https://last-price.ai/docs","contact":{"email":"support@last-price.ai","support_url":"https://last-price.ai/support"},"access_options":[{"id":"keyless_demo","choose_when":"Just trying it: no key at all, a demo tenant, 30 calls per IP per hour. MCP at /api/mcp/rpc works without a key the same way.","method":"POST","path":"/api/public/compute/demo","human_required":false,"account_required":false,"credential":"none"},{"id":"self_registration","choose_when":"A free API key right now with no human: a sandbox workspace (25 compute calls a day, a key valid for 30 days) and a claim link for a person. Past the daily limit the same key can pay per call with x402, or buy a day pass of extra calls.","method":"POST","path":"/api/agents/register","human_required":false,"account_required":false,"credential":"API key, sent as x-api-key (also usable as OAuth client credentials)"},{"id":"oauth_dcr","choose_when":"Your OAuth client-credentials framework expects to register its own client (RFC 7591 registration, then the client_credentials grant; there is no authorization code flow). Same sandbox and claim link as self_registration; an additional option, not a replacement.","method":"POST","path":"/api/oauth/register","then":{"method":"POST","path":"/api/oauth/token","note":"grant_type=client_credentials with the returned client_id and client_secret; send the access token as Authorization: Bearer"},"human_required":false,"account_required":false,"credential":"client_id and client_secret (the secret also works as x-api-key)"},{"id":"x402","choose_when":"No account and no key: pay 0.01 USDC per call with x402. A call with no credential answers 402 with the payment requirements (see payments.x402). A self-registered agent key can pay the same way past its daily limit, and the call runs on its own workspace.","method":"POST","path":"/api/compute/price","human_required":false,"account_required":false,"credential":"a signed payment per call in X-PAYMENT (v1) or PAYMENT-SIGNATURE (v2)"},{"id":"agentid","choose_when":"A full workspace of your own, signed in with AgentID and an inbox you control, where AgentID sign-in is offered. Then create an API key in Settings.","method":null,"path":null,"url":"https://app.last-price.ai/sign-up","human_required":false,"account_required":true,"credential":"API key created in the dashboard, sent as x-api-key"},{"id":"human_account","choose_when":"A person owns the account: they sign up and create an API key, or an agent-bound key, for the agent.","method":null,"path":null,"url":"https://app.last-price.ai/sign-up","human_required":true,"account_required":true,"credential":"API key or agent-bound key, sent as x-api-key"}],"registration":{"url":"https://app.last-price.ai/sign-up","guide_url":"https://last-price.ai/agent-sign-in","approval_required":false,"agentid":{"enabled":true,"issuer":"https://auth.agentid.com","inbox_provider":"https://api.agentmail.to/v0","scopes":["openid","email","profile"],"note":"AgentID is an interactive sign-in, not open dynamic client registration. The agent authorizes the pending sign-in with its own AgentMail inbox API key (as the Bearer to the inbox provider, with provider_connect permission); never send that key to Last Price. For a key with no inbox, see self_registration or oauth.","payment_note":"AgentMail's x402 gateway pays for AgentMail API calls, such as creating an inbox, without an AgentMail API key. It does not sign you in to Last Price. AgentID sign-in needs an AgentMail API key with provider_connect permission, and an x402 call does not carry one. Last Price's own x402 pays for compute. It is not a way to sign up."},"api_credentials":"https://app.last-price.ai/settings/api-keys","self_service":"https://api.last-price.ai/api/agents/register","note":"access_options lists every independent way in. An agent can register itself with POST /api/agents/register and get a sandbox API key immediately, with no human (see self_registration), or register an OAuth client-credentials client at POST /api/oauth/register (see oauth). Browser sign-in creates a session, which is not an API credential. Account restrictions and workspace permissions still apply."},"self_registration":{"method":"POST","path":"/api/agents/register","url":"https://api.last-price.ai/api/agents/register","auth":"none","human_required":false,"request":{"content_type":"application/json","body":{"name":"string, required, 2 to 64 characters (letters, digits, spaces, . _ : @ / + -)","contact_email":"string, optional","intended_use":"string, optional, at most 500 characters"},"example":{"name":"your-system/role-name","intended_use":"Price a SaaS catalogue"}},"response":{"status":201,"credential":"api_key.key, shown once; send it as the x-api-key header","oauth":"oauth.client_id with api_key.key as client_secret at /api/oauth/token (client_credentials)","terms":"sandbox: scopes, allowed_operations and limits","claim":"claim.claim_url: give it to a person to take the workspace into their account and lift the limits"},"workspace_type":"sandbox","scopes":["pcn:function:read","pcn:routing:read","price:compute"],"allowed_operations":["GET /api/me","POST /api/api-keys/rotate","POST /api/compute/price","POST /api/price-router","POST /api/price-router/verify","GET /api/agents/allowance","POST /api/agents/allowance","GET /api/billing/balance","PATCH /api/billing/balance","POST /api/billing/topup","GET /api/functions","GET /api/functions/catalog","GET /api/functions/{id}","GET /api/routing-policies","GET /api/routing-policies/{id}","GET /api/workspaces/{workspaceId}/notifications","POST /api/workspaces/{workspaceId}/notifications/read","GET /api/workspaces/{workspaceId}/alert-preferences","PATCH /api/workspaces/{workspaceId}/alert-preferences"],"limits":{"registrations_per_address_per_day":5,"registrations_shared_per_day":50,"registrations_global_per_day":200,"compute_per_day":25,"key_rotations_per_day":10,"credential_ttl_days":30,"max_body_bytes":2048,"functions":"built-in only"},"lift":{"claim":"Give claim.claim_url to a person. Once they claim the workspace, the sandbox limits are lifted for good.","pay_per_call":{"endpoints":[{"method":"POST","path":"/api/compute/price"},{"method":"POST","path":"/api/price-router"}],"header":"PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1)","price":{"amount":"0.01","currency":"USDC","atomic":"10000"},"network":"base","note":"Send the same compute request with this key plus a signed x402 payment for exactly this price, for instance once the daily compute limit is reached. It runs now on this workspace and does not count against the limit. An empty payment header answers 402 with the full payment requirements. Past the limit, the 429 lists this option as the pay_per_call step of its next array, with the price and where to pay."},"day_pass":{"method":"POST","path":"/api/agents/allowance","header":"PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1)","calls":500,"valid_hours":24,"price":{"amount":"2.5","currency":"USDC","atomic":"2500000"},"network":"base","list":{"method":"GET","path":"/api/agents/allowance"},"note":"A self-registered agent key (the agent_starter plan) may buy a day pass with one x402 payment: 500 extra compute calls on its own workspace for 24 hours, used only once the daily compute limit is reached. Send POST /api/agents/allowance with no payment for the 402 requirements, then again with a signed payment for exactly this price. Refused (409 sandbox_key_expiring, before any payment is read) when the workspace's key expires within 24 hours. A compute call sent with a payment header is paid per call even while a pass is live, and does not use the pass. Unused pass calls are forfeited when a person claims the workspace, since the claim lifts the daily limit the pass extends. Past the daily compute limit, the 429 lists this option as the day_pass step of its next array, with the price and where to pay."}},"oauth_equivalent":"POST /api/oauth/register (RFC 7591) creates the same sandbox and returns client_id and client_secret","claim":{"page":"https://app.last-price.ai/claim","endpoint":{"method":"POST","path":"/api/agents/claim","auth":"dashboard session"}}},"oauth":{"token_endpoint":"https://api.last-price.ai/api/oauth/token","registration_endpoint":"https://api.last-price.ai/api/oauth/register","authorization_server_metadata":"https://api.last-price.ai/.well-known/oauth-authorization-server","grant_types_supported":["client_credentials"],"token_endpoint_auth_methods_supported":["client_secret_basic","client_secret_post"],"note":"For OAuth client-credentials frameworks. An additional option beside self_registration, not a replacement: POST registration_endpoint (RFC 7591) to get a client_id and client_secret for a sandbox workspace with no human. The secret also works as x-api-key. There is no authorization endpoint and no authorization code flow."},"auth":{"methods":[{"type":"bearer","header":"Authorization","scheme":"Bearer","description":"OAuth access token (preferred for agents)"},{"type":"api_key","header":"x-api-key","description":"Long-lived API key, sent as the x-api-key header; may be bound to an agent"}]},"scopes":[{"name":"audit:read","description":"Read this tenant's audit events."},{"name":"billing:read","description":"Read invoices, payments, credits and the credit balance, and marketplace earnings and payouts."},{"name":"billing:write","description":"Create, change, send or delete invoices, record payments and refunds, and issue or delete credits."},{"name":"commerce:catalog:read","description":"Read commerce connectors (credentials redacted), catalog items, competitor observations, pricing policies, price proposals and the commerce audit trail."},{"name":"commerce:configure","description":"Create commerce connectors, sync their catalogs, ingest observations, create, change or delete pricing policies, and load sample data."},{"name":"commerce:execute","description":"Push approved proposals out through commerce connectors, alone or at the end of a pipeline cycle."},{"name":"commerce:proposal:approve","description":"Approve a pending commerce proposal."},{"name":"commerce:proposal:draft","description":"Run a commerce pipeline cycle that drafts proposals without approving them, or dry-run a pricing policy."},{"name":"commerce:proposal:reject","description":"Reject a pending commerce proposal."},{"name":"notifications:read","description":"Read this workspace's notifications feed and unread count, and the credential's own email alert settings. The agent that owns a workspace reads its own feed without it."},{"name":"notifications:write","description":"Mark this workspace's notifications read for the credential itself (each agent, or each plain key, keeps its own read state), and change the credential's own email alert settings. The agent that owns a workspace does this without it."},{"name":"pcn:function:publish","description":"Publish or version a PCN pricing function."},{"name":"pcn:function:read","description":"List and inspect PCN pricing functions."},{"name":"pcn:function:test","description":"Test-run a PCN pricing function without publishing."},{"name":"pcn:routing:read","description":"Read routing policy configuration, the workspace price guardrails and the learned elasticity."},{"name":"pcn:routing:write","description":"Create or update routing policy configuration, the workspace price guardrails and the learned elasticity switch."},{"name":"price:compute","description":"Call POST /api/compute/price or POST /api/price-router for a single price decision."},{"name":"price:compute:batch","description":"Call POST /api/compute/batch for batched price decisions."},{"name":"team:admin","description":"List, add, remove and change the roles of this workspace's members, and send, list and revoke its invitations, with the API key itself (x-api-key), acting for the person who created the key. Must be granted by name, by a workspace owner or admin: no wildcard and no unscoped key carries it. It works only while that person is still an owner or admin here, never grants a role above theirs or the owner role, never touches the owner or that person's own membership, and only an owner's key may demote or remove an admin. Agent tokens are refused."},{"name":"workspace:claim","description":"Claim a self-registered agent workspace into this workspace with POST /api/agents/claim, acting for the person who owns it. Must be granted by name, by a workspace owner or admin: no wildcard and no unscoped key carries it."}],"unscoped_routes":"This route names no scope a credential can hold, so a key or token limited to specific scopes, or any agent credential, cannot call it. Use a workspace key not bound to an agent, created without scopes or with *, or a dashboard session.","workspace_administration":{"dashboard_session_only":{"credential":"dashboard session","api_key_or_token_accepted":false,"covers":["creating and deleting workspaces","workspace settings, the workspace LLM key, inference provider connections and the tester tag","your own profile, sessions and linked wallets"],"paths":["/api/workspaces","/api/workspaces/{workspaceId}","/api/workspaces/{workspaceId}/settings","/api/workspaces/{workspaceId}/settings/enrich","/api/workspaces/{workspaceId}/llm-key","/api/workspaces/{workspaceId}/inference-providers","/api/workspaces/{workspaceId}/inference-providers/{providerId}","/api/workspaces/{workspaceId}/tester-tag","/api/user/workspaces"]},"team":{"credential":"dashboard session, or an API key (x-api-key) holding the exact team:admin scope","scope":"team:admin","covers":["team members and their roles","invitations"],"granted_by":"Only a workspace owner or admin signed in to the dashboard can mint a key holding team:admin. No wildcard or unscoped key carries it, and agent tokens and other JWTs are refused.","paths":["/api/workspaces/{workspaceId}/team","/api/workspaces/{workspaceId}/team/{userId}","/api/workspaces/{workspaceId}/invitations","/api/workspaces/{workspaceId}/invitations/{invitationId}"],"rules":"team_administration"},"dashboard":{"team":"https://app.last-price.ai/settings/team","api_keys":"https://app.last-price.ai/settings/api-keys"},"instead":{"which_workspace":"GET /api/me reports the workspace, auth method and scopes behind any key or token.","claim_an_agent_workspace":"POST /api/agents/claim takes a key holding the workspace:claim scope, which an owner or admin grants by name.","notifications":"GET /api/workspaces/{workspaceId}/notifications, POST .../notifications/read and GET or PATCH .../alert-preferences take the dashboard session, or a key or token holding notifications:read (reads) or notifications:write (changes). The agent that owns an unclaimed workspace needs neither scope."},"note":"Creating and deleting workspaces, workspace settings and the workspace LLM key have no API key or OAuth path: those operations answer 401 to any key or token, and OpenAPI marks each of them x-lastprice-auth: session-cookie. Team members, roles and invitations work from the dashboard session or from an API key holding the exact team:admin scope, which only an owner or admin can mint, from the dashboard; team_administration lists the rules such a key follows."},"team_administration":{"scope":"team:admin","credential":"An API key of the workspace, sent as x-api-key, holding team:admin by name. Agent tokens and other JWTs are refused on these operations.","granted_by":"A workspace owner or admin signed in to the dashboard, on the API keys page. No wildcard and no unscoped key carries it.","operations":["GET /api/workspaces/{workspaceId}/team","POST /api/workspaces/{workspaceId}/team","PATCH /api/workspaces/{workspaceId}/team/{userId}","DELETE /api/workspaces/{workspaceId}/team/{userId}","GET /api/workspaces/{workspaceId}/invitations","POST /api/workspaces/{workspaceId}/invitations","DELETE /api/workspaces/{workspaceId}/invitations/{invitationId}"],"rules":["Only the key's own workspace (GET /api/me reports it), never on the agent starter plan.","Only while the person who created the key is still an owner or admin of the workspace; a key with no recorded creator is refused.","Never grants the owner role or a role above the creator's own.","Never changes or removes the workspace owner or the creator's own membership.","Demoting or removing an admin needs a key created by the owner.","Checked before the role and creator rules, for every caller, a signed-in owner and a key's own creator included: the membership of the workspace owner of record is never demoted or removed here (403 workspace_owner_protected; ownership transfer goes through support@last-price.ai), and no change, leaving included, may leave the workspace without an owner (409 last_owner).","A change that collides with a concurrent change to the same members is rolled back whole and answers 409 concurrent_team_change with retryable true; send it again. A key's attempt is still recorded in the audit log as refused."],"audit":"Every call, and every refused call, is recorded in the audit log (GET /api/audit?subject_kind=workspace_team) with the key, its agent if any, and the creator. Only owners and admins, and team:admin keys whose creator is one, can read those rows.","invitations":"An invitation a key sends can be accepted only while the key is valid and still holds team:admin and its creator can still invite at that role; revoking the key revokes its pending invitations.","dashboard":{"api_keys":"https://app.last-price.ai/settings/api-keys","team":"https://app.last-price.ai/settings/team"},"note":"Creating and deleting workspaces, workspace settings and the workspace LLM key stay dashboard-session only."},"idempotency":{"supported":true,"header":"Idempotency-Key","ttl_seconds":86400,"min_length":8,"max_length":255},"rate_limits":{"default":{"per_window":100,"window_seconds":900,"headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset","Retry-After"]},"per_ip":{"per_window":1000,"window_seconds":900,"headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset","Retry-After"]},"per_signed_in_person":{"applies_to":"dashboard session (browser cookie); API keys and agent tokens use default and per_ip","per_window":3000,"window_seconds":900,"headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset","Retry-After"]},"public_demo":{"per_window":30,"window_seconds":3600,"headers":["X-Demo-Limit","X-Demo-Remaining","X-Demo-Reset"]}},"error_envelope":{"shape":{"error":{"code":"string","message":"string","retryable":"boolean"}},"unauthorized":{"status":401,"shape":{"error":"string | object","code":"string","message":"string","retryable":"boolean"},"codes":["unauthorized","invalid_credentials"],"retryable":false,"www_authenticate":"Bearer realm=\"last-price\"","note":"Branch on the top-level code. invalid_credentials means the credential was sent and rejected; unauthorized means none was sent, or not the kind this route accepts. hint names the accepted credentials and next says where to get one, except on a route that takes only a person's credential, which answers a valid API key with a hint saying so and an empty next."},"optional_fields":{"hint":"string. One sentence on how to fix the request (401, 403 insufficient_scope, 400, 429).","next":"array of steps, each { method, path, description }, plus an id where a body lists steps you must tell apart. Calls that get you unstuck: self-registration and the OAuth token endpoint on a 401; on a 429 quota_exceeded, a pay_per_call step (also carrying header, price, asset, network and pay_to; only where the call can be paid for), a day_pass step (also carrying header, calls, valid_hours, price, asset and network; on a daily compute refusal while pay-per-call is configured) and a claim step, in that order. Find a step by its id, not its position.","example":"object. A minimal valid request body for the operation, on a 400 where one is published.","issues":"array of { path, message }. Each field that failed validation, by dotted path, with the reason (400 validation_failed).","retry_after":"integer seconds. Equal to the Retry-After header (429).","limit":"integer. Requests allowed per window by the limiter that refused the call (429)."},"invalid_json":{"status":400,"code":"invalid_json","operations":["POST /api/api-keys","POST /api/commerce/connectors","PATCH /api/commerce/connectors/{id}","POST /api/commerce/cycle","POST /api/compute/allocation","POST /api/compute/batch","POST /api/compute/conversation","POST /api/compute/price","POST /api/compute/significance","POST /api/costs","POST /api/credits","POST /api/customers","POST /api/disputes","POST /api/embed-tokens","POST /api/functions","PATCH /api/functions/{id}","POST /api/invoices","POST /api/jale/contribute","POST /api/jale/contribute/batch","PUT /api/learned-elasticity","POST /api/marketplace/listings","PATCH /api/marketplace/listings/{listingId}","POST /api/orders","POST /api/payments","POST /api/price-router","POST /api/price-router/verify","POST /api/pricing-models","PUT /api/price-guardrails","POST /api/routing-policies","PATCH /api/routing-policies/{id}","PATCH /api/usage/events/{id}/outcome","PATCH /api/usage/llm/events/{id}/outcome","POST /api/webhooks","PATCH /api/webhooks/{webhookId}","POST /api/workspaces/{workspaceId}/notifications/read","PATCH /api/workspaces/{workspaceId}/alert-preferences"],"note":"The body is not JSON. Sent by the operations listed here only. Routes that already answered this with another code keep it (validation_failed on the nested envelope, invalid_request on self-registration) and add the same hint; elsewhere such a body can answer with only error, or, on some older routes, a 500."},"retryable_codes":["rate_limited","quota_exceeded","provider_unavailable","service_unavailable","upstream_timeout","circuit_breaker_open"],"needs_approval":{"status":202,"approve_endpoint":"/api/approvals/{approval_id}/approve","reject_endpoint":"/api/approvals/{approval_id}/reject"}},"attribution":{"user_agent":"Send a descriptive User-Agent on every call, such as your-system/role-name.","credential":"A request sent with an API key counts as the workspace's own. Several agents may share one workspace key and tell themselves apart by User-Agent.","agent_keys":{"optional":true,"create_agent":{"method":"POST","path":"/api/agents"},"create_key":{"method":"POST","path":"/api/agents/{agent_id}/keys"},"session_exchange":{"method":"POST","path":"/api/auth/native-token"},"credential":"A person's credential: a dashboard session or a JWT not bound to an agent. An API key gets 401, and a JWT bound to an agent gets 403. With a Supabase session and no key, POST session_exchange with the Supabase access token as Authorization: Bearer, then send the returned access_token as Authorization: Bearer to create_agent and create_key. The agent id is in data.agent.id and the key in data.api_key.key. Ask for price:compute in scopes to compute.","note":"An agent-bound key adds the agent name to each request, plus per-agent scopes and revocation."},"keyless":"Keyless calls (the public demo, MCP without a key) never count as a workspace's own traffic, whatever User-Agent they send.","usage_events":"/api/usage/events"},"capabilities_endpoint":"/api/agents/{agent_id}/capabilities","competitive_pricing":{"method":"POST","path":"/api/compute/price","scope":"price:compute","guide":"https://github.com/last-price-ai/last-price/blob/main/docs/integrations/inbound-competitive-pricing.md","function_name":"lastprice/competitive-price","request":{"context":{"currency":"USD","metadata":{"competitor_price":70,"competitor_currency":"USD","competitive_action":"match"}},"constraints":{"min_price":80},"options":{"include_explanation":true}},"note":"Send a comparable offer, matching currency, a match or undercut goal and a minimum acceptable price or unit cost with target margin. Missing inputs answer 400. The price is advice and does not change a store."},"audit_endpoint":"/api/audit","billing":{"scopes":{"read":"billing:read","write":"billing:write"},"endpoints":{"invoices":"/api/invoices","payments":"/api/payments","credits":"/api/credits","credit_balance":"/api/credits/balance?customerId={customer_id}","marketplace_earnings":"/api/marketplace/earnings","marketplace_payouts":"/api/marketplace/payouts","prepaid_balance":"/api/billing/balance","prepaid_topup":"/api/billing/topup"},"dashboard":{"invoices":"https://app.last-price.ai/invoices","payments":"https://app.last-price.ai/payments","credits":"https://app.last-price.ai/credits","payouts":"https://app.last-price.ai/payouts"},"vocabulary":{"credits":"Credit bundles a workspace grants to its own customers, with a balance per customer. They are not a prepaid balance for calling Last Price.","usage":"What your own price computations cost is metered per call and reported by GET /api/usage, which needs no billing scope.","payouts":"What a function publisher earns from marketplace calls, and the payouts of it.","prepaid_balance":"Your own prepaid balance in USDC, topped up with one x402 payment at POST /api/billing/topup and drawn down by compute calls at a lower price than paying per call. Nothing is charged automatically, and it needs price:compute rather than a billing scope."}},"public_demo":{"compute":{"method":"POST","path":"/api/public/compute/demo"},"verify":{"method":"POST","path":"/api/public/price-router/verify"},"rate_limit":{"per_window":30,"window_seconds":3600,"scope":"ip"},"note":"Runs on a demo tenant and drops caller metadata. It cannot evaluate a competitor offer. Production pricing is POST /api/compute/price with an API key."},"public_catalog":{"functions":{"method":"GET","path":"/api/functions/catalog"},"listings":{"method":"GET","path":"/api/marketplace/listings"},"rate_limit":{"per_window":60,"window_seconds":60,"scope":"ip","headers":["Retry-After"]},"note":"No key needed. Lists the built-in functions and the functions listed publicly on the marketplace; private functions and owner credentials never appear. A credential sent here is ignored, so an invalid key still gets 200. Your own listings are GET /api/marketplace/listings?scope=owned, which needs a key and answers 401 without one."},"payments":{"x402":{"protocol":"x402","x402_version":1,"x402_versions":[1,2],"scheme":"exact","network":"base","network_caip2":"eip155:8453","asset":{"symbol":"USDC","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","decimals":6},"price_per_call":{"amount":"0.01","currency":"USDC","atomic":"10000"},"pay_to":"0x30F4f41158dBd194B51820E5633fCBa8eBD86ea4","endpoint":{"method":"POST","path":"/api/compute/price"},"payment_header":"X-PAYMENT","response_header":"X-PAYMENT-RESPONSE","v2_headers":{"required":"PAYMENT-REQUIRED","payment":"PAYMENT-SIGNATURE","response":"PAYMENT-RESPONSE"},"facilitator":"https://api.cdp.coinbase.com/platform/v2/x402","settlement_retry":{"max_attempts":3,"on":"payment_settlement_failed with retryable: true"},"agent_workspaces":{"endpoints":[{"method":"POST","path":"/api/compute/price"},{"method":"POST","path":"/api/price-router"}],"note":"A self-registered agent key (the agent_starter plan) may send the same compute request with a payment in X-PAYMENT or PAYMENT-SIGNATURE, at the same price, for instance once its daily compute limit is reached. The call runs now on the agent's own workspace and does not count against that limit. On any other plan a payment header next to a credential is ignored."},"day_pass":{"method":"POST","path":"/api/agents/allowance","header":"PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1)","calls":500,"valid_hours":24,"price":{"amount":"2.5","currency":"USDC","atomic":"2500000"},"network":"base","list":{"method":"GET","path":"/api/agents/allowance"},"note":"A self-registered agent key (the agent_starter plan) may buy a day pass with one x402 payment: 500 extra compute calls on its own workspace for 24 hours, used only once the daily compute limit is reached. Send POST /api/agents/allowance with no payment for the 402 requirements, then again with a signed payment for exactly this price. Refused (409 sandbox_key_expiring, before any payment is read) when the workspace's key expires within 24 hours. A compute call sent with a payment header is paid per call even while a pass is live, and does not use the pass. Unused pass calls are forfeited when a person claims the workspace, since the claim lifts the daily limit the pass extends. Past the daily compute limit, the 429 lists this option as the day_pass step of its next array, with the price and where to pay."},"top_up":{"method":"POST","path":"/api/billing/topup","header":"PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1)","body":{"amount":"10"},"minimum":"10","maximum":"10000","bonus_tiers":[{"from":"100","bonus_rate":"0.1"},{"from":"500","bonus_rate":"0.2"}],"pricing":{"per_call":"0.01","prepaid_per_call":"0.008333","saving_per_call":"0.001667","pay_per_call_premium":"0.2","note":"A prepaid call draws 0.008333 USDC from the balance. Paying per call with x402 costs 0.01 USDC, 20% more."},"network":"base","balance":{"method":"GET","path":"/api/billing/balance"},"note":"Prepay compute: POST /api/billing/topup with {\"amount\":\"<USDC>\"} (at least 10) answers 402 for exactly that amount; send it again with a signed payment and the balance is credited, bonus included. A prepaid call costs 0.008333 USDC instead of 0.01; nothing is ever charged automatically."},"note":"No account needed. Call without a credential to get the 402 payment requirements (body for v1, PAYMENT-REQUIRED header for v2), then repeat the call with a signed payment in X-PAYMENT (v1) or PAYMENT-SIGNATURE (v2). Each payment buys one call and cannot be reused, except that a payment whose settlement was refused (payment_settlement_failed, retryable: true) may be presented again, up to 3 settlement attempts in all. Paid calls run on a shared pay-per-call workspace with the built-in and publicly listed functions."}},"changelog":{"feed_json":"https://last-price.ai/changelog/feed.json","feed_rss":"https://last-price.ai/changelog/feed.xml","page":"https://last-price.ai/changelog","audience_filter":"items[]._lastprice.audience includes \"agents\"","recommended":"Check at the start of a session and before changing integration code","latest_entry_date":"2026-10-04T00:00:00.000Z"},"discovery":{"mcp_manifest":"/.well-known/mcp.json","mcp_endpoint":"/api/mcp/rpc","llms_txt":"/llms.txt","ucp_profile":"/.well-known/ucp","openapi":"/api/openapi"}}