{
  "generated_from": "live_platform_state",
  "spec": "a2ally-partner-guide-v1",
  "guide": {
    "title": "For partners: the 15-minute integration",
    "rule": "Partner guide rule: GET /v1/partners/guide (free, no key) and the /for-partners page with its markdown twin carry the 15-minute partner integration in four steps — create an account and get its account key, register the partner profile, call the metered partner verdict, and embed the verdict — plus the neutrality commitments, the pricing exactly as recorded (the decided D1 verdict price and the partner tier block, reused unchanged), the founder rule for partner_verdict, and the partner-zero dogfood block. Reading the guide, the page or the twin is free and side-effect-free: it creates no partner_verdict_calls metering increment and no other record.",
    "integration_steps": [
      {
        "step": 1,
        "title": "Create an account and get the account key",
        "call": "POST /v1/accounts/signup",
        "detail": "Create an a2ally account and keep its account key: in this slice the presented account key IS the partner key — the same key authenticates the register call and every metered verdict call."
      },
      {
        "step": 2,
        "title": "Register as a partner",
        "call": "POST /v1/partners/register",
        "detail": "Register or update the calling account's own partner profile with the account key: body partner_class, one of explorer, venue, directory, toolkit. The answer is the calling account's own partner document only — its pseudonymous account reference, partner_class, affiliated flag, the tier block and its own metering."
      },
      {
        "step": 3,
        "title": "Call the partner verdict (metered)",
        "call": "GET /v1/partners/verdict/{slug}",
        "detail": "With the account key, GET /v1/partners/verdict/{slug} for slug eip155-{chain_id}-{agent_id} serves one ERC-8004 identity's verdict: the identity citation, the deterministic verdict under the printed rule, liveness and receipt-bound reputation. Each served verdict (HTTP 200) is metered by count for the calling account; error answers are never counted. The same meaning document stays free without a key at GET /v1/erc8004-meaning/{slug}."
      },
      {
        "step": 4,
        "title": "Embed the verdict",
        "call": "GET /v1/partners/card/{slug}",
        "detail": "Embed the same verdict data three ways: the card document at GET /v1/partners/card/{slug} (free, no key, with the iframe and link snippets), the canonical human page at /agents/erc8004/{slug} (with a markdown twin), or the standalone embed page at /embed/erc8004/{slug} dropped into an iframe. Card, page and embed reads are free and side-effect-free — no metering increment; metering stays only on the verdict call in step 3."
      }
    ],
    "neutrality": {
      "placement_never_sold": true,
      "subject_can_pay_to_alter": false,
      "subject_can_pay_to_suppress": false,
      "subject_can_pay_to_expedite": false,
      "statement": "Neutrality: placement is never sold, and the subject of a verdict can never pay to alter, suppress or expedite it. That refusal is a feature of the partner program, stated here and printed on every trust card: a verdict is the deterministic output of the printed verdict rule over the live chain read, the live endpoint probes and the sealed ledger entries — nothing else moves it, for paying and non-paying subjects alike."
    },
    "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"
    },
    "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
    },
    "dogfood": {
      "label": "Partner zero: a2ally (affiliated)",
      "affiliated": true,
      "slug": "eip155-1-1",
      "canonical_page": "https://www.a2ally.com/agents/erc8004/eip155-1-1",
      "embed_page": "https://www.a2ally.com/embed/erc8004/eip155-1-1",
      "card_data": "https://www.a2ally.com/v1/partners/card/eip155-1-1",
      "iframe_snippet": "<iframe src=\"https://www.a2ally.com/embed/erc8004/eip155-1-1\" title=\"a2ally trust card — ERC-8004 agent eip155-1-1\" width=\"420\" height=\"360\" style=\"border:1px solid #d0d7de;border-radius:8px\" loading=\"lazy\"></iframe>",
      "scope_note": "Dogfood applies where the subject is an ERC-8004 identity — the canonical agent pages (/agents/erc8004/{slug}) and this guide. Other a2ally surfaces whose subjects are not ERC-8004 identities do not render ERC-8004 verdicts; they link to the card instead.",
      "partner_calls_counted": false
    },
    "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"
      ]
    },
    "callable_surfaces": [
      "GET /v1/partners/guide (free, no key) — this guide document: the integration steps, the neutrality commitments, the decided D1 pricing and the partner tier block, the founder rule, and the partner-zero dogfood block",
      "GET /for-partners (free, no key) — the partner guide as a page, with a markdown twin at /for-partners.md",
      "POST /v1/accounts/signup — step 1: create an account and get its account key (the account key is the partner key in this slice)",
      "POST /v1/partners/register (partner key: any account key) — step 2: register or update the calling account's own partner profile with partner_class",
      "GET /v1/partners/verdict/{slug} (partner key: any account key) — step 3: one ERC-8004 identity's metered partner verdict by slug eip155-{chain_id}-{agent_id}",
      "GET /v1/partners/card/{slug} (free, no key) — step 4: one ERC-8004 identity's trust card as data, with the embed snippets; reading it creates no metering increment",
      "GET /agents/erc8004/{slug} (free, no key) — step 4: the canonical human page for one ERC-8004 identity, with a markdown twin",
      "GET /embed/erc8004/{slug} (free, no key) — step 4: the standalone embed page for one ERC-8004 identity, suitable for an iframe",
      "GET /v1/partners (free, no key) — the partner verdict index document: the rules, the pricing and tier blocks, the founder rule and live aggregate metering counts",
      "GET /v1/partners/me (partner key: any account key) — the calling account's own partner document",
      "POST /v1/partners/outcome-receipts (partner key: any account key) — venue outcome-ingest: submit one completed-job outcome (venue_id, job_ref, seller_identity, buyer_identity, outcome_class, optional note), sealed as an A10 input record attributed to the venue; the outcome classes and the A10 weighting rule are in this guide's outcome_ingest block",
      "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"
    ]
  },
  "charged_today": false,
  "pricing_url": "https://www.a2ally.com/pricing",
  "page": "/for-partners",
  "note": "Every price in this guide is stated exactly as already recorded: the partner verdict price is the decided D1 price, and the partner bundle anchor is a recorded recommendation, not a decided price. Nothing is charged today — charged_today is false — because no partner billing rail is armed: partner verdict calls are metered by count only. Reading this guide is free and side-effect-free, and verification stays free."
}