CurbiCurbi

FOR DEVELOPERS AND AI AGENTS

Can this agent do that?
Did it actually happen?

Curbi is control and evidence for AI agents that take business actions. Set a limit. Try a refund. See what the agent can honestly say.

ACTION LAB · SIMULATEDNo signup. No money moves.

What did your agent say?

Example policy: Starter costs $49; no guaranteed results; refund claims require a recorded refund. Text stays in your browser.

Change the refund scenario

One click runs permission, outcome, retry and reply checks.

    This is an interactive simulation using Curbi’s gate and checker with a provider stand-in and temporary browser keys. It does not prove a real payment or authorize a production action. Use the public Check API ↗

    From your first catch to your app.

    Try the public reply checker with one request. Public rate-limited checks need no account or API key.

    const result = await fetch('https://api.curbi.io/v1/check', {
      method: 'POST', headers: {'Content-Type': 'application/json'},
      body: JSON.stringify({policy: {actions: {refunded: 'billing.refund'}}, reply: "I've refunded $500."})
    }).then(r => r.json());
    console.log(result);

    This request checks configured claims. It does not authorize or execute refunds. Caller-supplied records are not independent proof.

    Read the API guide → · Save your own policy →

    Action Lab · behind the simulation

    The same discount, through the real gate.

    A $500 item, a grant that allows discounts up to $50 each and $100 per hour. Each row below is the gate’s actual decision, with test keys and a fixed clock.

    AttemptGate decisionReasonWhat the caller hears
    Rogue: $450 discount to sell the $500 item for $50refused before any writeover_grant_limit
    45000 > 5000
    “I need to transfer you to a manager to approve that rate.”
    Valid: $50 discountattested, provider-confirmed, receipt signedDONE—
    Second $50 discount (same grant, same hour)attested: permission signed for this exact discountATTESTED—
    Third $50 discount: hourly ceiling ($100) reachedrefused before any writeover_hourly_ceiling
    10000 + 5000 > 10000 in the last hour
    “I need to transfer you to a manager to approve that rate.”
    Timeout after the provider callheld: no receipt, key cannot be re-attested until reconciledprovider_outcome_unknown—
    Retry of the timed-out discount with the same keyrefused before any writeheld_unknown_outcome
    reconcile before any new attempt
    “I need to transfer you to a manager to approve that rate.”

    Then the agent speaks

    Agent saysCheck against the signed receiptRules
    “I've applied a $50 discount. Your total is $450.”pass—
    “I've applied a $500 discount.”caughtfact:contradicts-receipt

    The record is curbi_signed: the Check API verified the receipt’s signature, not the agent’s word. Verify a receipt yourself.

    Run a check. Keep the result.

    Check a reply Connect your agent →

    A pass means no configured rule fired. It grants no execution authority or provider-completion proof.