> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crossmint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Send payouts from your treasury wallet

<CardGroup cols={2}>
  <Snippet file="before-you-start.mdx" />
</CardGroup>

<Snippet file="enterprise-feature.mdx" />

Crossmint Payouts enable you to send compliant stablecoin payouts from your treasury wallet, using the [Transfer Token API](/api-reference/wallets/transfer-token). Crossmint automatically handles compliance so if the payout does not meet regulatory requirements, the call will fail.

<Steps>
  <Step title="Install the SDK">
    Run the following command to install the SDK:

    <Snippet file="wallets-sdk-installation-cmd.mdx" />
  </Step>

  <Step title="Get your treasury wallet">
    Retrieve your treasury wallet using the alias:

    <CodeGroup>
      ```bash cURL theme={null}
      curl --request GET \
          --url 'https://staging.crossmint.com/api/2025-06-09/wallets/evm:smart:alias:treasury' \
          --header 'X-API-KEY: <your-server-api-key>'
      ```

      ```typescript Node.js theme={null}
      import { CrossmintWallets, createCrossmint } from "@crossmint/wallets-sdk";

      const crossmint = createCrossmint({
          apiKey: "<your-server-api-key>",
      });

      const crossmintWallets = CrossmintWallets.from(crossmint);

      const treasuryLocator = "evm:smart:alias:treasury"; // your treasury wallet alias

      const treasuryWallet = await crossmintWallets.getWallet(treasuryLocator, {
          chain: "base-sepolia",
      });

      await treasuryWallet.useSigner({ type: "server", secret: process.env.WALLET_SIGNER_SECRET! });
      ```

      ```python Python theme={null}
      import requests

      treasury_locator = "evm:smart:alias:treasury"  # your treasury wallet alias

      url = f"https://staging.crossmint.com/api/2025-06-09/wallets/{treasury_locator}"

      headers = {
          "X-API-KEY": "<your-server-api-key>"
      }

      response = requests.get(url, headers=headers)

      print(response.json())
      ```
    </CodeGroup>

    <Note> Create a treasury wallet if you do not have one already [here](/wallets/guides/treasury-wallets). </Note>
  </Step>

  <Step title="Create recipient wallet">
    Create a wallet for the recipient to receive funds in:

    <CodeGroup>
      ```bash cURL theme={null}
      curl --request POST \
          --url 'https://staging.crossmint.com/api/2025-06-09/wallets' \
          --header 'X-API-KEY: <your-server-api-key>' \
          --header 'Content-Type: application/json' \
          --data '{
              "chain": "base-sepolia",
              "adminSigner": {
                  "type": "evm-email-otp",
                  "email": "johnd@example.com"
              },
              "linkedUser": "userId:johnd-123"
          }'
      ```

      ```typescript Node.js theme={null}
      const userLocator = "userId:johnd-123";

      const wallet = await crossmintWallets.createWallet({
          chain: "base-sepolia",
          recovery: {
              type: "email",
              email: "johnd@example.com"
          },
          owner: userLocator
      });

      console.log(wallet.address);
      ```

      ```python Python theme={null}
      import requests

      url = "https://staging.crossmint.com/api/2025-06-09/wallets"

      payload = {
          "chain": "base-sepolia",
          "adminSigner": {
              "type": "evm-email-otp",
              "email": "johnd@example.com"
          },
          "linkedUser": "userId:johnd-123"
      }
      headers = {
          "X-API-KEY": "<your-server-api-key>",
          "Content-Type": "application/json"
      }

      response = requests.post(url, json=payload, headers=headers)

      print(response.json())
      ```
    </CodeGroup>
  </Step>

  <Step title="Register recipient as user">
    Register the recipient as a user with Crossmint and provide the required user details to facilitate a compliant money transfer:

    <CodeGroup>
      ```bash cURL theme={null}
      curl --request PUT \
          --url 'https://staging.crossmint.com/api/2025-06-09/users/userId:johnd-123' \
          --header 'X-API-KEY: <your-server-api-key>' \
          --header 'Content-Type: application/json' \
          --data '{
              "userDetails": {
                  "firstName": "John",
                  "lastName": "Doe",
                  "dateOfBirth": "1995-01-01",
                  "countryOfResidence": "DE"
              }
          }'
      ```

      ```javascript Node.js theme={null}
      const userLocator = "userId:johnd-123";

      const options = {
          method: 'PUT',
          headers: {'X-API-KEY': '<your-server-api-key>', 'Content-Type': 'application/json'},
          body: JSON.stringify({
              userDetails: {
                  firstName: "John",
                  lastName: "Doe",
                  dateOfBirth: "1995-01-01",
                  countryOfResidence: "DE"
              }
          })
      };

      fetch(`https://staging.crossmint.com/api/2025-06-09/users/${userLocator}`, options)
          .then(response => response.json())
          .then(response => console.log(response))
          .catch(err => console.error(err));
      ```

      ```python Python theme={null}
      import requests

      user_locator = "userId:johnd-123"

      url = f"https://staging.crossmint.com/api/2025-06-09/users/{user_locator}"

      payload = {
          "userDetails": {
              "firstName": "John",
              "lastName": "Doe",
              "dateOfBirth": "1995-01-01",
              "countryOfResidence": "DE"
          }
      }
      headers = {
          "X-API-KEY": "<your-server-api-key>",
          "Content-Type": "application/json"
      }

      response = requests.put(url, json=payload, headers=headers)

      print(response.json())
      ```
    </CodeGroup>
  </Step>

  <Step title="Send payout">
    Send a payout from your treasury wallet. The API will automatically check compliance requirements. If the payout does not meet regulatory requirements (e.g., missing KYC/KYB, sanctions issues, travel rule violations), the call will fail with an error.

    <CodeGroup>
      ```bash cURL theme={null}
      curl --request POST \
          --url 'https://staging.crossmint.com/api/2025-06-09/wallets/evm:smart:alias:treasury/tokens/base-sepolia:usdc/transfers' \
          --header 'X-API-KEY: <your-server-api-key>' \
          --header 'Content-Type: application/json' \
          --data '{
              "recipient": "userId:johnd-123",
              "amount": "100"
          }'
      ```

      ```typescript Node.js theme={null}
      try {
          const { hash, explorerLink } = await treasuryWallet.send(
              userLocator,
              "usdc",
              "100"
          );
          
          console.log(`Transfer successful: ${hash}`);
          console.log(`Explorer: ${explorerLink}`);
      } catch (error) {
          // The payout will fail if compliance requirements are not met
          // Common reasons: missing KYC/KYB, sanctions checks, travel rule violations
          console.error("Transfer failed:", error.message);
      }
      ```

      ```python Python theme={null}
      import requests

      treasury_locator = "evm:smart:alias:treasury"
      token_locator = "base-sepolia:usdc"

      url = f"https://staging.crossmint.com/api/2025-06-09/wallets/{treasury_locator}/tokens/{token_locator}/transfers"

      payload = {
          "recipient": "userId:johnd-123",
          "amount": "100"
      }
      headers = {
          "X-API-KEY": "<your-server-api-key>",
          "Content-Type": "application/json"
      }

      response = requests.post(url, json=payload, headers=headers)

      print(response.json())
      ```
    </CodeGroup>

    <Note>
      **Signing transactions (REST API):** The cURL and Python examples above use the simplified [Transfer Token](/api-reference/wallets/transfer-token) endpoint. If your integration requires custom transaction signing, see the full create → sign → approve flow in [Send a Transaction (EVM) — REST tab](/wallets/guides/send-transaction-evm#rest).
    </Note>

    <Note> The transfer API automatically performs compliance checks. If the payout fails due to compliance issues, you will receive an error message indicating what requirements were not met.</Note>
  </Step>
</Steps>

## Compliance Requirements

Payouts will fail if they do not meet regulatory requirements:

* **AML Screening**: Automatic screening against sanctions lists and watchlists
* **Travel Rule Compliance**: Required data exchange for cross-border transfers
* **Transaction Limits**: Adherence to regulatory thresholds and limits

If a payout fails, check the error message for specific compliance requirements that need to be addressed.

## Launching in Production

For production, the steps are almost identical, but some changes are required:

1. Create a developer account on the [production console](https://www.crossmint.com/console)
2. Create a production server API key on the [API Keys](https://www.crossmint.com/console/projects/apiKeys) page with the API scopes `wallets.read`, `wallets:transactions.create`, `wallets:transactions.sign`
3. Replace your test API key with the production key
4. Ensure all compliance requirements are configured for your production environment

## Learn More

<CardGroup cols={3}>
  <Card title="Payouts Overview" icon="shield-check" iconType="duotone" href="/stablecoin-orchestration/regulated-transfers/overview">
    Learn more about payouts and compliance features.
  </Card>

  <Card title="Transfer Tokens Guide" icon="coins" iconType="duotone" color="#1A5785" href="/wallets/guides/transfer-tokens">
    Detailed guide on transferring tokens between wallets.
  </Card>

  <Card title="Treasury Wallet" icon="vault" iconType="duotone" color="#6554C0" href="/wallets/concepts/treasury">
    Learn about managing your treasury wallet.
  </Card>
</CardGroup>

## Other Links

<CardGroup cols={2}>
  <Card title="API Reference" icon="terminal" color="#B56710" href="/api-reference/wallets/transfer-token">
    Deep dive into API reference docs.
  </Card>

  <Card title="Talk to an expert" icon="message" iconType="duotone" color="#ADD8E6" href="https://www.crossmint.com/contact/sales">
    Contact the Crossmint sales team for support.
  </Card>
</CardGroup>
