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

# Get the launchpad signature for a self-built pool transaction

> Only for pool transactions built without `buildTransactions` (server-built ones arrive tagged). RUNNERS signs only a pool transaction that matches the prepared draft byte for byte, before the creator signs.



## OpenAPI

````yaml /openapi.json post /api/launch/tag
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/tag:
    post:
      tags:
        - Launch
      summary: Get the launchpad signature for a self-built pool transaction
      description: >-
        Only for pool transactions built without `buildTransactions`
        (server-built ones arrive tagged). RUNNERS signs only a pool transaction
        that matches the prepared draft byte for byte, before the creator signs.
      operationId: tagLaunchTransaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LaunchTagRequest'
      responses:
        '200':
          description: The launchpad's signature.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchTag'
        '403':
          description: '`origin_forbidden`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '404':
          description: >-
            `draft_not_found` (no prepared, unsubmitted draft) or `not_found`
            (tagging unavailable).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '422':
          description: >-
            `transaction_invalid` or `transaction_mismatch` (the wire differs
            from the prepared draft or lacks the launchpad signer).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          description: '`metadata_required` or `unavailable`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LaunchError'
components:
  schemas:
    LaunchTagRequest:
      type: object
      required:
        - deploymentId
        - baseMint
        - owner
        - transactionBase64
      description: >-
        A self-built pool transaction for a prepared draft, with the launchpad
        signer added as a read-only signer after the creator and mint. The mint
        may have signed; the creator signs after the tag.
      properties:
        deploymentId:
          type: string
        baseMint:
          $ref: '#/components/schemas/Address'
        owner:
          $ref: '#/components/schemas/Address'
        transactionBase64:
          type: string
          contentEncoding: base64
    LaunchTag:
      type: object
      required:
        - signer
        - signatureBase64
      properties:
        signer:
          $ref: '#/components/schemas/Address'
          description: The RUNNERS launchpad signer.
        signatureBase64:
          type: string
          description: >-
            The launchpad's ed25519 signature for the submitted message; add it
            to the transaction.
    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
    Error:
      type: object
      required:
        - error
      properties:
        code:
          type: string
          description: >-
            Stable machine-readable code. Always present on /api/v1 routes and
            429 responses.
          enum:
            - request_invalid
            - request_too_large
            - origin_forbidden
            - not_found
            - method_not_allowed
            - rate_limited
            - unavailable
        error:
          type: string
          description: Plain-language explanation.
  responses:
    RateLimited:
      description: Too many requests in this route class. Wait `Retry-After` seconds.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: rate_limited
            error: Too many requests. Please wait a moment and try again.
  headers:
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
    RateLimit-Limit:
      description: Requests the client may make at once in this route class (bucket size).
      schema:
        type: integer
    RateLimit-Remaining:
      description: Requests available now.
      schema:
        type: integer
    RateLimit-Reset:
      description: Seconds until the bucket is full again.
      schema:
        type: integer
    RateLimit-Policy:
      description: >-
        `<requests>;w=<seconds>;burst=<burst>`: the sustained rate and the
        bucket size.
      schema:
        type: string
      example: 600;w=60;burst=120

````

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