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

# Prepare a launch and get its unsigned transactions

> Returns one transaction (pool + optional creator first buy) when a shared config exists for the quote token's price band, otherwise two (config, then pool). Sign each with its listed signers and submit. SOL coins use one fixed curve in SOL, so their dollar market caps move with SOL's price. For other pair tokens the curve is converted from the launch policy's USD targets with the pair token's stored USD price, refreshed weekly; a pair token used for the first time is priced once.



## OpenAPI

````yaml /openapi.json post /api/launch/prepare
openapi: 3.1.0
info:
  title: RUNNERS Launch API
  version: 1.3.0
  summary: Launch a Solana coin from an agent or bot.
  description: >-
    Upload coin metadata, estimate launch costs, prepare unsigned launch
    transactions, sign locally, submit and confirm. All amounts use integer
    base-unit strings. No website session or integrator API key is required. See
    the Launch a coin guide for the optional authorization messages and the
    launchpad signer.
servers:
  - url: https://runners.family
    description: RUNNERS production API (Solana mainnet)
security: []
tags:
  - name: Launch
    description: >-
      Launch a coin from any HTTP client with an ed25519 keypair: upload the
      image and details, prepare (one transaction when a shared config exists
      for the quote token's price band, otherwise two), sign with the listed
      signers, submit (optionally relayed) and confirm. The launch transactions
      the creator's wallet signs authorize the coin; wallet message signatures
      for the upload and the preparation are optional. See the Launch a coin
      guide.
paths:
  /api/launch/prepare:
    post:
      tags:
        - Launch
      summary: Prepare a launch and get its unsigned transactions
      description: >-
        Returns one transaction (pool + optional creator first buy) when a
        shared config exists for the quote token's price band, otherwise two
        (config, then pool). Sign each with its listed signers and submit. SOL
        coins use one fixed curve in SOL, so their dollar market caps move with
        SOL's price. For other pair tokens the curve is converted from the
        launch policy's USD targets with the pair token's stored USD price,
        refreshed weekly; a pair token used for the first time is priced once.
      operationId: prepareLaunch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LaunchPrepareRequest'
      responses:
        '200':
          description: Prepared launch.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreparedLaunch'
        '401':
          description: '`signature_invalid` or `authorization_expired`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '403':
          description: '`origin_forbidden`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '409':
          description: >-
            `network_changed`, `metadata_required`, `draft_changed`,
            `already_submitted`, `not_retryable` or `estimate_expired`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '422':
          description: >-
            `request_invalid`, `unsupported_quote`, `standard_pair_sol` (a
            standard coin paired with a token other than SOL),
            `transfer_fee_quote_unsupported` (the pair token has the transfer
            fee extension, which the network's Meteora programs cannot launch
            yet), `quote_unpriced` (the price provider does not price this pair
            token, so it cannot be a pair), `quote_illiquid` (less than $25,000
            of liquidity behind its price, for a pair token that is not
            pre-warmed), `first_buy_invalid`, `first_buy_too_large` or
            `insufficient_funds`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '429':
          description: Request-rate limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '503':
          description: >-
            `unavailable`, or `price_unavailable`: the pair token's USD price
            cannot be used right now (the provider is unavailable, or a move of
            more than 3x awaits its confirming observation 24 hours later).
            Retry later. A pair token without a usable stored price is priced
            here.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
components:
  schemas:
    LaunchPrepareRequest:
      type: object
      description: >-
        The request fields in exactly this key order, plus `signatureBase64`
        (optional: ed25519 over the message described in the Launch a coin
        guide; a signature that is sent must be valid) and unsigned `options`.
      required:
        - deploymentId
        - owner
        - baseMint
        - quoteMint
        - config
        - mode
        - metadataId
        - metadataNamespace
        - firstBuy
        - issuedAt
      properties:
        deploymentId:
          type: string
        owner:
          $ref: '#/components/schemas/Address'
        baseMint:
          $ref: '#/components/schemas/Address'
          description: Public key of a mint keypair the client generates and keeps.
        quoteMint:
          $ref: '#/components/schemas/Address'
        config:
          $ref: '#/components/schemas/Address'
          description: >-
            Public key of a config keypair the client generates; it signs only
            when no shared config exists.
        mode:
          type: string
          enum:
            - standard
            - rewards
          description: >-
            `standard` coins are paired with SOL only (`quoteMint`
            So11111111111111111111111111111111111111112); `rewards` coins may
            use any supported pair token.
        metadataId:
          type: string
          pattern: ^[a-f0-9]{64}$
        metadataNamespace:
          type: string
          pattern: ^[a-f0-9]{24}$
        firstBuy:
          $ref: '#/components/schemas/Atoms'
          description: Creator's initial buy in quote-token atoms; "0" for none.
        issuedAt:
          type: integer
        signatureBase64:
          type: string
          description: Optional wallet signature over the preparation message.
        options:
          type: object
          properties:
            priority:
              $ref: '#/components/schemas/PriorityLevel'
            slippageBps:
              type: integer
              minimum: 0
              maximum: 5000
            buildTransactions:
              type: boolean
    PreparedLaunch:
      type: object
      required:
        - status
        - deploymentId
        - owner
        - baseMint
        - quoteMint
        - mode
        - config
        - configSource
        - pool
        - firstBuy
        - metadata
        - configInstructionBase64
        - transactionCount
        - costs
        - transactions
      properties:
        status:
          const: ready
        deploymentId:
          type: string
        owner:
          $ref: '#/components/schemas/Address'
        baseMint:
          $ref: '#/components/schemas/Address'
        quoteMint:
          $ref: '#/components/schemas/Address'
        mode:
          type: string
          enum:
            - standard
            - rewards
        config:
          $ref: '#/components/schemas/Address'
        configSource:
          type: string
          enum:
            - shared
            - creator
        pool:
          $ref: '#/components/schemas/Address'
        firstBuy:
          $ref: '#/components/schemas/Atoms'
        metadata:
          type: object
          properties:
            name:
              type: string
            symbol:
              type: string
            uri:
              type: string
        configInstructionBase64:
          type: string
        configCreationSignature:
          anyOf:
            - $ref: '#/components/schemas/Signature'
            - type: 'null'
          description: >-
            For a shared config: the transaction that created it
            (informational). Verify a shared config by comparing its account
            with a simulation of the expected config instruction.
        quoteTokenProgram:
          $ref: '#/components/schemas/Address'
        tokenBadge:
          anyOf:
            - $ref: '#/components/schemas/Address'
            - type: 'null'
        serverTime:
          type: integer
        validUntil:
          type: integer
          description: >-
            Server time until which this prepared draft can be signed and
            submitted: 120 seconds after this prepare call (earlier only if the
            stored pair-token price would become too old). Preparing again is
            free and returns the same terms until the weekly price refresh.
        economics:
          $ref: '#/components/schemas/LaunchEconomics'
        transactionCount:
          type: integer
          enum:
            - 1
            - 2
        costs:
          $ref: '#/components/schemas/LaunchCosts'
        transactions:
          anyOf:
            - type: object
              required:
                - config
                - pool
              properties:
                config:
                  anyOf:
                    - $ref: '#/components/schemas/UnsignedLaunchTransaction'
                    - type: 'null'
                pool:
                  $ref: '#/components/schemas/UnsignedLaunchTransaction'
            - type: 'null'
        firstBuyQuote:
          anyOf:
            - type: object
              properties:
                amountIn:
                  $ref: '#/components/schemas/Atoms'
                tokensOut:
                  $ref: '#/components/schemas/Atoms'
                minimumOut:
                  $ref: '#/components/schemas/Atoms'
                supplyBps:
                  type: integer
                slippageBps:
                  type: integer
            - type: 'null'
    LaunchError:
      type: object
      required:
        - error
        - code
      properties:
        error:
          type: string
        code:
          type: string
          enum:
            - request_invalid
            - signature_invalid
            - authorization_expired
            - origin_forbidden
            - network_changed
            - unavailable
            - metadata_required
            - draft_changed
            - draft_not_found
            - draft_not_ready
            - already_submitted
            - not_retryable
            - upload_limit
            - price_unavailable
            - quote_unpriced
            - quote_illiquid
            - price_pending
            - price_changed
            - estimate_expired
            - estimate_changed
            - unsupported_quote
            - standard_pair_sol
            - transfer_fee_quote_unsupported
            - first_buy_too_large
            - first_buy_invalid
            - transaction_invalid
            - transaction_mismatch
            - transaction_expired
            - not_found
            - conflict
            - request_too_large
            - image_invalid
            - rate_limited
            - insufficient_funds
            - config_required
            - unsent_limit
    Address:
      type: string
      pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$
      description: Base58 Solana address.
      examples:
        - So11111111111111111111111111111111111111112
    Atoms:
      type: string
      pattern: ^[0-9]{1,20}$
      description: >-
        Integer token amount in atoms (the token's smallest unit), as a decimal
        string. One whole token is 10^decimals atoms.
      examples:
        - '1000000'
    PriorityLevel:
      type: string
      enum:
        - normal
        - fast
        - turbo
      description: >-
        Priority fee level: the 50th, 75th or 95th percentile of recent fees
        paid for the same accounts, at least 1,000 / 10,000 / 100,000
        micro-lamports per compute unit, and at most 50,000 / 200,000 /
        1,000,000 lamports in total.
    Signature:
      type: string
      pattern: ^[1-9A-HJ-NP-Za-km-z]{64,88}$
      description: Base58 transaction signature.
    LaunchEconomics:
      type: object
      description: The launch terms the config encodes.
      properties:
        policyRevision:
          type: string
        initialMarketCapUsd:
          type: number
        graduationMarketCapUsd:
          type: number
        migrationQuoteThreshold:
          $ref: '#/components/schemas/Atoms'
        curveFees:
          $ref: '#/components/schemas/LaunchFeeShares'
        migratedFees:
          $ref: '#/components/schemas/LaunchFeeShares'
        antiSniping:
          type: object
          description: >-
            Launch-protection fee: starts high and falls linearly to the curve
            fee within a few seconds. The creator's first buy in the pool
            transaction pays the curve fee.
        priceObservedAt:
          type: integer
          description: >-
            Unix seconds: when the price provider observed the pair token's
            stored USD price (refreshed weekly). Launches accept stored prices
            up to about 8 days old.
        priceBand:
          type: object
          properties:
            index:
              type: integer
            referenceUsd:
              type: number
            stepBps:
              type: integer
    LaunchCosts:
      type: object
      description: >-
        Rent the creator locks when the launch lands, in lamports (network and
        priority fees are separate). configRent is "0" when a shared config
        already exists. firstBuyRent is the token account an initial buy
        creates: included in poolRent and totalRent only when the launch has an
        initial buy (prepare knows its firstBuy; an estimate does not, so add
        firstBuyRent to an estimate for a launch with an initial buy). Every
        coin is a Token-2022 mint with its metadata in the mint: no metadata
        account or metadata fee. Rent uses the network's current rate.
      required:
        - configRent
        - poolRent
        - totalRent
        - firstBuyRent
        - wrappedSolRent
      properties:
        configRent:
          $ref: '#/components/schemas/Atoms'
        poolRent:
          $ref: '#/components/schemas/Atoms'
        totalRent:
          $ref: '#/components/schemas/Atoms'
        firstBuyRent:
          $ref: '#/components/schemas/Atoms'
        wrappedSolRent:
          type: string
          pattern: ^\d+$
          description: >-
            Rent of the temporary wrapped-SOL account a SOL first buy opens and
            closes in the same transaction (refunded), in lamports.
    UnsignedLaunchTransaction:
      type: object
      description: >-
        Legacy wire. Sign the message with every key in `signers` (fee payer
        first) without changing a byte. The pool transaction already carries the
        RUNNERS launchpad signer's signature
        (RUNXxXY4j5LnT4DAZm4w3Vg6sB8bpFxSxUg1rwqLkHx, a read-only signer no
        instruction uses, by which trading terminals attribute the coin): add
        signatures to these bytes (web3.js `partialSign`, not `sign`), never
        rebuild the transaction.
      required:
        - transactionBase64
        - blockhash
        - lastValidBlockHeight
        - signers
        - computeUnitLimit
        - computeUnitPrice
      properties:
        transactionBase64:
          type: string
          contentEncoding: base64
        blockhash:
          type: string
        lastValidBlockHeight:
          $ref: '#/components/schemas/Height'
        signers:
          type: array
          items:
            $ref: '#/components/schemas/Address'
        computeUnitLimit:
          type: integer
        computeUnitPrice:
          type: string
    LaunchFeeShares:
      type: object
      required:
        - creatorBps
        - holderBps
        - platformBps
        - recipientBps
        - grossFeeNumerator
        - grossFeeBps
      properties:
        creatorBps:
          type: number
          description: >-
            Basis points of trading volume; fractional where the creator's
            whole-percent share requires it (a standard coin's creator earns
            49.5).
        holderBps:
          type: number
          description: >-
            Basis points of trading volume; fractional where the creator's
            whole-percent share requires it (a standard coin's creator earns
            49.5).
        platformBps:
          type: number
          description: >-
            Basis points of trading volume; fractional where the creator's
            whole-percent share requires it (a standard coin's creator earns
            49.5).
        recipientBps:
          type: number
          description: >-
            Basis points of trading volume; fractional where the creator's
            whole-percent share requires it (a standard coin's creator earns
            49.5).
        grossFeeNumerator:
          type: string
          description: Fee numerator over 1e9.
        grossFeeBps:
          type: number
        creatorTradingFeePercentage:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            DBC's native creator share: whole percent of the fee after the
            protocol share. 0 after graduation and for coins launched before
            revision v5.
        protocolFeeNumerator:
          type: string
          description: The protocol's share, as a fee numerator over 1e9 of trading volume.
        creatorFeeNumerator:
          type: string
          description: >-
            The creator's share, paid by the pool, as a fee numerator over 1e9
            of trading volume.
        partnerFeeNumerator:
          type: string
          description: >-
            The partner fee the platform collects (holders plus platform), as a
            fee numerator over 1e9 of trading volume.
        holderFeeNumerator:
          type: string
          description: >-
            Holder rewards (reward coins), as a fee numerator over 1e9 of
            trading volume.
        platformFeeNumerator:
          type: string
          description: The platform's share, as a fee numerator over 1e9 of trading volume.
      description: >-
        Shares of trading volume. From policy revision
        `pump-style-usd-airdrops-v5` the pool pays the creator natively
        (`creatorTradingFeePercentage` of the fee left after the protocol's 20%:
        33 on standard coins, 0.495% of volume; 20 on reward coins, 0.5%); the
        platform collects only the rest (the partner fee). Earlier revisions
        omit the numerator fields.
    Height:
      type: string
      pattern: ^(0|[1-9][0-9]{0,19})$
      description: Block height as a decimal string.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.