{
  "schema": "insimbi.usecase-video.flow/1",
  "slug": "marketplace-payouts",
  "title": "A marketplace paying sellers in dollars and stablecoins",
  "use_case_number": 1,
  "use_case_count": 8,
  "source": {
    "repo": "iridium-payments/insimbi",
    "path": "web/insimbi-net/site/use-cases/marketplace-payouts.md",
    "url": "https://insimbi.net/use-cases/marketplace-payouts/"
  },
  "cohorts": [
    {
      "symbol": "Fi",
      "name": "Fiat · cards"
    },
    {
      "symbol": "Sc",
      "name": "Stablecoins"
    }
  ],
  "video": {
    "file": "marketplace-payouts.mp4",
    "captions": "marketplace-payouts.vtt",
    "poster": "marketplace-payouts.poster.png",
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "codec": "h264",
    "duration_s": 36,
    "segments": {
      "intro": [
        0,
        1.6
      ],
      "handoff": [
        20,
        20.6
      ],
      "end_card": [
        31.8,
        36
      ]
    }
  },
  "api_host": "sandbox.api.insimbi.xyz",
  "notes": [
    "Illustrative scenario: a fictional type of business, not a customer. No results are claimed.",
    "Only GET /health, /oauth2/token and the account reads are in the OpenAPI contract. POST /v1/payments, captures, tickets, cutoffs preview and webhooks are designed endpoints (insimbi.net/docs/api); paths and fields can change.",
    "Event names are limited to those published on insimbi.net (authorization.allowed, approval.proposed, approval.approved, payment.captured). Other steps have event: null; their result is a line on the record. The Record step carries its own on-screen status, recorded (console.status), not an event.",
    "x402 fields follow x402 v2 as summarised in docs/partners (PAYMENT-REQUIRED, PAYMENT-SIGNATURE, PAYMENT-RESPONSE; /verify, /settle). Network and asset are placeholders.",
    "Amounts are illustrative only. Fee amounts are placeholders.",
    "console.clock is an illustrative wall clock (06:49:00.000 at t=0), not real time."
  ],
  "steps": [
    {
      "n": 1,
      "id": "h1",
      "lane": "human",
      "element": {
        "number": "01",
        "symbol": "Fi",
        "name": "Fiat · cards"
      },
      "tile_symbol": "Br",
      "name": "Browse",
      "actor": "buyer",
      "action": "Buyer picks a listing",
      "checks": "buyer",
      "approves": null,
      "records": "merchant app",
      "endpoint": "GET shop.example/listings/lst_42 (merchant)",
      "event": null,
      "caption": "A buyer browses a listing. Nothing has moved yet.",
      "console": {
        "clock": "06:49:02.050",
        "t": 2.05,
        "status": "on record",
        "text": "GET shop.example/listings/lst_42",
        "checked": "buyer",
        "approved": "—",
        "detail": [
          "GET /listings/lst_42"
        ]
      },
      "t_start": 1.6,
      "t_end": 4,
      "timecode_start": "00:00:01.600",
      "timecode_end": "00:00:04.000",
      "wire": "# merchant app: nothing has moved yet\nGET /listings/lst_42\n{ \"listing\": \"lst_42\", \"seller\": \"sel_us_19\",\n  \"amount\": \"40.00\", \"currency\": \"USD\" }"
    },
    {
      "n": 2,
      "id": "a1",
      "lane": "agent",
      "element": {
        "number": "05",
        "symbol": "Mm",
        "name": "Machine & agentic"
      },
      "tile_symbol": "In",
      "name": "Intent",
      "actor": "shopping agent",
      "action": "Shopping agent finds the item",
      "checks": "agent",
      "approves": null,
      "records": null,
      "endpoint": "MCP tools/call quote_ticket",
      "event": null,
      "caption": "A shopping agent states its intent and prices it. Nothing is submitted.",
      "console": {
        "clock": "06:49:04.450",
        "t": 4.45,
        "status": "seen",
        "text": "tools/call quote_ticket",
        "checked": "agent",
        "approved": "—",
        "detail": [
          "← { \"perimeter\": \"per_01J9@3\", \"decision\": \"allow\" … }"
        ]
      },
      "t_start": 4,
      "t_end": 6.8,
      "timecode_start": "00:00:04.000",
      "timecode_end": "00:00:06.800",
      "wire": "tools/call quote_ticket  # MCP, submits nothing\n{ \"amount\": \"40.00\", \"currency\": \"USD\",\n  \"payee\": \"marketplace.example\" }\n← { \"perimeter\": \"per_01J9@3\", \"decision\": \"allow\",\n    \"lines\": [{ \"label\": \"network\", \"amount\": \"<fee>\" }] }"
    },
    {
      "n": 3,
      "id": "h2",
      "lane": "human",
      "element": {
        "number": "01",
        "symbol": "Fi",
        "name": "Fiat · cards"
      },
      "tile_symbol": "Pa",
      "name": "Pay",
      "actor": "buyer → marketplace",
      "action": "Card at checkout",
      "checks": "insimbi API (token)",
      "approves": null,
      "records": "insimbi audit record",
      "endpoint": "POST sandbox.api.insimbi.xyz/v1/payments",
      "event": "authorization.allowed",
      "caption": "The buyer pays by card. The marketplace calls insimbi; the access decision is recorded.",
      "console": {
        "clock": "06:49:07.250",
        "t": 7.25,
        "status": "allowed",
        "text": "authorization.allowed",
        "checked": "insimbi API",
        "approved": "—",
        "detail": [
          "POST /v1/payments"
        ]
      },
      "t_start": 6.8,
      "t_end": 9.2,
      "timecode_start": "00:00:06.800",
      "timecode_end": "00:00:09.200",
      "wire": "POST /v1/payments\nIdempotency-Key: idem_7c1e\n{ \"amount\": \"40.00\", \"currency\": \"USD\",\n  \"payment_method\": \"card\", \"order\": \"ord_7781\",\n  \"seller\": \"sel_us_19\", \"split\": \"seller share + fee\" }\n# recorded: authorization.allowed"
    },
    {
      "n": 4,
      "id": "a2",
      "lane": "agent",
      "element": {
        "number": "05",
        "symbol": "Mm",
        "name": "Machine & agentic"
      },
      "tile_symbol": "Pc",
      "name": "Policy check",
      "actor": "insimbi rules + mandate",
      "action": "Mandate: payee, cap, scope",
      "checks": "insimbi mandate check",
      "approves": null,
      "records": "insimbi record",
      "endpoint": "POST sandbox.api.insimbi.xyz/v1/payments (perimeter check)",
      "event": "authorization.allowed",
      "caption": "insimbi checks the agent's mandate: payee, cap and scope. Allowed, and recorded.",
      "console": {
        "clock": "06:49:09.650",
        "t": 9.65,
        "status": "allowed",
        "text": "authorization.allowed",
        "checked": "mandate check",
        "approved": "—",
        "detail": [
          "← { \"perimeter\": \"per_01J9@3\", \"decision\": \"allow\" }"
        ]
      },
      "t_start": 9.2,
      "t_end": 12,
      "timecode_start": "00:00:09.200",
      "timecode_end": "00:00:12.000",
      "wire": "# rules + mandate check, before any network\n{ \"principal\": \"person:buyer_204\",\n  \"scope\": \"marketplace purchases\",\n  \"cap\": \"<cap per order>\" }\n← { \"perimeter\": \"per_01J9@3\", \"decision\": \"allow\" }\n# recorded: authorization.allowed"
    },
    {
      "n": 5,
      "id": "a3",
      "lane": "agent",
      "element": {
        "number": "02",
        "symbol": "Sc",
        "name": "Stablecoins"
      },
      "tile_symbol": "Px",
      "name": "Pay request",
      "actor": "marketplace API → agent",
      "action": "x402-style 402, signed retry",
      "checks": "agent wallet",
      "approves": null,
      "records": null,
      "endpoint": "402 PAYMENT-REQUIRED → PAYMENT-SIGNATURE",
      "event": null,
      "caption": "The marketplace answers 402 with a price. The agent retries with a signed payment.",
      "console": {
        "clock": "06:49:12.450",
        "t": 12.45,
        "status": "seen",
        "text": "402 PAYMENT-REQUIRED",
        "checked": "agent wallet",
        "approved": "—",
        "detail": [
          "PAYMENT-REQUIRED { \"amount\": \"40.00\", \"payTo\": \"marketplace.example\" }"
        ]
      },
      "t_start": 12,
      "t_end": 14.8,
      "timecode_start": "00:00:12.000",
      "timecode_end": "00:00:14.800",
      "wire": "HTTP/1.1 402 Payment Required  # /checkout/ord_7782\nPAYMENT-REQUIRED (decoded): { \"x402Version\": 2,\n  \"accepts\": [{ \"scheme\": \"exact\", \"amount\": \"40.00\",\n  \"asset\": \"<usd-stablecoin>\", \"network\": \"<caip2>\",\n  \"payTo\": \"marketplace.example\" }] }\n→ retry with PAYMENT-SIGNATURE: <signed payload>"
    },
    {
      "n": 6,
      "id": "h3",
      "lane": "human",
      "element": {
        "number": "01",
        "symbol": "Fi",
        "name": "Fiat · cards"
      },
      "tile_symbol": "Ap",
      "name": "Approve",
      "actor": "buyer + card issuer",
      "action": "Buyer confirms (3-D Secure)",
      "checks": "card issuer",
      "approves": "buyer",
      "records": "insimbi record",
      "endpoint": "challenge (3-D Secure)",
      "event": null,
      "caption": "The issuer challenges, the buyer approves. The result goes on the record.",
      "console": {
        "clock": "06:49:15.250",
        "t": 15.25,
        "status": "on record",
        "text": "3-D Secure challenge",
        "checked": "card issuer",
        "approved": "buyer",
        "detail": []
      },
      "t_start": 14.8,
      "t_end": 17.2,
      "timecode_start": "00:00:14.800",
      "timecode_end": "00:00:17.200",
      "wire": "# rail result: challenge such as 3-D Secure\n{ \"payment_id\": \"pay_01J9\", \"challenge\": \"3ds\",\n  \"result\": \"passed\", \"approved_by\": \"buyer\" }"
    },
    {
      "n": 7,
      "id": "a4",
      "lane": "agent",
      "element": {
        "number": "05",
        "symbol": "Mm",
        "name": "Machine & agentic"
      },
      "tile_symbol": "Ap",
      "name": "Approval",
      "actor": "mandate (set by its person)",
      "action": "Inside the mandate",
      "checks": "insimbi mandate check",
      "approves": "the agent's principal, in advance",
      "records": "insimbi record",
      "endpoint": "perimeter decision",
      "event": "authorization.allowed",
      "caption": "Inside the mandate its person approved, so no new approval is needed. Recorded.",
      "console": {
        "clock": "06:49:17.650",
        "t": 17.65,
        "status": "allowed",
        "text": "authorization.allowed",
        "checked": "mandate check",
        "approved": "via mandate",
        "detail": []
      },
      "t_start": 17.2,
      "t_end": 20,
      "timecode_start": "00:00:17.200",
      "timecode_end": "00:00:20.000",
      "wire": "# inside the mandate: no new approval needed\n{ \"type\": \"authorization.allowed\", \"subject\": \"ord_7782\",\n  \"decision\": \"allow\" }"
    },
    {
      "n": 8,
      "id": "i1",
      "lane": "insimbi",
      "element": {
        "number": "26",
        "symbol": "Fe",
        "name": "insimbi"
      },
      "tile_symbol": "Tx",
      "name": "Transaction",
      "actor": "insimbi rules",
      "action": "Split: seller share + fee",
      "checks": "your rules",
      "approves": null,
      "records": "insimbi record",
      "endpoint": "rule: split.marketplace@v2",
      "event": "authorization.allowed",
      "caption": "Person or agent, insimbi applies the same rules and keeps one record.",
      "console": {
        "clock": "06:49:21.050",
        "t": 21.05,
        "status": "allowed",
        "text": "authorization.allowed",
        "checked": "your rules",
        "approved": "—",
        "detail": []
      },
      "t_start": 20.6,
      "t_end": 23.4,
      "timecode_start": "00:00:20.600",
      "timecode_end": "00:00:23.400",
      "wire": "# your rules shape the transaction\n{ \"orders\": [\"ord_7781 (card)\", \"ord_7782 (stablecoin)\"],\n  \"seller_share\": \"<share>\", \"fee\": \"<fee>\",\n  \"rule\": \"rule:split.marketplace@v2\" }\n# recorded: authorization.allowed"
    },
    {
      "n": 9,
      "id": "i2",
      "lane": "insimbi",
      "element": {
        "number": "02",
        "symbol": "Sc",
        "name": "Stablecoins"
      },
      "tile_symbol": "Ra",
      "name": "Rail",
      "actor": "insimbi payout rule",
      "action": "Same-day ACH or stablecoin",
      "checks": "payout rule + wallet screening",
      "approves": null,
      "records": "insimbi record",
      "endpoint": "rule: payout.by_seller@v3",
      "event": null,
      "caption": "A payout rule picks each seller's rail: same-day ACH, or a dollar stablecoin on request.",
      "console": {
        "clock": "06:49:23.850",
        "t": 23.85,
        "status": "on record",
        "text": "rule: payout.by_seller@v3",
        "checked": "payout rule",
        "approved": "—",
        "detail": []
      },
      "t_start": 23.4,
      "t_end": 26.2,
      "timecode_start": "00:00:23.400",
      "timecode_end": "00:00:26.200",
      "wire": "# payout rule picks the rail per seller\n{ \"rule\": \"rule:payout.by_seller@v3\", \"payouts\": [\n  { \"seller\": \"sel_us_19\", \"rail\": \"same_day_ach\" },\n  { \"seller\": \"sel_intl_07\", \"rail\": \"stablecoin\",\n    \"via\": \"regulated partner\", \"screening\": \"clear\" } ] }"
    },
    {
      "n": 10,
      "id": "i3",
      "lane": "insimbi",
      "element": {
        "number": "02",
        "symbol": "Sc",
        "name": "Stablecoins"
      },
      "tile_symbol": "Se",
      "name": "Settle",
      "actor": "rails + regulated partner",
      "action": "ACH file + stablecoin transfer",
      "checks": "rail",
      "approves": null,
      "records": "insimbi record",
      "endpoint": "POST /settle (regulated partner); ACH submit",
      "event": null,
      "caption": "insimbi submits on each chosen rail and takes the rail results back.",
      "console": {
        "clock": "06:49:26.650",
        "t": 26.65,
        "status": "on record",
        "text": "POST /settle",
        "checked": "rail",
        "approved": "—",
        "detail": [
          "← { \"success\": true, \"transaction\": \"<tx-ref>\" … }"
        ]
      },
      "t_start": 26.2,
      "t_end": 29,
      "timecode_start": "00:00:26.200",
      "timecode_end": "00:00:29.000",
      "wire": "POST /settle  # regulated partner\n← { \"success\": true, \"transaction\": \"<tx-ref>\",\n    \"network\": \"<caip2>\" }\n# same-day ACH: result returned to insimbi"
    },
    {
      "n": 11,
      "id": "i4",
      "lane": "insimbi",
      "element": {
        "number": "26",
        "symbol": "Fe",
        "name": "insimbi"
      },
      "tile_symbol": "Re",
      "name": "Record",
      "actor": "insimbi record",
      "action": "Fee lines + the rule per payout",
      "checks": "reconciliation",
      "approves": "buyer, via mandate",
      "records": "insimbi record",
      "endpoint": "GET sandbox.api.insimbi.xyz/v1/tickets/tkt_01J9",
      "event": null,
      "caption": "insimbi writes one record: fee lines, the rule that chose each rail, matched to the orders.",
      "console": {
        "clock": "06:49:29.450",
        "t": 29.45,
        "status": "recorded",
        "text": "GET /v1/tickets/tkt_01J9",
        "checked": "reconciled",
        "approved": "buyer, via mandate",
        "detail": [
          "← 200 { \"ticket_id\": \"tkt_01J9\", \"lines\":  … }"
        ]
      },
      "t_start": 29,
      "t_end": 31.8,
      "timecode_start": "00:00:29.000",
      "timecode_end": "00:00:31.800",
      "wire": "GET /v1/tickets/tkt_01J9\n← 200 { \"ticket_id\": \"tkt_01J9\", \"lines\": [\n  { \"label\": \"authorization\", \"amount\": \"<gross>\" },\n  { \"label\": \"network\", \"rule\": \"rule:fee.ach@v1\" },\n  { \"label\": \"insimbi\", \"rule\": \"rule:fee.insimbi@v1\" } ],\n  \"rule\": \"rule:payout.by_seller@v3\",\n  \"reconciled_to\": [\"ord_7781\", \"ord_7782\"] }\n→ webhook { \"type\": \"payment.captured\" }"
    }
  ]
}
