Developers & AI agents
Payments your AI assistant can run
MerchantLink is a native MCP server with a matching REST API. Let Claude or your own agents create invoices, send payment links and follow the money, with limits and approvals you control.
MCP server
Connect an assistant in one line
MerchantLink speaks the Model Context Protocol over Streamable HTTP. Any MCP client can discover its tools, and each key only sees the tools its scopes allow.
claude mcp add --transport http merchantlink https://www.merchantlink.ai/api/mcp \
--header "Authorization: Bearer ml_sk_…"{
"mcpServers": {
"merchantlink": {
"type": "http",
"url": "https://www.merchantlink.ai/api/mcp",
"headers": {
"Authorization": "Bearer ml_sk_…"
}
}
}
}REST API
The same operations over plain HTTP
Integer cents, predictable JSON, Stripe-style idempotency keys, and pay links and QR codes in every response.
curl https://www.merchantlink.ai/api/v1/invoices \
-H "Authorization: Bearer ml_sk_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7f3c9a" \
-d '{
"customer": { "name": "Jane Smith", "email": "jane@example.com" },
"items": [{ "description": "Logo design", "unit_amount_cents": 45000 }],
"due_date": "2026-10-07"
}'{
"id": "inv_…",
"object": "invoice",
"number": "INV-1012",
"status": "open",
"total_cents": 45000,
"amount_due_cents": 45000,
"pay_url": "https://www.merchantlink.ai/pay/v7nkneh7ts",
"qr_code_url": "https://www.merchantlink.ai/api/qr/v7nkneh7ts"
}{
"status": "pending_approval",
"approval_id": "ai_…",
"message": "This API key requires approval before contacting customers…"
}Guardrails for autonomous agents
Give agents real power, safely
Every API key is a policy. Decide what an agent may do, how much it may bill, and when it must ask you first.
Scoped keys
Amount limits
Approval before contact
Audit trail
Idempotency
Event feed
OpenAPI 3.1
llms.txt
Reference
20 tools, one catalogue
Identical over MCP and REST. Money is always integer cents.
| Tool | Scope | What it does |
|---|---|---|
| create_payment_link | links:write | Create a shareable payment link with a QR code. type "fixed" = one-time payment of amount_cents; "donation" = payer picks from suggested_amounts or enters any amount; "open" = payer enters any amount. Returns the pay url and qr_code_url. |
| list_payment_links | links:read | List standalone payment links (fixed, donation, open) with amounts collected. |
| get_payment_link | links:read | Get a payment link by id. |
| set_payment_link_status | links:write | Deactivate a payment link so it can no longer be paid, or re-activate it. |
| create_invoice | invoices:write | Create an itemized invoice. Pass customer_id, or customer {name, email, phone} to match/create one. Amounts are integer cents. Every invoice gets a pay_url and qr_code_url. Use send_payment_request afterwards to email/text it. |
| list_invoices | invoices:read | List invoices, optionally filtered by status (draft, open, partially_paid, paid, void, overdue) or customer_id. |
| get_invoice | invoices:read | Get an invoice with line items, balance due, pay_url and payments. |
| finalize_invoice | invoices:write | Finalize a draft invoice so it becomes payable. |
| void_invoice | invoices:write | Void an unpaid invoice. Its payment link stops accepting payments. |
| send_payment_request | messages:send | Email and/or text the pay link for an invoice or payment link to the customer. Texts only go to customers who opted in themselves on the payment page or the merchant's text sign-up page; otherwise use email. If the API key requires approval, the send is queued for the merchant to approve. |
| create_customer | customers:write | Create a customer. Phone numbers in E.164 (+15551234567). |
| list_customers | customers:read | List or search customers by name, email, company or phone. |
| get_customer | customers:read | Get a customer by id. |
| list_payments | payments:read | List payments (most recent first), optionally by status or invoice. |
| get_payment | payments:read | Get a payment by id. |
| refund_payment | refunds:write | Request a full or partial refund (amount_cents). Refunds requested by agents always require merchant approval. |
| get_account_summary | insights:read | Revenue collected in the last N days, outstanding and overdue balances, and the probability-weighted collections forecast for the coming weeks. |
| list_events | insights:read | Poll the account event log (payment.succeeded, invoice.paid, invoice.viewed, message.received, ...). Pass after_seq from the previous call to get only new events. |
| get_approval | insights:read | Check whether the merchant approved an action this agent requested (status: proposed, executed, rejected, failed). |
| list_pending_approvals | insights:read | Actions waiting for the merchant to approve (AI-drafted reminders, agent requests...). |
Full schemas in the OpenAPI spec and llms.txt.
Send your first payment link today
Every account starts with a built-in sandbox, so you can create invoices, send links and take test payments before you connect a processor.