{
  "generated_from": "live_platform_state",
  "spec": "a2ally-partner-verdict-v1",
  "partners": {
    "rule": "Partner verdict rule: GET /v1/partners/verdict/{slug} with an account key (the presented account key IS the partner key in this slice) serves the ERC-8004 meaning document for that identity, reshaped as a partner verdict: the identity citation (the canonical ERC-8004 global address, chain and agent id, with the RS-KYA citation block carried unchanged — kya_registration verbatim, is_rs_kya_registration false, no a2ally-native identity format), the deterministic verdict with its reasons under the meaning layer's verdict rule printed verbatim, the liveness summary, and the receipt-bound reputation with n printed beside every aggregate and each counted entry resolving to its sealed ledger record, with the ERC-8004 Reputation Registry counts shown separately as registry_published and never counted in. Error answers are the meaning layer's own: an unsupported chain answers 422, an unminted token 404, an unresolved or unreachable chain read 502. An anonymous call answers 401: a partner key is required on this surface, while the same meaning document stays free without a key at GET /v1/erc8004-meaning/{slug}.",
    "verdict_rule": "ERC-8004 meaning verdict rule: if the registration file status is not read, or no service endpoints are declared in it, the verdict is insufficient_history. Otherwise, if any checked service endpoint is not ok, the verdict is proceed_with_caution. Otherwise, if no declared endpoint could be checked, the verdict is proceed_with_caution. Otherwise, if the receipt-bound count (sealed a2ally ledger entries under the identity's declared wallet) is at least 1, the verdict is proceed. Otherwise — every checked endpoint ok but no receipt-bound history — the verdict is proceed_with_caution.",
    "limits_note": "The verdict is plain arithmetic over the resolver document, live endpoint probes and sealed ledger entries only, not a credit decision, not financial or legal advice, not a guarantee of performance; insufficient_history means the registration file could not be read or declares no service endpoints — it is NOT a negative finding about the agent; a proceed verdict does not guarantee the counterparty will perform. No avoid verdict exists for external ERC-8004 identities: a2ally holds no suspension record for an identity it did not register, so this surface never issues avoid.",
    "callable_surfaces": [
      "GET /v1/partners/verdict/{slug} (partner key: any account key) — one ERC-8004 identity's partner verdict by slug eip155-{chain_id}-{agent_id}: the meaning layer's identity citation, verdict, liveness and receipt-bound reputation, plus the partner block (served_to, the caller's pseudonymous account reference, the decided D1 price and charged_today false); metered by count, nothing charged today",
      "GET /v1/partners (free, no key) — this index document: the partner verdict rule, the meaning layer's verdict rule and limits carried verbatim, the callable surfaces, the chains read, the decided D1 pricing block, the partner tier block, the founder rule and live aggregate metering counts",
      "POST /v1/partners/register (partner key: any account key) — register or update the calling account's own partner profile: body partner_class, one of explorer, venue, directory, toolkit; returns the calling account's own partner document only (its pseudonymous account reference, partner_class, affiliated flag, the tier block and its own metering)",
      "GET /v1/partners/me (partner key: any account key) — the calling account's own partner document, or registered false when the account holds no partner profile",
      "GET /v1/erc8004-meaning/{slug} (free, no key) — the free meaning document this verdict is composed from; untouched and still free",
      "GET /v1/erc8004-meaning (free, no key) — the meaning layer index: the meaning rule, verdict rule and limits in full",
      "GET /v1/partners/guide (free, no key) — the partner integration guide as data: the 15-minute integration steps, the neutrality commitments, the decided D1 pricing and the partner tier block, the founder rule for partner_verdict, and the partner-zero dogfood block (a2ally, affiliated, slug eip155-1-1); reading it is free and side-effect-free",
      "GET /for-partners (free, no key) — the partner integration guide as a page, with a markdown twin at /for-partners.md, carrying the same steps, neutrality commitments, pricing and dogfood embed as the guide document",
      "POST /v1/partners/outcome-receipts (partner key: any account key) — venue outcome-ingest: a venue submits a completed-job outcome (venue_id, job_ref, seller_identity and buyer_identity as ERC-8004 slugs, outcome_class, optional note) which is sealed as an A10 input record attributed to that venue as its source; free, charged_today false",
      "GET /v1/partners/outcome-receipts (partner key: any account key) — the calling account's own submitted venue outcomes only, with its own totals by outcome class; another account's records never appear"
    ],
    "chains": [
      {
        "chain_id": 1,
        "label": "Ethereum mainnet",
        "testnet": false,
        "identity_registry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
        "reputation_registry": "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63"
      },
      {
        "chain_id": 11155111,
        "label": "Ethereum Sepolia testnet",
        "testnet": true,
        "identity_registry": "0x8004A818BFB912233c491871b3d84c89A494BD9e",
        "reputation_registry": "0x8004B663056A597Dffe9eCcC1965A193B7388713"
      }
    ],
    "pricing": {
      "decision": "D1",
      "status": "decided_recorded",
      "amount_usd_cents": 2,
      "price": "$0.02/call",
      "unit": "per call",
      "charged_today": false,
      "charged_today_reason": "No partner billing rail is armed in this slice: partner verdict calls are metered by count only and nothing is charged today.",
      "pricing_url": "https://www.a2ally.com/pricing"
    },
    "pricing_rule": "Pricing rule: the partner verdict price is the decided D1 price (PROGRAM.md decision D1, recorded): $0.02/call for verdict API calls by non-subscribers. Nothing is charged today — charged_today is false — because no partner billing rail is armed in this slice: calls are metered by count only, one count per served verdict (an HTTP 200 answer), keyed by the calling account. No other price exists on this surface and no price is invented here.",
    "tier": {
      "id": "partner_tier",
      "verdict_price": {
        "decision": "D1",
        "status": "decided_recorded",
        "amount_usd_cents": 2,
        "price": "$0.02/call",
        "unit": "per call",
        "charged_today": false,
        "charged_today_reason": "No partner billing rail is armed in this slice: partner verdict calls are metered by count only and nothing is charged today.",
        "pricing_url": "https://www.a2ally.com/pricing"
      },
      "bundle_anchor": {
        "amount_usd_cents": 9900,
        "price": "$99/mo",
        "status": "recommended_recorded_not_decided",
        "source": "Lane 8 §D parameters / Lane 2 $99/mo platform-subscription anchor — a recommendation, NOT a decided price"
      },
      "charged_today": false,
      "rate_limits": {
        "enforced": false,
        "status": "not_enforced_in_this_slice",
        "note": "Monthly call counts are metered and printed, but no rate limit is enforced yet in this slice."
      },
      "founder": {
        "feature": "partner_verdict",
        "kind": "per_call",
        "slots_total": 10,
        "slots_claimed": 0,
        "slots_left": 10,
        "per_account_cap": 3,
        "rule": "Founder rule: the partner verdict is a new per-call fee line (feature partner_verdict), so it launches with 10 founder slots under the settled rule for new per-call lines, and an account may hold founder slots on at most 3 distinct fee features; beyond that cap the decided price applies. No founder claim is recorded by a partner verdict call in this slice, because a founder slot is claimed on first charged use of a fee feature and nothing is charged today — the claimed count below is read live from the founder registry and is zero until a charged-use claim path exists for this feature.",
        "claims_recorded_by_this_surface": false
      }
    },
    "founder": {
      "feature": "partner_verdict",
      "kind": "per_call",
      "slots_total": 10,
      "slots_claimed": 0,
      "slots_left": 10,
      "per_account_cap": 3,
      "rule": "Founder rule: the partner verdict is a new per-call fee line (feature partner_verdict), so it launches with 10 founder slots under the settled rule for new per-call lines, and an account may hold founder slots on at most 3 distinct fee features; beyond that cap the decided price applies. No founder claim is recorded by a partner verdict call in this slice, because a founder slot is claimed on first charged use of a fee feature and nothing is charged today — the claimed count below is read live from the founder registry and is zero until a charged-use claim path exists for this feature.",
      "claims_recorded_by_this_surface": false
    },
    "metering": {
      "partner_calls_counted": true,
      "counted_from": "kv namespace partner_verdict_calls — one count per authenticated partner verdict call that served a verdict (HTTP 200), keyed by the calling account",
      "rule": "Metering rule: partner_calls_counted is true — each partner verdict call that serves a verdict (HTTP 200) adds exactly one to the calling account's count in the partner verdict call store (kv namespace partner_verdict_calls, keyed by account), records the served identity's slug in that account's distinct identities list when a slug is served, and adds one to that account's count for the call instant's UTC month (YYYY-MM) in calls_by_month; error answers (401, 404, 422, 502) are never counted, and no other state is stored for this surface except a partner profile when the account registers one (kv namespace partner_profiles, keyed by account). Aggregate usage in the index document is the live sum of those per-account counts, with the distinct partner account count and the size of the union of the stored distinct identities printed beside it; no account reference ever appears in the index document."
    },
    "outcome_ingest": {
      "rule": "Venue outcome rule: POST /v1/partners/outcome-receipts with an account key (the partner key) records one venue outcome — venue_id, job_ref, seller_identity and buyer_identity (the two parties' resolved ERC-8004 identities, as slugs, which must differ), outcome_class (one of completed, completed_disputed, disputed, failed, ambiguous) and an optional note. The outcome is sealed to the ledger as an activity.receipt entry whose payload carries hashes and ids only, and stored as a sealed A10 input record attributed to the submitting venue as its source: the venue_id rides the record. All records on this surface are venue-self-reported — a venue reporting outcomes from its own venue is by construction reporting about itself — and every served record is labeled venue_self_reported. No live chain resolution happens on ingest. Outcome ingest is free: charged_today is false and no price exists on this surface.",
      "outcome_classes": [
        {
          "outcome_class": "completed",
          "definition": "The job was completed and neither party disputes the outcome."
        },
        {
          "outcome_class": "completed_disputed",
          "definition": "The job was completed, but one or both parties dispute some part of the outcome."
        },
        {
          "outcome_class": "disputed",
          "definition": "The parties disagree about the job or its outcome and the job is not recorded as completed."
        },
        {
          "outcome_class": "failed",
          "definition": "The job was not completed."
        },
        {
          "outcome_class": "ambiguous",
          "definition": "The venue cannot classify the outcome confidently from the records it holds."
        }
      ],
      "a10": {
        "input_status": "sealed_input_record",
        "direct_score_points": 0,
        "graph_modified": false,
        "rule": "A10 weighting rule: venue outcome records are sealed A10 INPUT RECORDS attributed to the venue; under A10's existing rules (the receipt-bound reputation graph, four inputs, unchanged) a standalone venue report scores ZERO direct points: the reputation graph is NOT modified, no new input or component is invented, and a venue outcome can corroborate but never substitute for the sealed marketplace records A10 already counts."
      },
      "source": "venue_self_reported",
      "venue_self_reported": true,
      "charged_today": false,
      "callable_surfaces": [
        "POST /v1/partners/outcome-receipts (partner key: any account key) — submit one venue outcome: venue_id, job_ref, seller_identity, buyer_identity, outcome_class and an optional note; the sealed outcome record view is returned with charged_today false",
        "GET /v1/partners/outcome-receipts (partner key: any account key) — the calling account's own submitted venue outcomes only, newest first, with its own totals by outcome class",
        "GET /v1/partners (free, no key) — the partner index document, whose outcome_ingest block carries the outcome classes with their definitions, the A10 weighting rule and the callable surfaces, and whose usage counts carry the live outcome totals by class",
        "GET /v1/partners/guide (free, no key) — the partner integration guide, whose outcome_ingest block defines the disputed and ambiguous outcome classes and prints the A10 weighting rule"
      ]
    }
  },
  "usage": {
    "partner_verdict_calls_total": 0,
    "partner_accounts_total": 0,
    "distinct_identities_via_partners_total": 0,
    "outcome_receipts_total": 0,
    "outcome_receipts_by_class": {
      "completed": 0,
      "completed_disputed": 0,
      "disputed": 0,
      "failed": 0,
      "ambiguous": 0
    },
    "chains_supported": 2,
    "note": "Usage is the live sum of the per-account partner verdict call counts at the moment of the read; zeros are shown as zeros and no account reference is printed here. Outcome totals count venue outcome records from live accounts only (sandbox and canary accounts excluded), computed live from kv namespace partner_outcome_receipts; the public totals show counts only, never a venue name."
  },
  "charged_today": false,
  "pricing_url": "https://www.a2ally.com/pricing",
  "note": "Every verdict in this document is the ERC-8004 meaning document for the same identity, computed live at the moment of the read by the meaning layer: the resolution is a live chain read, liveness is probed at this read, and the receipt-bound count is exactly the sealed a2ally ledger entries under the identity's declared wallet. The ERC-8004 Reputation Registry counts are that registry's published counts, shown separately as registry_published; they are not sealed a2ally receipts and are never counted into the receipt-bound number. No number is invented and zeros are shown as zeros. The only caller fact in a partner verdict is the calling account's pseudonymous reference; no other account's data, and no contact data, ever appears. Nothing is charged today: no partner billing rail is armed in this slice, so partner verdict calls are metered by count only. The free meaning endpoint (GET /v1/erc8004-meaning/{slug}, no key) is untouched and stays free — this partner endpoint is the metered distribution surface, and verification stays free."
}