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

# Launch a token

> Create and deploy a new token with its bonding curve

export const UtxosParamField = ({body = "utxos"}) => <ParamField body={body} type={'"splash-wallet" | string[]'} required>
    UTxO source. Pass `"splash-wallet"` to let the builder resolve wallet UTxOs automatically, or pass `string[]` to provide serialized UTxOs yourself. See <a href="/api-reference/transaction-builder/builder-inputs">UTxO input modes</a>.
  </ParamField>;

export const CollateralsParamField = ({body = "collaterals", note}) => <ParamField body={body} type="string[]">
    Optional collateral inputs. See <a href="/api-reference/transaction-builder/builder-inputs">UTxO input modes</a>. {note}
  </ParamField>;

Builds the transaction that creates a new token, deploys its bonding curve, and (optionally) seeds the creator's initial buy. The request body is `multipart/form-data`.

If `info.collaterals` are omitted, the builder signs the transaction before returning it. If `info.collaterals` are provided explicitly, the returned CBOR remains unsigned.

**Auth:** Public

## Form fields

<ParamField body="image" type="file" required>
  Token image file. Supported MIME types: `image/png`, `image/jpg`, `image/jpeg`, `image/gif`.
</ParamField>

<ParamField body="info" type="object" required>
  Token launch payload object sent alongside `image`.
</ParamField>

<ParamField body="info.assetType" type="string" required>
  Token category. One of `Meme` or `AI`.
</ParamField>

<ParamField body="info.name" type="string" required>
  Token name. Maximum 16 characters.
</ParamField>

<ParamField body="info.ticker" type="string" required>
  Token ticker. Maximum 6 alphanumeric characters.
</ParamField>

<ParamField body="info.description" type="string" required>
  Token description. Maximum 500 characters.
</ParamField>

<ParamField body="info.twitter" type="string">
  Optional X / Twitter URL.
</ParamField>

<ParamField body="info.discord" type="string">
  Optional Discord invite URL.
</ParamField>

<ParamField body="info.telegram" type="string">
  Optional Telegram URL.
</ParamField>

<ParamField body="info.website" type="string">
  Optional website URL.
</ParamField>

<ParamField body="info.launchType" type="string">
  Optional launch tier. One of `DEFAULT` or `HYPED`. Defaults to `DEFAULT`.
</ParamField>

<ParamField body="info.initialDeposit" type="string">
  Optional lovelace amount for the creator's initial buy.
</ParamField>

<ParamField body="info.changeAddress" type="string" required>
  Bech32 change address.
</ParamField>

<UtxosParamField body="info.utxos" />

<CollateralsParamField body="info.collaterals" note="Provide these only when you want to attach collateral inputs explicitly." />

## Response

<ResponseField name="id" type="string">
  Builder transaction ID.
</ResponseField>

<ResponseField name="cbor" type="string">
  Hex-encoded transaction CBOR. It is signed when `info.collaterals` are omitted.
</ResponseField>

<ResponseField name="partial" type="boolean">
  Whether the returned transaction is partial. It is `true` when `info.collaterals` are omitted and `false` when they are provided explicitly.
</ResponseField>

<ResponseField name="assetId" type="string">
  Full Cardano asset ID for the launched token.
</ResponseField>

<ResponseField name="assetSubject" type="string">
  Hex asset subject for the launched token.
</ResponseField>

<ResponseField name="policyId" type="string">
  Policy ID of the launched token.
</ResponseField>

<ResponseField name="logoCID" type="string">
  Uploaded IPFS CID for the token image.
</ResponseField>

<ResponseField name="userOutputTokens" type="string">
  Optional token amount reserved to the creator output.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://builder.snek.fun/launch \
    --header 'Content-Type: multipart/form-data' \
    --form 'image=@logo.png' \
    --form 'info={
      "assetType":"Meme",
      "name":"DAVE",
      "ticker":"DAVE",
      "description":"A sample token launch",
      "launchType":"DEFAULT",
      "initialDeposit":"1000000",
      "changeAddress":"addr1...",
      "utxos":"splash-wallet"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "launch-01...",
    "cbor": "84a500...",
    "partial": true,
    "assetId": "63f947b8d9535bc4e4ce6919e3dc056547e8d30ada12f29aa5f826b8.44415645",
    "assetSubject": "44415645",
    "policyId": "63f947b8d9535bc4e4ce6919e3dc056547e8d30ada12f29aa5f826b8",
    "logoCID": "bafybeigdyrzt5...",
    "userOutputTokens": "1000000000"
  }
  ```
</ResponseExample>

## Error response

<ResponseField name="cause" type="string">
  Machine-readable error code.
</ResponseField>

<ResponseField name="message" type="string">
  Human-readable error message.
</ResponseField>

Possible errors:

* `400 INVALID_PARAMS` — one or more required fields are missing, malformed, or fail validation.
* `500 SERVER_ERROR` — image processing, image upload, protocol config loading, mint data generation, transaction building, or optional signing failed.

<ResponseExample>
  ```json 400 theme={null}
  {
    "cause": "INVALID_PARAMS",
    "message": "Invalid input"
  }
  ```
</ResponseExample>
