Merchant-0 Ap2 API

The Ap2 API from Merchant-0 — 16 operation(s) for ap2.

Operations 16

POST /api/ap2/intent Submit Intent #
POST /api/ap2/sign/{intent_id} Sign Cart #
POST /api/ap2/execute/{cart_id} Execute Payment #
GET /api/ap2/cart/{cart_id} Get Cart #
GET /api/ap2/stats Get Ap2 Stats #
GET /api/ap2/executions Get Ap2 Executions #
GET /api/ap2/review/{contract_id} Get Ap2 Review Status #
GET /api/ap2/reviews Get Ap2 Reviews Ceo #
POST /api/ap2/review/{path_id}/approve Ap2 Review Approve #
POST /api/ap2/review/{path_id}/reject Ap2 Review Reject #
POST /api/ap2/negotiate Ap2 Negotiate Alias #
POST /api/ap2/sign Ap2 Sign Alias #
POST /api/ap2/execute Ap2 Execute Alias #
POST /api/ap2/dispute Ap2 Dispute File #
POST /api/ap2/trial-grant Post Trial Grant #
POST /api/ap2/trial-execute Post Trial Execute #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/merchant-0-com:merchant-0-com-ap2-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

merchant-0-com-ap2-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Merchant 0 Com Ap2 API
  version: '2026.1'
  description: 'Operations tagged Ap2 across 2 of this provider''s published API definitions: merchant-0-com-openapi-original.json, merchant-0-com-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.merchant-0.com
  description: Production. The spec is served from this host at /openapi.json and the A2A agent card names it as agent_api; the harvested document declares no servers[] (added by API Evangelist, recorded in overlays/merchant-0-com-openapi-overlay.yaml).
tags:
- name: Ap2
paths:
  /api/ap2/intent:
    post:
      summary: Submit Intent
      description: 'Submit AP2 intent mandate.


        Step 1 of AP2 flow: Buyer submits purchase intent.'
      operationId: submit_intent_api_ap2_intent_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AP2IntentRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/sign/{intent_id}:
    post:
      summary: Sign Cart
      description: 'Sign cart mandate.


        Step 2 of AP2 flow: Generate signed cart mandate.'
      operationId: sign_cart_api_ap2_sign__intent_id__post
      parameters:
      - name: intent_id
        in: path
        required: true
        schema:
          type: string
          title: Intent Id
      - name: discount_percent
        in: query
        required: false
        schema:
          type: number
          default: 0.0
          title: Discount Percent
      - name: discount_reason
        in: query
        required: false
        schema:
          type: string
          title: Discount Reason
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/execute/{cart_id}:
    post:
      summary: Execute Payment
      description: 'Execute payment.


        Step 3 of AP2 flow: Execute payment with proof.'
      operationId: execute_payment_api_ap2_execute__cart_id__post
      parameters:
      - name: cart_id
        in: path
        required: true
        schema:
          type: string
          title: Cart Id
      - name: payment_proof
        in: query
        required: true
        schema:
          type: string
          title: Payment Proof
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/cart/{cart_id}:
    get:
      summary: Get Cart
      description: Get signed cart details.
      operationId: get_cart_api_ap2_cart__cart_id__get
      parameters:
      - name: cart_id
        in: path
        required: true
        schema:
          type: string
          title: Cart Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/stats:
    get:
      summary: Get Ap2 Stats
      description: Get AP2 transaction statistics.
      operationId: get_ap2_stats_api_ap2_stats_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      tags:
      - Ap2
  /api/ap2/executions:
    get:
      summary: Get Ap2 Executions
      description: CEO-facing completed AP2 alias executions (buyer_did excluded).
      operationId: get_ap2_executions_api_ap2_executions_get
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 50
          title: Limit
      - name: sku
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Sku
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Get Ap2 Executions Api Ap2 Executions Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/review/{contract_id}:
    get:
      summary: Get Ap2 Review Status
      description: Strategist review status for a contract (buyer_did never returned).
      operationId: get_ap2_review_status_api_ap2_review__contract_id__get
      parameters:
      - name: contract_id
        in: path
        required: true
        schema:
          type: string
          title: Contract Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                title: Response Get Ap2 Review Status Api Ap2 Review  Contract Id  Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/reviews:
    get:
      summary: Get Ap2 Reviews Ceo
      description: Pending / escalated reviews for CEO (no buyer_did in rows).
      operationId: get_ap2_reviews_ceo_api_ap2_reviews_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                title: Response Get Ap2 Reviews Ceo Api Ap2 Reviews Get
      tags:
      - Ap2
  /api/ap2/review/{path_id}/approve:
    post:
      summary: Ap2 Review Approve
      description: 'CEO/Strategist: approve a Strategist-escalated review.


        Source of truth is ``ap2_reviews``. The ``{path_id}`` URL segment

        accepts either a ``review_id`` (e.g. ``rev_...``) or a ``contract_id``

        (e.g. ``ap2_...``); the dashboard sends ``contract_id``, CEO test

        curls typically send ``review_id``, and both paths resolve to the

        same DB row.'
      operationId: ap2_review_approve_api_ap2_review__path_id__approve_post
      parameters:
      - name: path_id
        in: path
        required: true
        schema:
          type: string
          title: Path Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Ap2StrategistReviewActionBody'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                title: Response Ap2 Review Approve Api Ap2 Review  Path Id  Approve Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/review/{path_id}/reject:
    post:
      summary: Ap2 Review Reject
      description: 'CEO/Strategist: reject a Strategist-escalated review.


        See ``ap2_review_approve`` for the source-of-truth rationale.'
      operationId: ap2_review_reject_api_ap2_review__path_id__reject_post
      parameters:
      - name: path_id
        in: path
        required: true
        schema:
          type: string
          title: Path Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Ap2StrategistReviewActionBody'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                title: Response Ap2 Review Reject Api Ap2 Review  Path Id  Reject Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/negotiate:
    post:
      summary: Ap2 Negotiate Alias
      description: 'Create a PENDING alias contract.


        Does NOT cross-wire into AP2EnhancedHandler''s intent/cart lifecycle;

        A2A CATALOG v1.0: terms use ``unit_price_usd`` and ``total_price_usd``

        from the catalog. Unknown ``item_id`` (SKU) returns HTTP 404.


        DIPLOMAT_v1.0 (MP #53): personalized pricing is layered after

        ``_terms_for_catalog_item`` via _compute_diplomat_terms(). FLAGGED

        buyers receive an HTTP 402 PoW challenge instead of terms; submit

        the solution via the ``X-PoW-Solution`` request header on a retry.

        The Diplomat layer is wrapped in try/except -- any failure leaves

        the negotiate handler in its pre-MP-#53 catalog-price behavior

        (Rule #7 ADDITIVE ONLY).


        SENTINEL_v1.0 (MP #55, Task 2.3): the Sentinel screens every

        incoming request through the SemanticFirewall BEFORE catalog,

        Diplomat, and credit checks. Confirmed injection patterns return

        HTTP 403 sentinel_blocked; everything else (including

        Sentinel-internal errors per Rule #7) falls through to the

        pre-MP-#55 handler logic unchanged.'
      operationId: ap2_negotiate_alias_api_ap2_negotiate_post
      parameters:
      - name: X-PoW-Solution
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Pow-Solution
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AP2NegotiateBody'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                title: Response Ap2 Negotiate Alias Api Ap2 Negotiate Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/sign:
    post:
      summary: Ap2 Sign Alias
      description: 'Transition an alias contract to SIGNED.


        Precondition: contract exists and is in PENDING (or already SIGNED,

        which is idempotent). The buyer_signature length is logged -- never

        the signature material itself.


        SENTINEL_v1.0 (MP #55, Task 2.4): the Sentinel screens the signing

        request through the SemanticFirewall AFTER the contract / state

        preconditions and BEFORE the Advocate validation. Confirmed

        injection patterns return HTTP 403 sentinel_blocked; everything

        else falls through to the Advocate (Rule #7 fail-open).'
      operationId: ap2_sign_alias_api_ap2_sign_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AP2SignBody'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Ap2 Sign Alias Api Ap2 Sign Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/execute:
    post:
      summary: Ap2 Execute Alias
      description: 'Transition an alias contract to EXECUTED.


        Precondition: contract exists and is in SIGNED. Logs a settlement

        routing intent toward USD_SETTLEMENT_ACCOUNT (Vault key 17) via the

        non-secret label -- never touches an account number. Actual payment

        wiring lands in AP2 PAYMENT WIRING v1.0.'
      operationId: ap2_execute_alias_api_ap2_execute_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AP2ExecuteBody'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Ap2 Execute Alias Api Ap2 Execute Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/dispute:
    post:
      summary: Ap2 Dispute File
      description: 'Buyer-initiated dispute filing.


        No auth required (A2A-direct -- Deviation 8). Rule #11: response

        surfaces only buyer_did_hash. Buyer match enforced against the

        contract owner so rival agents cannot file disputes on other

        agents'' contracts.'
      operationId: ap2_dispute_file_api_ap2_dispute_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisputeFileRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Ap2 Dispute File Api Ap2 Dispute Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/trial-grant:
    post:
      summary: Post Trial Grant
      description: 'Grant a free trial for merchant0-intel-001 (Task 2.1).


        Public (any buyer agent). One trial per DID, expires 24h, not for

        FLAGGED DIDs. Rule #11: only buyer_did_hash in response / logs.'
      operationId: post_trial_grant_api_ap2_trial_grant_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrialGrantBody'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Post Trial Grant Api Ap2 Trial Grant Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
  /api/ap2/trial-execute:
    post:
      summary: Post Trial Execute
      description: 'Use a trial grant: real Grok intel, $0.00 audit row (Task 3.1).


        Public (authenticated by trial_nonce). Grok only -- never Perplexity.

        Does NOT increment buyer_reputation.total_executions (acquisition

        discount preserved). Rule #11: only buyer_did_hash in response.'
      operationId: post_trial_execute_api_ap2_trial_execute_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrialExecuteBody'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: Response Post Trial Execute Api Ap2 Trial Execute Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Ap2
components:
  schemas:
    AP2ExecuteBody:
      properties:
        contract_id:
          type: string
          title: Contract Id
        query:
          anyOf:
          - type: string
          - type: 'null'
          title: Query
        dry_run:
          type: boolean
          title: Dry Run
          default: false
        target_did:
          anyOf:
          - type: string
          - type: 'null'
          title: Target Did
        subscription_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Subscription Id
        report_type:
          anyOf:
          - type: string
          - type: 'null'
          title: Report Type
      type: object
      required:
      - contract_id
      title: AP2ExecuteBody
      description: "POST /api/ap2/execute request body.\n\nMatches the MP pre-flight test body verbatim:\n  {\"contract_id\":\"...\"}\n\nOptional fields by deliverable SKU (CATALOG_EXPANSION v1.0 / MP #40):\n\n* ``query`` (str)        -- INTEL_SKUS (merchant0-intel-001),\n                            REPORT_SKUS (merchant0-report-001).\n                            Free-form trade question; required for\n                            report-001 to dispatch Grok.\n* ``report_type`` (str)  -- REPORT_SKUS hint: \"trade_route\" |\n                            \"regulatory\" | \"arbitrage\". Currently\n                            advisory only -- Grok prompt is unified.\n* ``target_did`` (str)   -- VERIFY_SKUS (merchant0-verify-001) only.\n                            The DID to be verified. NOT the buyer's DID.\n* ``subscription_id`` (str)\n                        -- PROOF_SKUS (merchant0-proof-001) only.\n                            Optional; if absent the most-recent active\n                            subscription for the buyer is used.\n* ``dry_run`` (bool)     -- skips invoice / subscription side effects;\n                            delivery handlers still run for testing."
    TrialGrantBody:
      properties:
        buyer_did:
          type: string
          title: Buyer Did
          default: ''
        referral_code:
          type: string
          title: Referral Code
          default: ''
      type: object
      title: TrialGrantBody
      description: POST /api/ap2/trial-grant body (codebase BaseModel convention).
    DisputeFileRequest:
      properties:
        buyer_did:
          type: string
          title: Buyer Did
        contract_id:
          type: string
          title: Contract Id
        execution_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Execution Id
        dispute_type:
          type: string
          title: Dispute Type
        description:
          type: string
          title: Description
      type: object
      required:
      - buyer_did
      - contract_id
      - dispute_type
      - description
      title: DisputeFileRequest
      description: POST /api/ap2/dispute body.
    AP2SignBody:
      properties:
        contract_id:
          type: string
          title: Contract Id
        buyer_signature:
          type: string
          title: Buyer Signature
        buyer_did:
          anyOf:
          - type: string
          - type: 'null'
          title: Buyer Did
      type: object
      required:
      - contract_id
      - buyer_signature
      title: AP2SignBody
      description: "POST /api/ap2/sign request body.\n\nMatches the MP pre-flight test body verbatim:\n  {\"contract_id\":\"...\",\"buyer_signature\":\"...\"}\n\nADVOCATE_v1.0 (MP #54, Deviation 1): ``buyer_did`` is accepted\noptionally so the Advocate's BUYER_MISMATCH validation can fire\nwhen callers identify themselves at sign time. Existing buyer\nagents that omit this field keep their pre-MP-#54 behaviour --\nthe Advocate skips the BUYER_MISMATCH check (other validations\nstill run) and the sign handler proceeds as before."
    Ap2StrategistReviewActionBody:
      properties:
        ceo_token:
          type: string
          title: Ceo Token
        note:
          type: string
          title: Note
          default: ''
      type: object
      required:
      - ceo_token
      title: Ap2StrategistReviewActionBody
      description: POST body for CEO approve/reject on Strategist-gated AP2 contracts.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    AP2NegotiateBody:
      properties:
        buyer_did:
          type: string
          title: Buyer Did
        item_id:
          type: string
          title: Item Id
        quantity:
          type: integer
          minimum: 1.0
          title: Quantity
          default: 1
      type: object
      required:
      - buyer_did
      - item_id
      title: AP2NegotiateBody
      description: "POST /api/ap2/negotiate request body.\n\nMatches the MP pre-flight test body verbatim:\n  {\"buyer_did\":\"did:web:...\",\"item_id\":\"...\",\"quantity\":1}"
    AP2IntentRequest:
      properties:
        buyer_did:
          type: string
          title: Buyer Did
        buyer_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Buyer Name
        items:
          items:
            type: object
          type: array
          title: Items
        subtotal:
          type: number
          title: Subtotal
        currency:
          type: string
          title: Currency
          default: USD
        delivery_region:
          anyOf:
          - type: string
          - type: 'null'
          title: Delivery Region
        payment_method_preference:
          anyOf:
          - type: string
          - type: 'null'
          title: Payment Method Preference
      type: object
      required:
      - buyer_did
      - items
      - subtotal
      title: AP2IntentRequest
      description: AP2 Intent submission request.
    TrialExecuteBody:
      properties:
        trial_id:
          type: string
          title: Trial Id
          default: ''
        trial_nonce:
          type: string
          title: Trial Nonce
          default: ''
        query:
          type: string
          title: Query
          default: ''
      type: object
      title: TrialExecuteBody
      description: POST /api/ap2/trial-execute body (codebase BaseModel convention).
x-refined-from:
- merchant-0-com-openapi-original.json
- merchant-0-com-openapi.json