# Marlin ## Docs - [REST API endpoints for customers](https://yanhgming.mintlify.app/api-reference/customers.md): Create, list, and update customer records. Each customer is linked to their Solana wallet and tied to all invoices and subscriptions on your account. - [API error codes and responses](https://yanhgming.mintlify.app/api-reference/errors.md): Every error the Marlin API can return — HTTP status codes, machine-readable error codes, and how to handle them with the TypeScript SDK. - [REST API endpoints for invoices](https://yanhgming.mintlify.app/api-reference/invoices.md): Create, list, retrieve, and void stablecoin invoices. Each invoice maps to an on-chain PDA and includes a hosted checkout URL for customer payment. - [Marlin REST API reference](https://yanhgming.mintlify.app/api-reference/overview.md): Complete reference for the Marlin REST API. Authenticate with a Bearer token, paginate with cursors, and integrate stablecoin billing into your application. - [REST API endpoints for subscription plans](https://yanhgming.mintlify.app/api-reference/plans.md): Create, list, and update subscription plans. Plans define the amount, stablecoin, and billing interval that customers authorize when they subscribe. - [API keys and webhook settings endpoints](https://yanhgming.mintlify.app/api-reference/settings.md): Manage your Marlin API keys and configure the webhook endpoint that receives signed billing event notifications from Marlin in real time. - [REST API endpoints for subscriptions](https://yanhgming.mintlify.app/api-reference/subscriptions.md): List subscriptions on your account and manage their lifecycle — pause an active subscription, resume a paused one, or cancel it permanently. - [Authenticate with the Marlin API](https://yanhgming.mintlify.app/authentication.md): Create API keys in the Marlin dashboard, pass them as a Bearer token on every request, and handle rate limits using the response headers. - [Managing customers in Marlin](https://yanhgming.mintlify.app/concepts/customers.md): Learn what a Marlin customer record is, how wallet addresses link customers to on-chain payments, and how to use metadata for your own reference data. - [Invoices in Marlin](https://yanhgming.mintlify.app/concepts/invoices.md): Learn how Marlin invoices work — from creation through payment — including lifecycle states, line items, payment URLs, and on-chain fee settlement. - [Supported stablecoins and currencies](https://yanhgming.mintlify.app/concepts/stablecoins.md): Marlin supports USDC, PYUSD, and USDG on Solana mainnet and devnet. Learn how amounts work, what the currency field maps to, and how funds settle. - [How subscriptions work in Marlin](https://yanhgming.mintlify.app/concepts/subscriptions.md): Understand Marlin's delegated recurring billing — customers authorize a spending cap once and Marlin charges on schedule without any repeat approvals. - [Accept stablecoin payments with Marlin](https://yanhgming.mintlify.app/guides/accept-payments.md): Create a customer, issue an invoice with line items, share the hosted payment link, and fulfill the order when Marlin posts the invoice.paid webhook. - [Embed the Marlin checkout widget](https://yanhgming.mintlify.app/guides/embed-widget.md): Add the Marlin checkout widget to a React app or static site using data attributes, programmatic JS, or the React component — all three patterns shown. - [Share a hosted checkout payment link](https://yanhgming.mintlify.app/guides/hosted-checkout.md): Every Marlin invoice and subscription plan includes a hosted checkout URL. Share it with customers to accept stablecoin payments with zero frontend work. - [Set up recurring billing on Solana](https://yanhgming.mintlify.app/guides/recurring-billing.md): Create a subscription plan, let customers subscribe via hosted checkout, and manage subscription lifecycle with the Marlin SDK and webhooks. - [Marlin: Stripe Billing for Solana Stablecoins](https://yanhgming.mintlify.app/introduction.md): Marlin is the complete billing layer for accepting stablecoin payments on Solana. Invoices, subscriptions, hosted checkout, REST API, SDK, and webhooks. - [Get started with Marlin in five minutes](https://yanhgming.mintlify.app/quickstart.md): Install @marlin/sdk, create your first invoice, and share a hosted payment link — your customer pays in USDC, PYUSD, or USDG on Solana. - [Install and configure @marlin/sdk](https://yanhgming.mintlify.app/sdk/installation.md): Install the Marlin TypeScript SDK, initialize the client with your API key, and explore every resource method with working code examples. - [Marlin TypeScript SDK overview](https://yanhgming.mintlify.app/sdk/overview.md): Learn what @marlin/sdk exports, how to configure the Marlin client, and how to create your first invoice in a few lines of TypeScript. - [Use Marlin in React with hooks and components](https://yanhgming.mintlify.app/sdk/react.md): Add stablecoin checkout to any React app using MarlinProvider, MarlinCheckoutButton, and the useMarlinCheckout hook from @marlin/sdk/react. - [Webhook event types reference](https://yanhgming.mintlify.app/webhooks/events.md): Complete reference for every Marlin webhook event type — when each fires, what the data payload contains, and sample JSON for key events. - [Webhooks overview](https://yanhgming.mintlify.app/webhooks/overview.md): Marlin sends signed HTTP POST requests to your endpoint whenever billable events occur, so your backend stays in sync in real time. - [Verify Marlin webhook signatures](https://yanhgming.mintlify.app/webhooks/verification.md): Every Marlin webhook carries a marlin-signature header. Verify it before processing any event to prevent spoofed or replayed requests. - [Integrate the Marlin checkout widget](https://yanhgming.mintlify.app/widget/integration.md): Step-by-step code for all three widget integration patterns: HTML data attributes, programmatic JavaScript, and the React component and hook. - [@marlin/checkout embeddable widget](https://yanhgming.mintlify.app/widget/overview.md): Drop the Marlin checkout widget into any website to accept stablecoin payments via a sandboxed iframe — no backend required for the embed itself.