After [creating a token](/docs/guides/create-a-token), deploy it onchain. Deployment creates the mint account on Solana and assigns authorities to your configured wallets.

You can deploy from the dashboard or through the API. In the dashboard, open the pending token and use **Deploy** from the token header or fund management panel.

## Prerequisites

- A token in `pending` status
- A [wallet configured](/docs/guides/setup-wallets) for signing

## Execute mode (SDP signs)

<Tabs items={["curl", "TypeScript", "Java"]}>
<Tab value="curl">
```bash
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/deploy \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: deploy-acme-001"
```
</Tab>
<Tab value="TypeScript">
```typescript
const response = await fetch(
  "https://api.solana.com/v1/issuance/tokens/tok_abc123/deploy",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer sk_test_...",
      "Idempotency-Key": "deploy-acme-001",
    },
  }
);
const { data } = await response.json();
// data.token.mintAddress — the onchain address
```
</Tab>
<Tab value="Java">
```java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.solana.com/v1/issuance/tokens/tok_abc123/deploy"))
    .header("Authorization", "Bearer sk_test_...")
    .header("Idempotency-Key", "deploy-acme-001")
    .POST(HttpRequest.BodyPublishers.noBody())
    .build();
```
</Tab>
</Tabs>

The token status changes from `pending` to `active`, and `mintAddress` is populated with the onchain address. No request body is required for the public deploy endpoint.

## Prepare mode (you sign)

<Tabs items={["curl", "TypeScript", "Java"]}>
<Tab value="curl">
```bash
curl -X POST https://api.solana.com/v1/issuance/tokens/tok_abc123/deploy/prepare \
  -H "Authorization: Bearer sk_test_..."
```
</Tab>
<Tab value="TypeScript">
```typescript
const response = await fetch(
  "https://api.solana.com/v1/issuance/tokens/tok_abc123/deploy/prepare",
  {
    method: "POST",
    headers: { "Authorization": "Bearer sk_test_..." },
  }
);
const { data } = await response.json();
// data.transaction.serialized — base64 transaction to sign
```
</Tab>
<Tab value="Java">
```java
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.solana.com/v1/issuance/tokens/tok_abc123/deploy/prepare"))
    .header("Authorization", "Bearer sk_test_...")
    .POST(HttpRequest.BodyPublishers.noBody())
    .build();
```
</Tab>
</Tabs>

The response contains a base64-encoded unsigned transaction. Sign it with your private key, then submit to Solana. See [Prepare vs Execute](/docs/guides/prepare-vs-execute) for details.

## Idempotency

Always include an `Idempotency-Key` header on deploy requests. If a network error occurs mid-flight, retrying with the same key prevents double-deployment.