> ## 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.

# Issuance API overview

> Mint and redeem Bastion-issued stablecoins from an approved business identity: register mint destination addresses, create instructions, and burn tokens.

<Warning>
  Heads up: Stablecoin issuance is a permissioned product and must be explicitly enabled by our team before use. If you’re interested in accessing our stablecoin issuance APIs, please contact us to request activation and discuss eligibility and setup.
</Warning>

## Prerequisites

To mint or redeem, create a `BUSINESS` identity and submit compliance data for that entity. See [this page](/v2/api-reference/compliance/overview#compliance-submission-example) for more details.

***

## Mint workflow

This flow enables minting stablecoin tokens to an address on a supported blockchain.

At this time, the only supported blockchain is `SOLANA_DEVNET`

### Step 1: Register a mint destination address

**Endpoint**: [`POST /v2/issuance/mint-addresses`](/v2/api-reference/issuance/create-mint-destination-address)

Registers an on-chain address as an eligible destination for minted tokens.

Tokens cannot be minted to an address that has not been successfully registered.

#### Request

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

  {
    "request_id": "123e4567-e89b-12d3-a456-426655440000",
    "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
    "address": "8DwKActJ8swmNXGLyfdaoe6vmD2TxX19bhyE3txsmwfj",
    "chain": "SOLANA_DEVNET",
    "label": "treasury hot wallet"
  }
  ```
</CodeGroup>

#### Response

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

  {
      "id": "addr_30CKPHEXdXjb91BZ4FWh5DkLul4",
      "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
      "address": "8DwKActJ8swmNXGLyfdaoe6vmD2TxX19bhyE3txsmwfj",
      "chain": "SOLANA_DEVNET",
      "label": "treasury hot wallet"
  }
  ```
</CodeGroup>

### Step 2: Create mint instructions

**Endpoint**: [`POST /v2/issuance/mint-instructions`](/v2/api-reference/issuance/create-mint-instructions)

Creates a mint instruction for a given identity.

This endpoint will return the following information, which will be needed to trigger a mint:

* Details about the bank account that funds must be transferred to in order to trigger a mint
* A `memo_id`, which must be attached to the memo field of any wire transfer sent to the returned bank account in order to trigger a mint

#### Request

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

  {
    "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
    "request_id": "123e4567-e89b-12d3-a456-426655440000",
    "stablecoin_symbol": "USDX",
    "mint_destination_address_id": "34enYhNwqK0rpKeZA1jnEzW3SFt",
    "payment_rail": "WIRE",
    "fiat_currency_symbol": "USD"
  }
  ```
</CodeGroup>

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "mint_instructions": {
      "id": "34eo2o437kfJDk0QfKYXPmHZ4Ik",
      "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
      "request_id": "123e4567-e89b-12d3-a456-426655440000",
      "stablecoin_symbol": "USDX",
      "chain": "SOLANA_DEVNET",
      "mint_destination_address_id": "34enYhNwqK0rpKeZA1jnEzW3SFt",
      "payment_rail": "WIRE",
      "fiat_currency_symbol": "USD",
      "memo_id": "4Q1EBF3HXY5WD30L",
      "bank_account_details": {
        "name": "Bastion Bank",
        "account_holder_name": "Bastion Bank Account Holder",
        "account_number": "123456789",
        "routing_number": "123456789",
        "type": "CHECKING",
        "address": {
          "street_line_1": "123 Main St",
          "street_line_2": "Apt 1",
          "city": "New York",
          "postal_code": "10001",
          "country": "US",
          "region_code": "NY"
        }
      }
    }
  }
  ```
</CodeGroup>

### Step 3: Send a wire transfer

Send a wire transfer following the mint instructions generated in step 2.

Alternatively, 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": "4Q1EBF3HXY5WD30L",
    "currency": "USD",
  	"payment_rail": "WIRE"
  }
  ```
</CodeGroup>

#### Response

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

### Step 4: View mint history

**Endpoint**: [`GET /v2/issuance/mints`](/v2/api-reference/issuance/list-mints)

List mints and their statuses.

#### Sample call

[`GET /v2/issuance/mints?identity_id=34ekQKpGgpmjAZ4DNu9KiTfGmxk&status=ACCEPTED`](/v2/api-reference/issuance/list-mints)

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "mints": [
      {
        "id": "mint_3xcfXpYaLMLg22TxP1ZEQ09tOq9",
        "amount": "1000",
        "chain": "SOLANA_DEVNET",
        "mint_address_id": "addr_30CKPHEXdXjb91BZ4FWh5DkLul4",
        "status": "ACCEPTED",
        "external_tx_id": "",
        "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
        "stablecoin_symbol": "USDX"
      }
    ],
    "cursor": null
  }
  ```
</CodeGroup>

***

## Redemption workflow

Allows customers to redeem tokens for fiat through supported bank rails.

### Step 1: Register a bank account

**Endpoint**: [`POST /v2/issuance/bank-account`](/v2/api-reference/issuance/create-bank-account)

Registers a bank account with Bastion. Only registered bank accounts can receive the proceeds of any redemptions.

#### Request

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
    "bank_account_details": {
      "name": "Bastion LLC",
      "account_holder_name": "Bastion LLC",
      "account_number": "123456789",
      "routing_number": "123456789",
      "type": "CHECKING",
      "address": {
        "street_line_1": "1234 Main St",
        "city": "San Francisco",
        "country": "US",
        "region_code": "CA",
        "postal_code": "94101"
      }
    }
  }
  ```
</CodeGroup>

#### Response

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "id": "34exkPlHJyLpOUtxXDdKFPXvQzh",
    "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
    "bank_account_details": {
      "name": "Bastion LLC",
      "account_holder_name": "Bastion LLC",
      "account_number": "123456789",
      "routing_number": "123456789",
      "type": "CHECKING",
      "address": {
        "street_line_1": "1234 Main St",
        "street_line_2": "",
        "city": "San Francisco",
        "postal_code": "94101",
        "country": "US",
        "region_code": ""
      }
    }
  }
  ```
</CodeGroup>

### Step 2: Create redemption instructions

**Endpoint**: [`POST /v2/issuance/redemption-instructions`](/v2/api-reference/issuance/create-redemption-instructions)

Creates a blockchain-to-bank redemption path for a customer.

Each redemption instruction is tied to a bank account and fiat payout method and provides a redemption address. When a deposit to this redemption address is detected, a redemption will be initiated.

#### Request

<CodeGroup>
  ```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  {
    "request_id": "323e4567-e89b-12d3-a456-426655440000",
    "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
    "bank_account_id": "34exkPlHJyLpOUtxXDdKFPXvQzh",
    "chain": "SOLANA_DEVNET",
    "label": "default redemption",
    "payment_rail": "WIRE",
    "stablecoin_symbol": "USDX"
  }
  ```
</CodeGroup>

#### Response

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

  {
    "id": "6xcfXpYaLMLg22TxP1ZEQ09tOq9",
    "address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
    "bank_account_id": "34exkPlHJyLpOUtxXDdKFPXvQzh",
    "chain": "SOLANA_DEVNET",
    "label": "default redemption",
    "payment_rail": "WIRE",
    "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
    "stablecoin_symbol": "USDX"
  }
  ```
</CodeGroup>

### Step 3: Deposit to the redemption address

Transfer the stablecoin you would like to redeem to the redemption address generated in step 2.

### Step 4: View redemption history

**Endpoint**: [`GET /v2/issuance/redemptions`](/v2/api-reference/issuance/list-redemptions)

#### Sample call

[`GET /v2/issuance/redemptions?identity_id=34ekQKpGgpmjAZ4DNu9KiTfGmxk&status=ACCEPTED`](/v2/api-reference/issuance/list-redemptions)

#### Response

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

  {
    "redemptions": [
      {
        "id": "red_3xcfXpYaLMLg22TxP1ZEQ09tOq8",
        "amount": "1000",
        "chain": "SOLANA_DEVNET",
        "redemption_address_id": "raddr_6xcfXpYaLMLg22TxP1ZEQ09tOq9",
        "from_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
        "status": "ACCEPTED",
        "deposit_external_tx_id": "",
        "burn_external_tx_id": "",
        "identity_id": "34ekQKpGgpmjAZ4DNu9KiTfGmxk",
        "stablecoin_symbol": "USDX"
      }
    ],
    "cursor": null
  }
  ```
</CodeGroup>


## Related topics

- [Mint Bastion-issued stablecoins with the Issuance API](/guides/quickstarts/mint-bastion-issued-stablecoins.md)
- [Webhooks API overview](/v2/api-reference/webhooks/overview.md)
- [API authentication overview](/guides/security/api-authentication.md)
- [Compliance API overview](/v2/api-reference/compliance/overview.md)
- [Identities API overview](/v2/api-reference/identities/overview.md)
