Agent visits
The agent opens /boundproof/agent/. The page calls the provisioning endpoint and displays the returned agent payload.
BoundProof Agent docs
BoundProof Agent provisions a private agent namespace, an agent-only API key and a Hub handoff code. It is built for AI agents, commerce agents and automated workflows that need proof access without sharing a human account.
{
"agent_id": "uuid",
"api_key": "aio_...",
"api_base": "https://api.affix-io.com",
"own_area_id": "area_uuid"
}What changed
Each visiting agent can receive its own area. The API key created for that agent is tied to its agent_id and own_area_id. Agent routes return only the requesting agent identity, usage and Hub handoff code.
AffixIO Hub keeps the same AffixIO Hub branding and existing human login. The new option is an additional login method: Login with BoundProof Agent code. A valid BP code opens a Hub session scoped to that agent's own area only.
Flow
The agent opens /boundproof/agent/. The page calls the provisioning endpoint and displays the returned agent payload.
The API creates an agent-only key with an allowed agent route scope. The key is not a human Hub password and is not a general admin token.
The agent calls its identity and usage routes. Responses are filtered to the requesting agent_id.
The agent asks for a single-use BP code. The code lasts ten minutes and can be used once.
A human enters the BP code in AffixIO Hub. The session opens only the linked agent area.
Browser agents
A browser can act as a BoundProof Agent when it is the controlled runtime for an agent workflow, such as a signed-in assistant, browser extension, automation runner, supervised computer-use session or merchant-hosted checkout assistant. BoundProof Agent binds that runtime to an agent_id and own_area_id, then limits what it can see and do through scoped agent routes.
This does not mean every browser tab is trusted. A normal anonymous visit is only a visit. The safer pattern is that the browser prepares an intent, consent or action request, then a trusted same-origin backend, extension host, MCP server or controlled runtime calls AffixIO before the action continues.
Keep merchant SDK keys, payment secrets and shared verification secrets out of public browser JavaScript. The evidence is the scoped BoundProof Agent area and signed AffixIO decision, not the browser by itself.
API endpoints
| Method | Endpoint | Purpose | Auth |
|---|---|---|---|
| POST | /v1/boundproof/agent/provision | Create agent_id, own_area_id and agent-only API key. | Public agent visit |
| GET | /v1/agents/me | Return the requesting agent identity and area. | Agent key |
| GET | /v1/agents/usage | Return usage and decision activity filtered to that agent. | Agent key |
| POST | /v1/agents/hub-code | Create a single-use Hub login code for that agent area. | Agent key |
| GET | /v1/agents/billing-status | Return paid state, plan, quota, SDK availability and recent billing audit events. | Agent key |
| POST | /v1/agents/checkout | Create agent API PaymentIntent / confirm with pm_, or optional hosted Checkout. Agent self-serve supported. | Agent key |
| POST | /v1/agents/checkout/confirm | Confirm incomplete agent subscription PaymentIntent with Stripe payment_method (pm_…). Backend only — no Hub UI. | Agent key |
| POST | /v1/agents/sdk-key | Issue a paid SDK API key only after the agent area has an active subscription. | Agent key plus paid subscription |
| POST | /hub/auth/agent-code | Verify BP code and open a scoped AffixIO Hub session. | Single-use BP code |
Runnable shape
The agent starts with a provision call. After that, it uses the returned API key as a bearer token for its own routes. The Hub code is for handoff, not for broad account access.
const provision = await fetch(
"https://api.affix-io.com/v1/boundproof/agent/provision",
{ method: "POST" }
).then((res) => res.json());
const me = await fetch(provision.api_base + "/v1/agents/me", {
headers: { Authorization: "Bearer " + provision.api_key }
}).then((res) => res.json());
const hub = await fetch(provision.api_base + "/v1/agents/hub-code", {
method: "POST",
headers: { Authorization: "Bearer " + provision.api_key }
}).then((res) => res.json());
const checkout = await fetch(provision.api_base + "/v1/agents/checkout", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + provision.api_key
},
body: JSON.stringify({
plan_tier: "Starter",
payer_type: "agent",
payer_acknowledgement: "agent_authorized_subscription",
mode: "api"
})
}).then((res) => res.json());Paid access
BoundProof Agent paid access uses the existing AffixIO Starter plan, currently published at £19 per month where GBP checkout is available.
Agent path: payer_type agent, payer_acknowledgement agent_authorized_subscription, mode api|confirm with a Stripe pm_…. Human path: payer_type human + hosted Checkout still works.
Agents confirm with a Stripe payment_method id (pm_…) via /v1/agents/checkout/confirm. AffixIO never accepts raw card numbers. Hosted Checkout remains available when preferred.
Provisioning returns a bpa_ agent key for agent routes. POST /v1/agents/sdk-key issues an SDK key when the agent billing owner has a valid licensed trial or subscription. Check /v1/agents/billing-status for entitlement and SDK-key availability; an unpaid trial can still be licensed.
/v1/agents/billing-status shows paid state, current plan, quota, renewal date and recent audit events such as checkout_requested and sdk_key_issued.
AffixIO Hub
Email, password and human BoundProof login continue to work as before. BoundProof Agent does not replace human registration.
AffixIO Hub adds Login with BoundProof Agent code. The code format is BP-XXXX-XXXX.
When the session comes from an agent code, Hub shows the linked agent's own area data instead of general account data.
Answers
No. Human BoundProof still proves a browser-held credential for a Hub user. BoundProof Agent is the agent product wording and provisions isolated agent areas.
No. A BP code is single-use and expires after ten minutes. Reuse returns an invalid agent code response.
AffixIO lets an agent obtain a scoped proof area, inspect its own usage and hand a human a single-use Hub code without exposing unrelated account data.
Yes, when the browser is a controlled agent runtime such as a signed-in assistant, extension, automation runner, supervised computer-use session or merchant-hosted checkout assistant. It is not a claim that every anonymous tab is trusted. Keep merchant SDK keys and payment secrets out of public browser JavaScript; use a trusted same-origin backend, extension host, MCP server or controlled runtime for AffixIO calls.
This flow uses api.affix-io.com for BoundProof Agent at /boundproof/agent/. It is separate from boundproof.affix-io.com.
Human payers use payer_type human, payer_acknowledgement human_authorized_payment and mode hosted. Agents can also choose hosted Checkout. Never submit raw card numbers to AffixIO or create another subscription merely to retry an incomplete payment.