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

# Mint Bastion-issued stablecoins with the Issuance API

> End-to-end quickstart to mint Bastion-issued stablecoins: register a mint destination address, create mint instructions, wire USD, and track the mint.

## Mint Bastion issued stablecoins

This guide walks you through the process of minting stablecoins using Bastion's Issuance API. Minting converts fiat currency (USD) into stablecoins that are delivered to a specified blockchain address.

### Overview

The minting process involves several steps:

1. **Create a mint destination address** - Register the blockchain address where minted stablecoins will be sent
2. **Create mint instructions** - Set up the minting configuration linking the identity, destination address, and payment details
3. **Send a wire transfer** - Initiate the mint by sending USD to the provided bank account with the memo ID
4. **Monitor the mint** - Track the status of your mint request

### Prerequisites

Before you begin, ensure you have:

* A valid API key with issuance permissions
* An approved **Business** identity created for the minting entity
  * Note that Issuance is not supported for **Individual** identities at this moment
* A blockchain wallet address on a supported chain (Solana Mainnet, Solana Devnet, or Base Sepolia)

### Step 1: create a mint destination address

First, register the blockchain address where minted stablecoins will be delivered.

#### Request

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X POST https://api.prod.bastion.com/v2/issuance/mint-addresses \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "request_id": "550e8400-e29b-41d4-a716-446655440000",
      "address": "7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV",
      "chain": "SOLANA_DEVNET",
      "label": "Treasury Wallet",
      "identity_id": "id_123456789"
    }'
  ```
</CodeGroup>

#### Request parameters

| Parameter     | Type          | Required | Description                                                 |
| ------------- | ------------- | -------- | ----------------------------------------------------------- |
| `request_id`  | string (UUID) | Yes      | Idempotency key in UUID format                              |
| `address`     | string        | Yes      | The blockchain wallet address to receive minted stablecoins |
| `chain`       | enum          | Yes      | Blockchain network: `SOLANA_DEVNET`                         |
| `label`       | string        | Yes      | A human-readable label for the address                      |
| `identity_id` | string        | Yes      | The identity ID that owns this mint address                 |

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "id": "mda_abc123def456",
    "address": "7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV",
    "chain": "SOLANA_DEVNET",
    "label": "Treasury Wallet",
    "identity_id": "id_123456789"
  }
  ```
</CodeGroup>

### Step 2: create mint instructions

Create mint instructions that specify how mints should be processed, including the destination address and payment details.

#### Request

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X POST https://api.prod.bastion.com/v2/issuance/mint-instructions \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "identity_id": "id_123456789",
      "request_id": "660e8400-e29b-41d4-a716-446655440001",
      "stablecoin_symbol": "USDX",
      "mint_destination_address_id": "mda_abc123def456",
      "payment_rail": "WIRE",
      "fiat_currency_symbol": "USD",
      "label": "Primary Mint Instructions"
    }'
  ```
</CodeGroup>

#### Request parameters

| Parameter                     | Type          | Required | Description                                                                                                     |
| ----------------------------- | ------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `identity_id`                 | string        | Yes      | The identity ID for this mint instruction                                                                       |
| `request_id`                  | string (UUID) | Yes      | Idempotency key in UUID format                                                                                  |
| `stablecoin_symbol`           | string        | Yes      | Symbol of the stablecoin to mint (e.g., `USDX`). Confirm the symbol to be used with your Bastion representative |
| `mint_destination_address_id` | string        | Yes      | ID of the mint destination address created in Step 1                                                            |
| `payment_rail`                | enum          | Yes      | Payment method (currently only `WIRE` is supported)                                                             |
| `fiat_currency_symbol`        | enum          | Yes      | Fiat currency (currently only `USD` is supported)                                                               |
| `label`                       | string        | No       | A human-readable label for the instruction                                                                      |

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "mint_instructions": {
      "id": "mi_xyz789abc123",
      "identity_id": "id_123456789",
      "request_id": "660e8400-e29b-41d4-a716-446655440001",
      "stablecoin_symbol": "USDX",
      "chain": "SOLANA_DEVNET",
      "mint_destination_address_id": "mda_abc123def456",
      "payment_rail": "WIRE",
      "fiat_currency_symbol": "USD",
      "memo_id": "BSTN-MI-12345",
      "bank_account_details": {
        "bank_name": "Partner Bank",
        "account_holder_name": "Bastion Treasury Services",
        "account_number": "123456789012",
        "routing_number": "021000021",
        "type": "checking",
        "address": {
          "street_line_1": "123 Financial District",
          "city": "New York",
          "postal_code": "10004",
          "country": "US",
          "region_code": "NY"
        }
      },
      "label": "Primary Mint Instructions"
    }
  }
  ```
</CodeGroup>

> **Important:** Save the `memo_id` and `bank_account_details` from the response. You'll need these to initiate the wire transfer.

### Step 3: initiate the mint (wire transfer)

To mint stablecoins, send a wire transfer to the bank account provided in the mint instructions response.

**Critical requirements:**

* **Include the memo ID**: The wire transfer **must** include the `memo_id` from Step 2 in the memo/reference field. Without this, the mint cannot be processed.
* **Use the correct bank details**: Send funds to the exact bank account details provided in `bank_account_details`.
* **Supported currency**: Only USD wire transfers are currently supported.

Once the wire transfer is received and verified, Bastion will automatically mint the equivalent amount of stablecoins and send them to your registered mint destination address.

#### Initiating test mints in sandbox

In sandbox you may simulate a wire transfer via the [Simulate Fiat Deposit endpoint](/v2/api-reference/simulation/simulate-fiat-deposit). Calling this endpoint with the request body provided below will trigger a test mint. The ID of the triggered mint will be returned in the response.

#### Request

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
  	"amount": "1234",
    "memo_id": "BSTN-MI-12345",
    "currency": "USD",
  	"payment_rail": "WIRE"
  }
  ```
</CodeGroup>

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
  	"mint_id": "mint_001abc"
  }
  ```
</CodeGroup>

### Step 4: monitor mint status

#### List all mints

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X GET "https://api.prod.bastion.com/v2/issuance/mints?identity_id=id_123456789&limit=10" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

#### Query parameters

| Parameter     | Type    | Required | Description                                                                             |
| ------------- | ------- | -------- | --------------------------------------------------------------------------------------- |
| `status`      | enum    | No       | Filter by status: `ACCEPTED`, `SUBMITTED`, `COMPLETED`, `DENIED`, `FAILED`, `CANCELLED` |
| `limit`       | integer | No       | Max results per page (1-25, default: 10)                                                |
| `cursor`      | string  | No       | Pagination cursor for next page                                                         |
| `identity_id` | string  | No       | Filter by identity ID                                                                   |

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "mints": [
      {
        "id": "mint_001abc",
        "amount": "10000.00",
        "chain": "SOLANA_DEVNET",
        "mint_address_id": "mda_abc123def456",
        "status": "COMPLETED",
        "external_tx_id": "5wHu2hC7rnP3YqKf...",
        "identity_id": "id_123456789",
        "stablecoin_symbol": "USDC"
      }
    ],
    "cursor": "eyJsYXN0X2lkIjoibWludF8wMDFhYmMifQ=="
  }
  ```
</CodeGroup>

#### Get a specific mint

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X GET https://api.prod.bastion.com/v2/issuance/mints/mint_001abc \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "id": "mint_001abc",
    "amount": "10000.00",
    "chain": "SOLANA_DEVNET",
    "mint_address_id": "mda_abc123def456",
    "status": "COMPLETED",
    "external_tx_id": "5wHu2hC7rnP3YqKf...",
    "identity_id": "id_123456789",
    "stablecoin_symbol": "USDC"
  }
  ```
</CodeGroup>

### Mint status values

| Status      | Description                                           |
| ----------- | ----------------------------------------------------- |
| `ACCEPTED`  | Wire transfer received and mint request accepted      |
| `SUBMITTED` | Mint transaction submitted to the blockchain          |
| `COMPLETED` | Stablecoins successfully minted and delivered         |
| `DENIED`    | Mint request was denied (compliance or other reasons) |
| `FAILED`    | Mint transaction failed                               |
| `CANCELLED` | Mint request was cancelled                            |

### Additional endpoints

#### List mint destination addresses

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X GET "https://api.prod.bastion.com/v2/issuance/mint-addresses?identity_id=id_123456789" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

#### Get mint destination address

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X GET https://api.prod.bastion.com/v2/issuance/mint-addresses/mda_abc123def456 \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

#### List mint instructions

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X GET "https://api.prod.bastion.com/v2/issuance/mint-instructions?identity_id=id_123456789" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

#### Get mint instructions

<CodeGroup>
  ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X GET https://api.prod.bastion.com/v2/issuance/mint-instructions/mi_xyz789abc123 \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</CodeGroup>

### Supported chains

| Chain                                  | Enum Value      |
| -------------------------------------- | --------------- |
| Solana Devnet                          | `SOLANA_DEVNET` |
| Base Sepolia (Currently not available) | `BASE_SEPOLIA`  |

### Error handling

| HTTP Status | Description                                                |
| ----------- | ---------------------------------------------------------- |
| `400`       | Bad request - Check request parameters                     |
| `401`       | Unauthorized - Invalid or missing API key                  |
| `404`       | Resource not found                                         |
| `409`       | Conflict - Resource already exists (check idempotency key) |
| `500`       | Internal server error                                      |

### Webhooks

Configure webhooks to receive real-time notifications when mint status changes. See the [Webhooks documentation](/v2/api-reference/webhooks/overview) for setup instructions.

### Best practices

1. **Use unique request IDs**: Always generate a new UUID for each `request_id` to ensure idempotency.
2. **Verify bank details**: Double-check the bank account details before initiating wire transfers.
3. **Include memo ID**: Always include the exact `memo_id` in your wire transfer memo field.
4. **Monitor status**: Use webhooks or polling to track mint progress.
5. **Test on Devnet**: Use Solana Devnet or Base Sepolia for testing before moving to production.


## Related topics

- [Mint Bastion-issued stablecoins from the Dashboard](/guides/dashboard/mint-bastion-stablecoin.md)
- [Issuance API overview](/v2/api-reference/issuance/overview.md)
- [Stablecoin issuance concepts](/guides/concepts/stablecoin-issuance.md)
- [Redeem Bastion-issued stablecoins to USD](/guides/quickstarts/redeem-bastion-issued-stablecoins.md)
- [List Mints](/v2/api-reference/issuance/list-mints.md)
