A2A Peptides/Powered by gtinfetch.ai
DOCS · THE DOOR OF RECORD

Docs

The Model Context Protocol (MCP) door at version 1.8.3: 20 tools in seven groups over one ontology, answering from records whose every field carries its source page. Read live from the door: 177 substances · 5,301 presentations · 24,694 providers · 9 rule sets in force. This page is the reference; the Agent Card is the discovery document; the setup page is the connection page.

§00 · CONNECT

Connect

  • Endpoint — https://mcp.a2a-peptides.ai/mcp
  • Transport — streamable-http, protocol 2025-06-18
  • Accept — application/json, text/event-stream
  • Reads — no authentication
  • Transacting tools — a client-credentials Bearer from https://peptides-registry.ai/oauth/register
§01 · ONTOLOGY

Ontology

substance × presentation × jurisdiction × pathway × actor.

  • Jurisdictions (9) — US · CA · MX · EU (member as parameter) · UK · KR · JP · SG · CH (UK is stored as the ISO code in machine fields and written UK everywhere a person reads).
  • Pathways — licensed medicine · lawful compounding (503A and 503B, provincial, magistral, specials) · cosmetic · food or supplement · ruo_not_cleared (status only).
  • Actors — authorized_trading_partner and its members (manufacturer · repackager · wholesale_distributor · dispenser · third_party_logistics_provider; cosmetic_responsible_person · nhp_licence_holder on the non-drug pathways) · prescriber · patient · public · agent (a bearer from the issuer carries the class).
  • Gate order — resolve_jurisdiction → resolve_actor → gate_transaction. No price, availability, order or handoff tool answers before an allow or require_rx exists. On an x402 receipt: order-intent receipts carry decision_id and reason_code; every receipt carries the notice; resolve receipts carry jurisdiction and rule_set_version when the tool takes a jurisdiction. A refused order intent is not settled and not charged.
§02 · GATE

Gate

  • Resolve Jurisdiction resolve_jurisdiction — reads only
    Resolve a ship-to (e.g. 'US-CA', 'CA-ON', 'MX', 'EU-DE', 'UK', 'KR', 'JP', 'SG', 'CH') to the gate's jurisdiction (US · CA · MX · EU · UK · KR · JP · SG · CH; UK is the jurisdiction name; the ISO 3166-1 code is accepted as input, machine fields carry the ISO code and jurisdiction_label carries UK), the EU member and any state, provincial or cantonal overlay.
    Inputs, example, output, errors
    • ship_to string — required

    Example input

    {
     "ship_to": "US-FL"
    }

    Example output (a real answer from the door)

    {
     "jurisdiction": "US",
     "member": null,
     "overlay": "FL",
     "jurisdiction_label": "US",
     "rule_set_version": "v1.2-2026-09-17",
     "notice": {
      "text": "This answer reflects US rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": "US",
      "jurisdiction_label": "US",
      "rule_set_version": "v1.2-2026-09-17",
      "regulator": "https://www.fda.gov/"
     }
    }

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_JURISDICTION — the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH

    Bad input in the run ({"ship_to": "ZZ"}) answered: {"reason_code": "DENY_JURISDICTION", "detail": "'ZZ' does not resolve: use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH"}

  • Resolve Actor resolve_actor — reads only
    Resolve the actor class and channel. Classes: authorized_trading_partner and its members (manufacturer · repackager · wholesale_distributor · dispenser · third_party_logistics_provider; cosmetic_responsible_person · nhp_licence_holder on the non-drug pathways), prescriber, the referral classes patient and public, and agent (inherits the class of the credential it presents; none returns DENY_UNLICENSED_AGENT). Returns communication_class: trade_information or public.
    Inputs, example, output, errors
    • actor_class string — required
    • credential string|null

    Example input

    {
     "actor_class": "dispenser"
    }

    Example output (a real answer from the door)

    {
     "actor_class": "dispenser",
     "parent_class": "authorized_trading_partner",
     "channel": "B2B",
     "communication_class": "trade_information",
     "credential_presented": true,
     "bearer": {
      "client_id": "a2ap_b956da16ad3d1af678bde4a6",
      "client_name": "Claude directory reviewer (standing test client)",
      "scope": "peptides.read peptides.transact",
      "iss": "https://peptides-registry.ai"
     },
     "notice": {
      "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": null,
      "rule_set_version": null,
      "regulator": null
     }
    }

    Errors this tool can return

    • DENY_ACTOR_CLASS — the actor class is not one of the classes of record — the detail lists them

    Bad input in the run ({"actor_class": "wizard"}) answered: {"reason_code": "DENY_ACTOR_CLASS", "detail": "unknown actor class; one of ['authorized_trading_partner', 'manufacturer', 'repackager', 'wholesale_distributor', 'dispenser', 'third_party_logistics_provider', 'cosmetic_responsible_person', 'nhp_licence_holder',

  • Gate Transaction gate_transaction — reads only
    The gate: allow, deny or require_rx for a substance (name, INN or unii:), a pathway (licensed_medicine · lawful_compounding · cosmetic · food_or_supplement · ruo_not_cleared), an actor class, a channel and a ship-to. Returns a frozen reason code, the rule-set version, the source page and a decision_id for the downstream tools.
    Inputs, example, output, errors
    • substance string — required
    • pathway string — required
    • actor_class string — required
    • ship_to string — required
    • channel string|null
    • credential string|null

    Example input

    {
     "substance": "tirzepatide",
     "pathway": "licensed_medicine",
     "actor_class": "dispenser",
     "ship_to": "US-FL"
    }

    Example output (a real answer from the door)

    {
     "substance": "tirzepatide",
     "pathway": "licensed_medicine",
     "actor_class": "dispenser",
     "channel": "B2B",
     "ship_to": "US-FL",
     "jurisdiction": "US",
     "member": null,
     "overlay": "FL",
     "rule_set_version": "v1.2-2026-09-17",
     "decided_at": "2026-09-18T21:36:44.856609+00:00",
     "substance_unii": "OYN3CCI6QE",
     "substance_name": "Tirzepatide",
     "status": "approved_drug",
     "source_url": "https://www.accessdata.fda.gov/scripts/cder/daf/index.cfm?event=overview.process&ApplNo=215866",
     "communication_class": "trade_information",
     "parent_class": "authorized_trading_partner",
     "actor_class_equivalent": "DSCSA authorized trading partner (licence or registration held)",
     "result": "allow",
     "reason_code": "ALLOW",
     "reason": "approved_drug on the register; licensed supply to a dispenser (DSCSA authorized trading partner (licence or registration held))",
     "bearer": {
      "client_id": "a2ap_b956da16ad3d1af678bde4a6",
      "client_name": "Claude directory reviewer (standing test client)",
      "scope": "peptides.read peptides.transact",
      "iss": "https://peptides-registry.ai"
     },
     "decision_id": "gate_96e32e675fbd11d26679",
     "notice": {
      "text": "This answer reflects US rules (rule set v1.2-202
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_ACTOR_CLASS — the actor class is not one of the classes of record — the detail lists them
    • DENY_CONTROLLED — a controlled substance in the jurisdiction
    • DENY_CROSS_BORDER — the ship-to is outside the licensed party's jurisdiction
    • DENY_PATHWAY_NOT_CLEARED — the substance has no cleared row on that pathway in that jurisdiction — the source page on the answer says what the register holds
    • DENY_RUO — research-use stock: not listed and not sold
    • DENY_STATE_OVERLAY — a state or provincial overlay tightens the federal pass
    • REQUIRE_RX — allowed with a prescription accompanying the order intent

    Bad input in the run ({"substance": "tirzepatide", "pathway": "teleport", "actor_class": "dispenser", "ship_to": "US-FL"}) answered: {"reason_code": "DENY_PATHWAY_NOT_CLEARED"}

§03 · REGULATORY TRUTH

Regulatory truth

  • Get Substance Record get_substance_record — reads only
    One molecule: identifiers (INN, UNII, CAS, sequence hash), sourced aliases, class, one pathway row per jurisdiction × pathway, enforcement events, safety references. Every field carries its source page.
    Inputs, example, output, errors
    • substance string — required

    Example input

    {
     "substance": "semaglutide"
    }

    Example output (a real answer from the door)

    {
     "ids": {
      "unii": {
       "value": "53AXN4NNHX",
       "source_url": "https://gsrs.ncats.nih.gov/ginas/app/beta/substances/6008afca-8b87-4b98-9c27-3a6878147556",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T01:52:50+00:00",
       "state": "current",
       "extra_source": "https://gsrs.ncats.nih.gov/api/v1/substances/search?q=root_names_name:%22SEMAGLUTIDE%22&top=5"
      },
      "inn": {
       "value": null,
       "source_url": "https://gsrs.ncats.nih.gov/ginas/app/beta/substances/6008afca-8b87-4b98-9c27-3a6878147556",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T01:52:50+00:00",
       "state": "current"
      },
      "cas": {
       "value": "910463-68-2",
       "source_url": "https://gsrs.ncats.nih.gov/ginas/app/beta/substances/6008afca-8b87-4b98-9c27-3a6878147556",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T01:52:50+00:00",
       "state": "current"
      },
      "preferred_name": {
       "value": "Semaglutide",
       "source_url": "https://gsrs.ncats.nih.gov/ginas/app/beta/substances/6008afca-8b87-4b98-9c27-3a6878147556",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T01:52:50+00:00",
       "state": "current"
      },
      "sequence_hash": {
       "value": "9c3b2121509a5cafd900
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"substance": ""}) answered: {"error": "BAD_INPUT", "detail": "substance must not be empty: give an INN, a preferred name, an alias, or unii:<UNII>"}

  • Get Pathway Status get_pathway_status — reads only
    The status of a substance on one pathway in one jurisdiction (frozen vocabulary), with effective date, rule-set version and source page.
    Inputs, example, output, errors
    • substance string — required
    • jurisdiction string — required
    • pathway string — required

    Example input

    {
     "substance": "semaglutide",
     "jurisdiction": "CA",
     "pathway": "licensed_medicine"
    }

    Example output (a real answer from the door)

    {
     "jurisdiction": "CA",
     "pathway": "licensed_medicine",
     "status": {
      "value": "approved_drug",
      "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=101776",
      "read_by": "cc-register-reader",
      "read_at": "2026-09-18T01:59:08+00:00",
      "state": "current"
     },
     "rule_set_version": "v1.2-2026-09-17",
     "effective_date": {
      "value": null,
      "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=101776",
      "read_by": "cc-register-reader",
      "read_at": "2026-09-18T01:59:08+00:00",
      "state": "current"
     },
     "state": "current",
     "dins": [
      "02471469",
      "02497581",
      "02497603",
      "02497611",
      "02528509",
      "02528517",
      "02528525",
      "02528533",
      "02528541",
      "02540258",
      "02551012",
      "02551020",
      "02551039",
      "02552698",
      "02567806",
      "02567814",
      "02568012",
      "02568020"
     ],
     "brands": [
      "APO-SEMAGLUTIDE INJECTION",
      "OZEMPIC",
      "RYBELSUS",
      "SEMAGLUTIDE INJECTION",
      "WEGOVY"
     ],
     "notice": {
      "text": "This answer reflects CA rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an informa
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_JURISDICTION — the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH

    Bad input in the run ({"substance": "semaglutide", "jurisdiction": "XX", "pathway": "licensed_medicine"}) answered: {"error": "DENY_JURISDICTION", "reason_code": "DENY_JURISDICTION", "detail": "jurisdiction must be one of US, CA, MX, EU, UK, KR, JP, SG or CH (a state, province or member may follow, e.g. US-FL, CA-ON, EU-DE)"}

  • Get Compounding Eligibility get_compounding_eligibility — reads only
    Whether a substance may be lawfully compounded in a jurisdiction and under which list or standard (503A/503B, provincial, magistral, Specials), from the register.
    Inputs, example, output, errors
    • substance string — required
    • jurisdiction string — required

    Example input

    {
     "substance": "BPC-157",
     "jurisdiction": "US"
    }

    Example output (a real answer from the door)

    {
     "substance": "8ED8NXK95P",
     "jurisdiction": "US",
     "row": null,
     "rules_of_record": [
      {
       "substance_or_class": "BPC-157|KPV|TB-500|MOTS-c|epitalon|semax",
       "pathway": "lawful_compounding",
       "actor_class": "*",
       "channel": "*",
       "ship_to": "US",
       "result": "deny",
       "reason_code": "DENY_PATHWAY_NOT_CLEARED",
       "communication_class": "public",
       "source_url": "https://www.fda.gov/media/94155/download?attachment",
       "effective_date": "2026-09-17",
       "note": "PCAC recommended, rulemaking pending → 503A_recommended_pending, NOT listed"
      },
      {
       "substance_or_class": "*",
       "pathway": "*",
       "actor_class": "*",
       "channel": "*",
       "ship_to": "US",
       "result": "deny",
       "reason_code": "DENY_PATHWAY_NOT_CLEARED",
       "communication_class": "public",
       "source_url": "https://a2a-peptides.ai/docs",
       "effective_date": "2026-09-17",
       "note": "default: no cleared pathway row → deny"
      }
     ],
     "rule_set_version": "v1.2-2026-09-17",
     "eligible": false,
     "notice": {
      "text": "This answer reflects US rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
      "disclaimer": "Artificial intelligence makes mistake
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_JURISDICTION — the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"substance": "unobtainium-9", "jurisdiction": "US"}) answered: {"error": "NOT_ON_GRAPH"}

  • Get Label And Indication get_label_and_indication — reads only
    Label and indication pointers for a licensed presentation only (US package NDC, CA DIN, EU EMA number).
    Inputs, example, output, errors
    • presentation_id string — required

    Example input

    {
     "presentation_id": "DIN02540258"
    }

    Example output (a real answer from the door)

    {
     "presentation": {
      "din": {
       "value": "02540258",
       "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T01:59:08+00:00",
       "state": "current",
       "extra_source": "https://health-products.canada.ca/api/drug/drugproduct/?lang=en&id=102895"
      },
      "drug_code": {
       "value": 102895,
       "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T01:59:08+00:00",
       "state": "current"
      }
     },
     "jurisdiction": "CA",
     "bsfrdp_d": {
      "brand": "OZEMPIC",
      "strength": "0.68 MG",
      "form": "Solution",
      "route": "Subcutaneous",
      "device": null,
      "pack": null,
      "bsfrdp_d": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you."
     },
     "brand": {
      "value": "OZEMPIC",
      "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
      "read_by": "cc-register-reader",
      "read_at": "2026-09-18T01:59:08+00:00",
      "state": "cu
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_id": "nope-000"}) answered: {"error": "NOT_ON_GRAPH"}

  • Get Enforcement Watch get_enforcement_watch — reads only
    Dated, URL'd enforcement events for a substance or jurisdiction: warning letters, import alerts, shortage-list changes, committee votes, proposed and final rules, seizures, state notices.
    Inputs, example, output, errors
    • substance string|null
    • jurisdiction string|null
    • since string|null

    Example input

    {
     "substance": "semaglutide",
     "jurisdiction": "US",
     "since": "2026-01-01"
    }

    Example output (a real answer from the door)

    {
     "count": 0,
     "events": [],
     "notice": {
      "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": null,
      "rule_set_version": null,
      "regulator": null
     }
    }

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_JURISDICTION — the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH

    Bad input in the run ({"substance": "semaglutide", "since": "yesterday"}) answered: {"error": "BAD_INPUT", "detail": "since must be YYYY, YYYY-MM or YYYY-MM-DD"}

§04 · CLEARED CATALOGUE

Cleared catalogue

  • Search Cleared Items search_cleared_items — reads only
    Presentations that passed the gate for a jurisdiction, pathway and actor class (a query by substance, brand or holder; optional banner filter on the shelf of record). Only cleared statuses are returned; every item carries its availability block (banners, pos_count, product_urls).
    Inputs, example, output, errors
    • query string — required
    • jurisdiction string — required
    • pathway string
    • actor_class string
    • limit integer
    • decision_id string|null
    • banner string|null

    Example input

    {
     "query": "ozempic",
     "jurisdiction": "CA",
     "pathway": "licensed_medicine",
     "limit": 3,
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "count": 2,
     "jurisdiction": "CA",
     "jurisdiction_label": "CA",
     "banner": null,
     "rule_set_version": "v1.2-2026-09-17",
     "communication_class": "trade_information",
     "items": [
      {
       "id": "CA:DIN02540258",
       "jurisdiction": "CA",
       "jurisdiction_label": "CA",
       "pathway": "licensed_medicine",
       "ids": {
        "din": {
         "value": "02540258",
         "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T01:59:08+00:00",
         "state": "current",
         "extra_source": "https://health-products.canada.ca/api/drug/drugproduct/?lang=en&id=102895"
        },
        "drug_code": {
         "value": 102895,
         "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T01:59:08+00:00",
         "state": "current"
        }
       },
       "status": "marketed",
       "substance_unii": "53AXN4NNHX",
       "bsfrdp_d": {
        "brand": "OZEMPIC",
        "strength": "0.68 MG",
        "form": "Solution",
        "route": "Subcutaneous",
        "device": null,
        "pack": null,
        "bsfrdp_d": "Artificial intelligence makes mistakes. A2A Peptides is 
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_JURISDICTION — the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH

    Bad input in the run ({"query": "", "jurisdiction": "CA"}) answered: {"error": "BAD_INPUT", "detail": "query must not be empty (a substance, brand or holder)"}

  • Get Item get_item — reads only
    One authorised presentation by id (US package NDC, CA DIN, EU EMA number, KR MFDS item seq, CH Swissmedic authorisation/pack code, JP approved-list entry, or the catalogue id): brand, strength, form, route, device, pack, holder, status, offers (tenant is a parameter).
    Inputs, example, output, errors
    • presentation_id string — required
    • tenant string|null
    • decision_id string|null

    Example input

    {
     "presentation_id": "76177-501-10",
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "id": "US:76177-501-10",
     "jurisdiction": "US",
     "jurisdiction_label": "US",
     "pathway": "licensed_medicine",
     "ids": {
      "ndc_package": {
       "value": "76177-501-10",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      },
      "ndc_product": {
       "value": "76177-501",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current",
       "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
      },
      "application_number": {
       "value": null,
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      }
     },
     "status": "listed",
     "substance_unii": "OYN3CCI6QE",
     "bsfrdp_d": {
      "brand": null,
      "strength": "TIRZEPATIDE 1 g/g",
      "form": "POWDER",
      "route": "",
      "device": null,
      "pack": "1000 g in 1 BAG (76177-501-10)",
      "bsfrdp_d": "Artificial intelligence makes
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_id": "0000-0000-00"}) answered: {"error": "NOT_ON_GRAPH"}

  • Compare Presentations compare_presentations — reads only
    Compare two or more authorised presentations side by side (ids as for get_item).
    Inputs, example, output, errors
    • presentation_ids array — required
    • decision_id string|null

    Example input

    {
     "presentation_ids": [
      "76177-501-10",
      "DIN02540258"
     ],
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "items": [
      {
       "id": "US:76177-501-10",
       "jurisdiction": "US",
       "jurisdiction_label": "US",
       "pathway": "licensed_medicine",
       "ids": {
        "ndc_package": {
         "value": "76177-501-10",
         "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T02:09:38+00:00",
         "state": "current"
        },
        "ndc_product": {
         "value": "76177-501",
         "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T02:09:38+00:00",
         "state": "current",
         "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
        },
        "application_number": {
         "value": null,
         "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T02:09:38+00:00",
         "state": "current"
        }
       },
       "status": "listed",
       "substance_unii": "OYN3CCI6QE",
       "bsfrdp_d": {
        "brand": null,
        "strength": "TIRZEPATIDE 1 g/g",
        "form": "POWDER",
        "route": "",
        "device": null,
    
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_ids": ["76177-501-10"]}) answered: {"error": "BAD_INPUT", "detail": "two or more presentation ids are required"}

§05 · LICENSED SUPPLY

Licensed supply

  • Find Licensed Supplier find_licensed_supplier — reads only
    Licensed parties for a presentation in a jurisdiction (tenant as a parameter). Takes the decision_id of an allow or require_rx decision from gate_transaction.
    Inputs, example, output, errors
    • presentation_id string — required
    • jurisdiction string — required
    • decision_id string — required
    • tenant string|null

    Example input

    {
     "presentation_id": "76177-501-10",
     "jurisdiction": "US",
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "presentation": {
      "ndc_package": {
       "value": "76177-501-10",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      },
      "ndc_product": {
       "value": "76177-501",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current",
       "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
      },
      "application_number": {
       "value": null,
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      }
     },
     "bsfrdp_d": {
      "brand": null,
      "strength": "TIRZEPATIDE 1 g/g",
      "form": "POWDER",
      "route": "",
      "device": null,
      "pack": "1000 g in 1 BAG (76177-501-10)",
      "bsfrdp_d": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the i
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_PATHWAY_NOT_CLEARED — the substance has no cleared row on that pathway in that jurisdiction — the source page on the answer says what the register holds
    • DENY_UNLICENSED_AGENT — an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token
    • GATE_REQUIRED — the tool needs the decision_id of an allow or require_rx decision — call resolve_jurisdiction, resolve_actor and gate_transaction first
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_id": "76177-501-10", "jurisdiction": "US", "decision_id": "dec_not_real"}) answered: {"error": "GATE_REQUIRED", "reason_code": "DENY_PATHWAY_NOT_CLEARED", "detail": "call resolve_jurisdiction → resolve_actor → gate_transaction first and pass the decision_id of an allow / require_rx decision"}

  • Get Availability get_availability — reads only
    Availability of a presentation once gate_transaction has answered allow or require_rx (decision_id): the availability block — banners[] on the shelf of record with licence footnote, pos_count (chain points of sale from the CPG Knowledge Graph retailer registry, or licensed dispensers on the provider directory for medicines), product_urls[] (retailer product page, register page, holder page) — plus tenant offers.
    Inputs, example, output, errors
    • presentation_id string — required
    • decision_id string — required
    • tenant string|null

    Example input

    {
     "presentation_id": "76177-501-10",
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "presentation": {
      "ndc_package": {
       "value": "76177-501-10",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      },
      "ndc_product": {
       "value": "76177-501",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current",
       "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
      },
      "application_number": {
       "value": null,
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      }
     },
     "bsfrdp_d": {
      "brand": null,
      "strength": "TIRZEPATIDE 1 g/g",
      "form": "POWDER",
      "route": "",
      "device": null,
      "pack": "1000 g in 1 BAG (76177-501-10)",
      "bsfrdp_d": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the i
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_PATHWAY_NOT_CLEARED — the substance has no cleared row on that pathway in that jurisdiction — the source page on the answer says what the register holds
    • DENY_UNLICENSED_AGENT — an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token
    • GATE_REQUIRED — the tool needs the decision_id of an allow or require_rx decision — call resolve_jurisdiction, resolve_actor and gate_transaction first
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_id": "76177-501-10", "decision_id": ""}) answered: {"error": "GATE_REQUIRED", "reason_code": "DENY_PATHWAY_NOT_CLEARED", "detail": "call resolve_jurisdiction → resolve_actor → gate_transaction first and pass the decision_id of an allow / require_rx decision"}

  • Get Price get_price — reads only
    Price basis (list · contract · reimbursement) from a licensed party, once gate_transaction has answered allow or require_rx (decision_id).
    Inputs, example, output, errors
    • presentation_id string — required
    • decision_id string — required
    • tenant string|null

    Example input

    {
     "presentation_id": "76177-501-10",
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "presentation": {
      "ndc_package": {
       "value": "76177-501-10",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      },
      "ndc_product": {
       "value": "76177-501",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current",
       "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
      },
      "application_number": {
       "value": null,
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      }
     },
     "bsfrdp_d": {
      "brand": null,
      "strength": "TIRZEPATIDE 1 g/g",
      "form": "POWDER",
      "route": "",
      "device": null,
      "pack": "1000 g in 1 BAG (76177-501-10)",
      "bsfrdp_d": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the i
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_UNLICENSED_AGENT — an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token
    • GATE_REQUIRED — the tool needs the decision_id of an allow or require_rx decision — call resolve_jurisdiction, resolve_actor and gate_transaction first
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_id": "", "decision_id": "gate_96e32e675fbd11d26679"}) answered: {"error": "BAD_INPUT", "detail": "presentation_id must not be empty: use the id returned by search_cleared_items (e.g. a US package NDC 0169-4130-13 or CA DIN02471477)"}

§06 · QUALITY

Quality

  • Get Lot Coa get_lot_coa — reads only
    Certificate of analysis for a lawful lot of a presentation, where the pathway permits (decision_id required).
    Inputs, example, output, errors
    • presentation_id string — required
    • lot string — required
    • decision_id string — required

    Example input

    {
     "presentation_id": "76177-501-10",
     "lot": "LOT-TEST-1",
     "decision_id": "gate_96e32e675fbd11d26679"
    }

    Example output (a real answer from the door)

    {
     "presentation": {
      "ndc_package": {
       "value": "76177-501-10",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      },
      "ndc_product": {
       "value": "76177-501",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current",
       "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
      },
      "application_number": {
       "value": null,
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      }
     },
     "lot": {
      "lot": "LOT-TEST-1",
      "detail": "no lawful lot of that number on the record"
     },
     "notice": {
      "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "disclaimer": "Artificial
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_UNLICENSED_AGENT — an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token
    • GATE_REQUIRED — the tool needs the decision_id of an allow or require_rx decision — call resolve_jurisdiction, resolve_actor and gate_transaction first
    • NOT_ON_GRAPH — no record on the graph for that identifier — check the spelling, use an INN or unii:<UNII>, or search_cleared_items to find the id; nothing is answered from memory

    Bad input in the run ({"presentation_id": "76177-501-10", "lot": "", "decision_id": "gate_96e32e675fbd11d26679"}) answered: {"error": "BAD_INPUT", "detail": "lot must not be empty: give the lot number printed on the pack"}

  • Verify Serialization verify_serialization — reads only
    Verify a serialised pack (GTIN + serial + lot + expiry) against the serialisation regime of the jurisdiction (DSCSA · FMD · UK · KR; none-national elsewhere).
    Inputs, example, output, errors
    • jurisdiction string — required
    • gtin string — required
    • serial string — required
    • lot string|null
    • expiry string|null

    Example input

    {
     "jurisdiction": "US",
     "gtin": "00301694130133",
     "serial": "S1",
     "lot": "L1",
     "expiry": "2027-01-01"
    }

    Example output (a real answer from the door)

    {
     "jurisdiction": "US",
     "regime": "DSCSA",
     "gtin_checksum": false,
     "verified": false,
     "reason_code": "DENY_NO_SERIALIZATION",
     "detail": "gtin must be a 14-digit GTIN with a valid check digit (pad a 12- or 13-digit code with leading zeros)",
     "notice": {
      "text": "This answer reflects US rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": "US",
      "jurisdiction_label": "US",
      "rule_set_version": "v1.2-2026-09-17",
      "regulator": "https://www.fda.gov/"
     }
    }

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_NO_SERIALIZATION — the GTIN failed its check digit or the pack could not be verified

    Bad input in the run ({"jurisdiction": "US", "gtin": "123", "serial": "S1"}) answered: {"reason_code": "DENY_NO_SERIALIZATION", "detail": "gtin must be a 14-digit GTIN with a valid check digit (pad a 12- or 13-digit code with leading zeros)"}

§07 · COMMERCE

Commerce

  • Create Order Intent create_order_intent — writes a record (nothing is deleted)
    Create an order intent for a cleared item after the gate; the intent carries reason_code + rule_set_version and settles by x402 on peptides-x402.ai.
    Inputs, example, output, errors
    • presentation_id string — required
    • quantity integer — required
    • decision_id string — required
    • tenant string|null
    • ship_to string|null

    Example input

    {
     "presentation_id": "76177-501-10",
     "quantity": 1,
     "decision_id": "gate_96e32e675fbd11d26679",
     "ship_to": "US-FL"
    }

    Example output (a real answer from the door)

    {
     "intent_id": "oi_7c6c56206b41ccd4",
     "presentation": {
      "ndc_package": {
       "value": "76177-501-10",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      },
      "ndc_product": {
       "value": "76177-501",
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current",
       "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
      },
      "application_number": {
       "value": null,
       "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
       "read_by": "cc-register-reader",
       "read_at": "2026-09-18T02:09:38+00:00",
       "state": "current"
      }
     },
     "bsfrdp_d": {
      "brand": null,
      "strength": "TIRZEPATIDE 1 g/g",
      "form": "POWDER",
      "route": "",
      "device": null,
      "pack": "1000 g in 1 BAG (76177-501-10)",
      "bsfrdp_d": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the reg
    … (trimmed)

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_UNLICENSED_AGENT — an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token
    • GATE_REQUIRED — the tool needs the decision_id of an allow or require_rx decision — call resolve_jurisdiction, resolve_actor and gate_transaction first

    Bad input in the run ({"presentation_id": "76177-501-10", "quantity": 0, "decision_id": "gate_96e32e675fbd11d26679"}) answered: {"error": "BAD_INPUT", "detail": "quantity must be a whole number from 1 to 100000 (packs)"}

  • A2A Handoff a2a_handoff — writes a record (nothing is deleted)
    Hand off over Agent-to-Agent (A2A). With an allow/require_rx decision: the order intent goes to the licensed counterparty's agent (envelope + card URL). With a deny for a patient, the public or an unauthorized actor: returns real licensed destinations from the provider directory (dispensers, prescribers) filtered by the decision's jurisdiction, state/province and practice scope — a referral, never a vial.
    Inputs, example, output, errors
    • intent_id string|null
    • decision_id string|null
    • counterparty_card_url string|null
    • practice_scope string|null
    • limit integer

    Example input

    {
     "intent_id": "oi_7c6c56206b41ccd4",
     "decision_id": "gate_96e32e675fbd11d26679",
     "counterparty_card_url": "https://a2a-pharma.ai/.well-known/agent-card.json"
    }

    Example output (a real answer from the door)

    {
     "intent_id": "oi_7c6c56206b41ccd4",
     "counterparty_card_url": "https://a2a-pharma.ai/.well-known/agent-card.json",
     "envelope": {
      "from": "https://a2a-peptides.ai/.well-known/agent-card.json",
      "kid": "a2ap-2026-09",
      "reason_code": "ALLOW",
      "rule_set_version": "v1.2-2026-09-17",
      "decision_id": "gate_96e32e675fbd11d26679"
     },
     "status": "handoff_prepared",
     "notice": {
      "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": null,
      "rule_set_version": null,
      "regulator": null
     }
    }

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_PATHWAY_NOT_CLEARED — the substance has no cleared row on that pathway in that jurisdiction — the source page on the answer says what the register holds
    • DENY_UNLICENSED_AGENT — an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token
    • GATE_REQUIRED — the tool needs the decision_id of an allow or require_rx decision — call resolve_jurisdiction, resolve_actor and gate_transaction first

    Bad input in the run ({"intent_id": "oi_bogus", "decision_id": "dec_bogus"}) answered: {"error": "GATE_REQUIRED", "reason_code": "DENY_PATHWAY_NOT_CLEARED", "detail": "call resolve_jurisdiction → resolve_actor → gate_transaction first and pass its decision_id"}

§08 · OPS

Ops

  • Get Safety Label get_safety_label — reads only
    Safety label pointers for licensed products (label page and the pharmacovigilance scheme of the jurisdiction).
    Inputs, example, output, errors
    • substance string — required
    • jurisdiction string — required

    Example input

    {
     "substance": "semaglutide",
     "jurisdiction": "UK"
    }

    Example output (a real answer from the door)

    {
     "substance": "53AXN4NNHX",
     "jurisdiction": "GB",
     "safety_refs": [],
     "pharmacovigilance_scheme": "https://yellowcard.mhra.gov.uk/",
     "presentations": [],
     "notice": {
      "text": "This answer reflects UK rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": "GB",
      "jurisdiction_label": "UK",
      "rule_set_version": "v1.2-2026-09-17",
      "regulator": "https://www.gov.uk/government/organisations/medicines-and-healthcare-products-regulatory-agency"
     }
    }

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send
    • DENY_JURISDICTION — the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH

    Bad input in the run ({"substance": "semaglutide", "jurisdiction": "MARS"}) answered: {"error": "DENY_JURISDICTION", "reason_code": "DENY_JURISDICTION", "detail": "jurisdiction must be one of US, CA, MX, EU, UK, KR, JP, SG or CH (a state, province or member may follow, e.g. US-FL, CA-ON, EU-DE)"}

  • Log Audit log_audit — writes a record (nothing is deleted)
    Write the audit line for a gate decision or an order intent (returns the line id).
    Inputs, example, output, errors
    • kind string — required
    • reference_id string — required
    • note string|null

    Example input

    {
     "kind": "gate",
     "reference_id": "gate_96e32e675fbd11d26679",
     "note": "A2AP-15 functional bar"
    }

    Example output (a real answer from the door)

    {
     "audit_id": "aud_6503bac9b9b6691e",
     "at": "2026-09-18T21:36:55.321886+00:00",
     "notice": {
      "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
      "jurisdiction": null,
      "rule_set_version": null,
      "regulator": null
     }
    }

    Errors this tool can return

    • BAD_INPUT — an argument is missing or malformed — the detail says which and what to send

    Bad input in the run ({"kind": "party", "reference_id": "gate_96e32e675fbd11d26679"}) answered: {"error": "BAD_INPUT", "detail": "kind must be gate, order_intent or handoff"}

§09 · TROUBLESHOOTING

Troubleshooting

  • Cannot connect — the endpoint is https://mcp.a2a-peptides.ai/mcp, transport streamable-HTTP, POST only (a GET on it shows the human page). Send Accept: application/json, text/event-stream; check health.json answers 200 and initialize returns serverInfo.
  • A gate answer of deny — read reason_code: DENY_JURISDICTION the jurisdiction is not one of the nine — use US, US-<state>, CA, CA-<province>, MX, EU, EU-<member>, UK, KR, JP, SG or CH · DENY_ACTOR_CLASS the actor class is not one of the classes of record — the detail lists them · DENY_PATHWAY_NOT_CLEARED the substance has no cleared row on that pathway in that jurisdiction — the source page on the answer says what the register holds · DENY_UNLICENSED_AGENT an agent presented no bearer from the issuer — register at peptides-registry.ai/oauth/register and present the token · DENY_RUO research-use stock: not listed and not sold · DENY_CONTROLLED a controlled substance in the jurisdiction · DENY_STATE_OVERLAY a state or provincial overlay tightens the federal pass · DENY_NO_SERIALIZATION the GTIN failed its check digit or the pack could not be verified · DENY_CROSS_BORDER the ship-to is outside the licensed party's jurisdiction. The source_url on the decision is the register page it was read from.
  • A gate answer of require_rx — the item is allowed to a prescriber or dispenser with a prescription accompanying the order intent; create_order_intent marks prescription_required.
  • An unlicensed-agent denial — DENY_UNLICENSED_AGENT: the actor class was agent with no bearer. Register at https://peptides-registry.ai/oauth/register, take a client-credentials token, present Authorization: Bearer; the token's actor class is the class of record (see /auth.md).
  • A 402 answer — the paid door (/api on a2a-peptides.ai, peptides-registry.ai and peptides-x402.ai) answers HTTP 402 with the x402 v2 offer (USDC on Base); an x402 client pays and retries with PAYMENT-SIGNATURE and receives a signed receipt. On an order intent the door runs the gate before settlement: a deny answers HTTP 403 with reason_code and rule_set_version and nothing is charged. Receipts: order-intent receipts carry decision_id and reason_code; every receipt carries the notice; resolve receipts carry jurisdiction and rule_set_version when the tool takes a jurisdiction. A 402 is not an error.
  • An empty result — NOT_ON_GRAPH or an empty items list means the record holds nothing for that query; nothing is answered from memory. Try the INN, unii:<UNII>, another jurisdiction or pathway, or search_cleared_items with a broader query.
  • How to report a wrong record — every field carries its source_url; send the tool, the arguments, the field and the register page that contradicts it to mcp@a2a-peptides.ai or the contact form. A correction is a new state on the record, never an edit.
§10 · WORKED EXAMPLES

Worked examples

Verbatim prompts, the tool chain, and the real answers the door gave when this page was built.

  • Is semaglutide cleared as a licensed medicine in Canada, and what is it indicated for?
    Tool chain: get_substance_record → get_pathway_status → get_label_and_indication
    1. get_substance_record {"substance": "semaglutide"}
      {
       "ids": {
        "unii": {
         "value": "53AXN4NNHX",
         "source_url": "https://gsrs.ncats.nih.gov/ginas/app/beta/substances/6008afca-8b87-4b98-9c27-3a6878147556",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T01:52:50+00:00",
         "state": "current",
         "extra_source": "https://gsrs.ncats.nih.gov/api/v1/substances/search?q=root_names_name:%22SEMAGLUTIDE%22&top=5"
        },
        "inn": {
         "value": null,
         "source_url": "https://gsrs.ncats.nih.gov/ginas/app/beta/substances/6008afca-8b87-4b98-9c27-3a6878147556",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T01:52:50+00:00",
         "state": "current"
        },
        "cas": {
         "value": "910463-68-2",
         "source_url": "https://gsrs.ncat
      … (trimmed)
    2. get_pathway_status {"substance": "semaglutide", "jurisdiction": "CA", "pathway": "licensed_medicine"}
      {
       "jurisdiction": "CA",
       "pathway": "licensed_medicine",
       "status": {
        "value": "approved_drug",
        "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=101776",
        "read_by": "cc-register-reader",
        "read_at": "2026-09-18T01:59:08+00:00",
        "state": "current"
       },
       "rule_set_version": "v1.2-2026-09-17",
       "effective_date": {
        "value": null,
        "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=101776",
        "read_by": "cc-register-reader",
        "read_at": "2026-09-18T01:59:08+00:00",
        "state": "current"
       },
       "state": "current",
       "dins": [
        "02471469",
        "02497581",
        "02497603",
        "02497611",
        "02528509",
        "02528517",
        "02528525",
        "02528533",
      … (trimmed)
    3. get_label_and_indication {"presentation_id": "DIN02540258"}
      {
       "presentation": {
        "din": {
         "value": "02540258",
         "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T01:59:08+00:00",
         "state": "current",
         "extra_source": "https://health-products.canada.ca/api/drug/drugproduct/?lang=en&id=102895"
        },
        "drug_code": {
         "value": 102895,
         "source_url": "https://health-products.canada.ca/dpd-bdpp/info?lang=eng&code=102895",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T01:59:08+00:00",
         "state": "current"
        }
       },
       "jurisdiction": "CA",
       "bsfrdp_d": {
        "brand": "OZEMPIC",
        "strength": "0.68 MG",
        "form": "Solution",
        "route": 
      … (trimmed)
  • I am a licensed pharmacy in Florida. Can I buy tirzepatide, and who is licensed to supply it?
    Tool chain: resolve_jurisdiction → resolve_actor → gate_transaction → find_licensed_supplier
    1. resolve_jurisdiction {"ship_to": "US-FL"}
      {
       "jurisdiction": "US",
       "member": null,
       "overlay": "FL",
       "jurisdiction_label": "US",
       "rule_set_version": "v1.2-2026-09-17",
       "notice": {
        "text": "This answer reflects US rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
        "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
        "jurisdiction": "US",
        "jurisdiction_label": "US",
        "rule_set_version": "v1.2-2026-09-17",
        "regulator": "https://www.fda.gov/"
       }
      }
    2. resolve_actor {"actor_class": "dispenser"}
      {
       "actor_class": "dispenser",
       "parent_class": "authorized_trading_partner",
       "channel": "B2B",
       "communication_class": "trade_information",
       "credential_presented": true,
       "bearer": {
        "client_id": "a2ap_b956da16ad3d1af678bde4a6",
        "client_name": "Claude directory reviewer (standing test client)",
        "scope": "peptides.read peptides.transact",
        "iss": "https://peptides-registry.ai"
       },
       "notice": {
        "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
        "disclaimer": "Artificial intelligence makes mistakes. A2A Pep
      … (trimmed)
    3. gate_transaction {"substance": "tirzepatide", "pathway": "licensed_medicine", "actor_class": "dispenser", "ship_to": "US-FL"}
      {
       "substance": "tirzepatide",
       "pathway": "licensed_medicine",
       "actor_class": "dispenser",
       "channel": "B2B",
       "ship_to": "US-FL",
       "jurisdiction": "US",
       "member": null,
       "overlay": "FL",
       "rule_set_version": "v1.2-2026-09-17",
       "decided_at": "2026-09-18T21:36:57.972320+00:00",
       "substance_unii": "OYN3CCI6QE",
       "substance_name": "Tirzepatide",
       "status": "approved_drug",
       "source_url": "https://www.accessdata.fda.gov/scripts/cder/daf/index.cfm?event=overview.process&ApplNo=215866",
       "communication_class": "trade_information",
       "parent_class": "authorized_trading_partner",
       "actor_class_equivalent": "DSCSA authorized trading partner (licence or registration held)",
       "result": "allow",
       "re
      … (trimmed)
    4. find_licensed_supplier {"presentation_id": "76177-501-10", "jurisdiction": "US", "decision_id": "gate_96e32e675fbd11d26679"}
      {
       "presentation": {
        "ndc_package": {
         "value": "76177-501-10",
         "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T02:09:38+00:00",
         "state": "current"
        },
        "ndc_product": {
         "value": "76177-501",
         "source_url": "https://dailymed.nlm.nih.gov/dailymed/search.cfm?query=76177-501",
         "read_by": "cc-register-reader",
         "read_at": "2026-09-18T02:09:38+00:00",
         "state": "current",
         "extra_source": "https://api.fda.gov/drug/ndc.json?search=generic_name:%22Tirzepatide%22&limit=100"
        },
        "application_number": {
         "value": null,
         "source_url": "https://dailymed.nlm.nih.gov/dailymed/se
      … (trimmed)
  • Compare the presentations of a copper peptide (GHK-Cu) serum available in the UK and in Korea.
    Tool chain: search_cleared_items → compare_presentations
    1. search_cleared_items {"query": "copper", "jurisdiction": "UK", "pathway": "cosmetic", "limit": 2}
      {
       "count": 1,
       "jurisdiction": "GB",
       "jurisdiction_label": "UK",
       "banner": null,
       "rule_set_version": "v1.2-2026-09-17",
       "communication_class": "public",
       "items": [
        {
         "id": "GB:GB-00810120261478",
         "jurisdiction": "GB",
         "jurisdiction_label": "UK",
         "pathway": "cosmetic",
         "ids": {
          "gtin": {
           "value": "00810120261478",
           "source_url": "https://naturium.com/products/multi-peptide-rich-cream",
           "read_by": "cc-register-reader (attach ladder step 1, json-ld gtin)",
           "read_at": "2026-09-18T08:34:31+00:00",
           "state": "current"
          }
         },
         "status": "listed",
         "substance_unii": null,
         "bsfrdp_d": {
          "brand": "NATURIUM",
          "strength": null,
          "f
      … (trimmed)
    2. search_cleared_items {"query": "copper", "jurisdiction": "KR", "pathway": "cosmetic", "limit": 2}
      {
       "count": 0,
       "jurisdiction": "KR",
       "jurisdiction_label": "KR",
       "banner": null,
       "rule_set_version": "v1.2-2026-09-17",
       "communication_class": "public",
       "items": [],
       "note": "prices and availability answer only after gate_transaction",
       "notice": {
        "text": "This answer reflects KR rules (rule set v1.2-2026-09-17). Rules differ by jurisdiction — refer to the regulator in your jurisdiction.",
        "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
        "jurisdiction": "KR",
        "jurisdiction_label": "KR",
        "rule
      … (trimmed)
    3. compare_presentations {"presentation_ids": ["GB-00810120261478"]}
      {
       "error": "BAD_INPUT",
       "detail": "two or more presentation ids are required",
       "notice": {
        "text": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
        "disclaimer": "Artificial intelligence makes mistakes. A2A Peptides is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.",
        "jurisdiction": null,
        "rule_set_version": null,
        "regulator": null
       }
      }
§11 · DATA HANDLING

Data handling

  • What the door receives — the tool name and its arguments (a substance, a jurisdiction, a pathway, an actor class, a presentation id, a quantity), the bearer if one is presented, and the request headers the transport carries.
  • What it stores — an audit line per gate decision, order intent and handoff (actor class, jurisdiction, decision, reason code, rule-set version); x402 receipts; agent registrations at the issuer. Console logs are kept 30 days.
  • No personal health data — the door handles no personal health data and takes no patient details: a patient actor receives status, class-level information and a referral to a licensed provider, never a vial checkout.
  • Ranking — results rank from the record (the register page, its date and its state), never from payment or placement; a tenant's offer sits beside the record, never above it.

The first agentic commerce hub for peptides.

Agent-to-Agent (A2A) + Model Context Protocol (MCP) hub for peptides.