# Payments AI — exhaustive agent index Site: https://doc.mor.payments.ai Product: Payments AI MoR (Merchant of Record for AI-built apps) MCP: https://mor.payments.ai/api/mcp Start with https://doc.mor.payments.ai/llms.txt if you only need navigation. This file is the longer reference. ================================================================================ DISCOVERY (no auth) ================================================================================ - GET /SKILL.md — Agent Skills file - GET /auth.md — OAuth + bearer walkthrough - GET /llms.txt — concise index - GET /llms-full.txt — this file - GET /openapi-public.json — Merchant Public API + buyer checkout - GET /.well-known/agent-skills/index.json — Agent Skills Discovery RFC v0.2.0 - GET /.well-known/agent-skills.json — legacy skills card - GET https://mor.payments.ai/.well-known/mcp/server-card.json — SEP-1649 - GET https://mor.payments.ai/.well-known/mcp.json — alias of the server card - GET https://mor.payments.ai/.well-known/oauth-authorization-server - GET https://mor.payments.ai/.well-known/oauth-protected-resource/api/mcp Install skill: mkdir -p "$HOME/.payments-ai" && curl --fail --show-error --location \ --output "$HOME/.payments-ai/SKILL.md" \ "https://doc.mor.payments.ai/SKILL.md" Plugins: https://github.com/paymentsai/Payments-AI-skills npx skills add paymentsai/Payments-AI-skills ================================================================================ MCP ================================================================================ Transport: Streamable HTTP (no SSE) URL: https://mor.payments.ai/api/mcp Auth: OAuth 2.1 + PKCE S256 (preferred) or User MCP Key Bearer pai_mcp_* Human setup: https://doc.mor.payments.ai/mcp Agent auth: https://doc.mor.payments.ai/auth.md Host config (OAuth): { "mcpServers": { "payments-ai": { "url": "https://mor.payments.ai/api/mcp" } } } Tools (underscore names): get_my_merchant search_payments_ai_docs create_merchant_account — name, email, phone E.164; returns merchantId get_merchant_activation_status — pending | verification_pending | active | not_provisioned go_live — promote sandbox merchant to live; idempotent, returns current status; copies nothing (see below) create_product — product + plans; amount is decimal USD not cents list_products — includes checkoutUrl per plan get_product_image_upload_url — presigned POST; file field last; then confirm confirm_product_image get_checkout_customization update_checkout_customization — merge patch; omit unchanged fields set_checkout_logo — action mint | confirm; bytes never through MCP Mutating product/checkout tools target sandbox until go_live. go_live does not copy products, plans, or checkout customization — the live side starts with an empty catalog. Re-create products/plans with create_product and re-apply branding with update_checkout_customization after promoting. set_checkout_logo writes to sandbox only; set the live logo in https://mor.payments.ai/checkout-builder with Live selected. A sandbox checkout link keeps ?isSandbox=true forever and never becomes a live link. Sandbox needs no KYC/KYB. Live can process up to $5,000 in card transactions before identity verification is required; payouts always require completed KYC/KYB regardless of that threshold, before adding a payout method and before the first live payout. Checkout URL: sandbox https://mor.payments.ai/payment/{planId}?isSandbox=true live https://mor.payments.ai/payment/{planId} (only after create_product re-runs on live — go_live alone does not create it) Scopes: health:read, docs:read, merchant:create, merchant:read, merchant:go_live, product:create, product:read, checkout:read, checkout:write No destructive MCP tools (no payout, refund, revoke, delete). ================================================================================ REST — Merchant Public API ================================================================================ Sandbox base: https://sandbox.mor.payments.ai/api Auth: Authorization: Bearer pai_test_<64 hex> Live: pai_live_* on the live API host. Docs Try It blocks live keys. Prefix: /v1/public-api/merchants/{merchantId}/… Partner onboarding (not merchant-scoped): POST /v1/public-api/merchants Auth: Bearer pai_test_* / pai_live_* (the calling merchant becomes the parent) Assign team member (scoped): POST /v1/public-api/merchants/{merchantId}/members body: { email, role: owner|admin|editor|viewer } — user must be active on caller's team API keys (scoped): GET/POST /api-keys; DELETE /api-keys/{id} Guide: /partner-onboarding Single-merchant create can also go through the dashboard or MCP, then use merchantId in every merchant-scoped Public API path. Buyer checkout (no merchant key): /v1/checkout/plans/{planId}/… includes POST …/confirm used by the embed Guides: Quickstart /quickstart Public API /public-api Partner Onboarding /partner-onboarding Webhooks /webhooks API Reference /api Errors /errors/{slug} Error docUrl: https://doc.mor.payments.ai/errors/{slug} slug = code with `.` and `_` replaced by `-`, lowercased ================================================================================ WEBHOOKS ================================================================================ Dashboard: Developer Tools → Webhooks Guide: https://doc.mor.payments.ai/webhooks Verify signatures before acting. Destination CRUD is owner/admin on the authenticated API, not the merchant public API. ================================================================================ SAFETY ================================================================================ - Prefer sandbox keys and sandbox checkout query param while exploring - Do not log or commit pai_mcp_*, pai_test_*, pai_live_*, or OAuth codes - Phone numbers for merchant create must be E.164 with country code - Product name and plan name max 30 characters - Product images: POST multipart to presigned URL, file field last, ≤ 5 MB - Checkout logo: PUT raw bytes to mint uploadUrl with matching Content-Type