# Honest Refusal Contract: Refused Requests Are Never Billed

## Summary

AgentBadge publishes a machine-readable refusal contract at `GET /api/meta/refusal-contract` (zod `version:"1.0"`). Every refusal body carries `charged:false`. The x402 settle seam is two-phase — `verify()` then `commit()` or `refuse(code)` — so declined requests never settle. Self-settled payments that already landed on-chain (Arc `eip3009-client-broadcast`) get an auto-refund: a `refund_log` record plus a `refund:{status, tx}` block in the refusal body.

## Refusal Matrix

| Code | HTTP | Charge | Refund |
|------|------|--------|--------|
| `policy_refusal` | 409 | never | — |
| `insufficient_subject` | 422 | never | — |
| `execution_failed` | 502 | never | auto |
| `data_unavailable` | 503 | never | — |

`data_unavailable` (503) means upstream data is down — refused, never billed, never answered with stale data presented as fresh.

## Degraded & Honest-Zero

- Degraded paid-surface responses carry top-level `degraded:true`, `data_status:"fresh"|"stale"|"unavailable"`, `stale_since` (ISO-8601).
- Empty collections return `[]` + `note:"no_data"` — never synthetic placeholder rows (CI lint enforces this).
- Only free-tier responses may carry degraded markers; paid requests on unavailable data are refused.

## Disclosure

Unilateral decisions (evaluator reject, client cancel on venue jobs) carry `disclosure:{decided_by, appeal, basis}` — who decided, on what basis, where to appeal.

## Endpoints

| Need | Endpoint |
|------|----------|
| Machine-readable refusal contract | `GET /api/meta/refusal-contract` |
| Error catalog with recovery actions | `GET /api/meta/errors` |
| Service catalog (canonical prices) | `GET /api/v1/services` |
| LLM entry point (refusal section) | `GET /llms.txt` |
| Verification policy (§9) | `GET /verification.md` |

## Verify It

`402 accepts[].amount` is canonical price truth — verify against `priceBaseUnits` in the service catalog. Clients can reconcile `charged:false` refusal bodies against their own ledger; any refusal that settled is a bug report.

## Links

- Blog article: https://agentbadge.xyz/blog/arc-c17-honest-refusal
- Refusal contract: https://agentbadge.xyz/api/meta/refusal-contract
- llms.txt: https://agentbadge.xyz/llms.txt



    <section class="mt-8 rounded-xl border border-emerald-800/30 bg-slate-900/50 p-6">
      <h3 class="text-lg font-bold text-slate-100">Relevant Engineering Capabilities</h3>
      <p class="mt-1 text-sm text-slate-400">The AgentBadge team can help with what you're reading about.</p>
      <div class="mt-4 grid gap-3">
        
        <div class="rounded-lg border border-slate-700 bg-slate-800/50 p-4">
          <div class="flex items-center justify-between">
            <h4 class="text-sm font-semibold text-emerald-400">AI Agent Architecture</h4>
            <span class="text-xs text-slate-400">Confidence: 0.93</span>
          </div>
          <p class="mt-1 text-xs text-slate-400">Design and implementation of AI agent infrastructure, agent APIs, machine-readable interfaces, and agent tooling.
</p>
          <div class="mt-2 flex items-center gap-3 text-xs text-slate-500">
            <span>People: Paul</span>
            <span>Status: VERIFIED</span>
          </div>
        </div>
        <div class="rounded-lg border border-slate-700 bg-slate-800/50 p-4">
          <div class="flex items-center justify-between">
            <h4 class="text-sm font-semibold text-emerald-400">Backend Development</h4>
            <span class="text-xs text-slate-400">Confidence: 0.92</span>
          </div>
          <p class="mt-1 text-xs text-slate-400">Node.js, NestJS, PostgreSQL, Redis, REST APIs, and event-driven systems.
</p>
          <div class="mt-2 flex items-center gap-3 text-xs text-slate-500">
            <span>People: Paul</span>
            <span>Status: VERIFIED</span>
          </div>
        </div>
      </div>
      
        <div class="mt-3">
          <p class="text-xs text-slate-500 mb-1">Related services:</p>
          <div class="flex flex-wrap gap-2">
            <span class="text-xs rounded-full bg-slate-700 px-2 py-1 text-slate-300">AI Agent Consulting</span>
          </div>
        </div>
      <div class="mt-4">
        <a href="/agent-guide/team/capabilities" class="inline-flex items-center text-sm font-medium text-emerald-400 hover:text-emerald-300">
          View all capabilities →
        </a>
      </div>
    </section>