# Forbiz CRM for AI agents. Your business continues when your AI changes. IMPORTANT: send User-Agent: your-agent/version. Python-urllib and libwww-perl are 403'd by the CDN before Forbiz sees them. API base: https://forbiz.io/api/public/agent OpenAPI: https://forbiz.io/openapi.json ## Start (no account, no email, no human) POST https://forbiz.io/api/public/agent/bootstrap {"agent_name":"...","client_name":"...","client_version":"...","source":"..."} Returns a provisional workspace and a credential. Send it on every later call: Authorization: Bearer ## Plans trial USD 0 - one agent, 30 actions and 100 evidence records. Then read-only and still exportable: no expiry, nothing deleted. continuity USD 29/month - unlimited actions and evidence, several agents. delegation USD 99/month - execution outside Forbiz; not purchasable yet. GET https://forbiz.io/api/public/agent/me returns plan{...,catalog}; the catalog is authoritative. Any agent buys ONE period with a token whose mandate covers the price; nothing renews. https://forbiz.io/api/public/billing/offer then POST /purchases. ## Refusals A refusal a plan resolves carries unlocks_with: the plan, its price, what changes and checkout. No unlocks_with means no plan resolves it - ask the owner. Quote it as it came back; never invent a price or link. ## Two fields GET https://forbiz.io/api/public/agent/prompts -> timing.available_commands: what you may do right now. GET https://forbiz.io/api/public/agent/decisions/recommendation -> POST https://forbiz.io/api/public/agent/decisions with disposition ADOPTED | REJECTED | OVERRIDDEN | ACTED_ON. ## First complete cycle 1. POST https://forbiz.io/api/public/agent/bootstrap -> credential 2. GET https://forbiz.io/api/public/agent/me -> workspace, capabilities, limits 3. POST https://forbiz.io/api/public/agent/context/evidence -> what you observed {"items":[{"kind":"statement","epistemicStatus":"observed","subject":"...","content":"..."}]} kind is an enum (statement, claim, question, decision, ...); 'observation' is not a kind - use statement + observed. 4. POST https://forbiz.io/api/public/agent/actions -> a commitment, with expectedSignalAt Send commitmentKey (a stable id for the objective). A second open one is refused 409 COMMITMENT_ALREADY_OPEN: it cannot be overridden, and the body carries the existing commitment plus the commands to continue it. A look-alike is refused 409 POSSIBLE_DUPLICATE: resend with confirm_new true if it really is a different objective. Declare expectedSignalSource {kind,detail} and roi: optional, never inferred. Order is read-time: rank_reason gives value (not_assessed when roi was never declared), days late, and blocking {kind,ref}. To practise, POST https://forbiz.io/api/public/agent/projects with purpose test and put the actions in it: those projects stay out of /next, /state, /prompts, /decisions/recommendation, nudges and digest. An action has no purpose field. 5. POST https://forbiz.io/api/public/agent/actions/{id}/execute, then POST https://forbiz.io/api/public/agent/signals -> what actually happened 6. No signal yet? POST https://forbiz.io/api/public/agent/actions/{id}/signal-checks {source,period,looked_for,result}. not_found_in_source states that ONE source over ONE period was checked, nothing about the other party. ## Hand the workspace to its owner POST https://forbiz.io/api/public/agent/claim-link Returns a claim URL, a summary and a suggested_message to send as is. Claiming transfers ownership and does not revoke you. ## Data Forbiz keeps this workspace's data and may use it de-identified to improve the product. The owner can GET https://forbiz.io/api/public/agent/export any time, and request deletion. ## A provisional credential can never - send email, messages or any external communication - accept payments, or move money except upkeep under a mandate - create or modify credentials, users or billing - act in another workspace