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

# Build the purps.lol launch

> Step 2. The same terms as prepare, plus the coin's image and socials, `ts` and `signature`. We upload the metadata, build the launch transaction (and a SOL-to-pair swap in front of it when the pair is not SOL and there is a dev buy), simulate it, and record the launch as pending. You get back unsigned transactions and the throwaway mint key. Sign each transaction with the creator wallet, and the one at `createIndex` with the mint key as well, then send them in order through /transactions/send. The launch goes live on its own once the pool exists on chain; poll /launches/{mint}.



## OpenAPI

````yaml https://purps.lol/api/v1/openapi.json post /launches/submit
openapi: 3.1.0
info:
  title: PURPS API
  version: 1.0.0
  description: >-
    Everything purps.lol can do, as JSON. Read the coin list, a coin's full page
    and the launchpad; launch coins on purps.lol, pump.fun and Robinhood Chain;
    wire an existing pump.fun coin's fees into a strategy. No key, no signup. A
    write is authorised by your own wallet's signature and every transaction is
    signed in your wallet, never by us. Every response is `{ ok: true, data }`
    or `{ ok: false, error }`. Cross-origin requests are allowed from any site.
servers:
  - url: https://purps.lol/api/v1
security: []
tags:
  - name: Coins
    description: Read what the site shows.
  - name: Launch on purps.lol
    description: Launch a coin on purps.lol. Prepare, sign, submit, send, poll.
  - name: Launch on pump.fun
    description: Launch straight on pump.fun with fees wired to a strategy.
  - name: Launch on Robinhood Chain
    description: Launch through Pons on Robinhood Chain.
  - name: Redirect a pump.fun coin
    description: Point an existing pump.fun coin's creator fees at a strategy.
  - name: Manage a coin
    description: Attach a strategy to a coin launched without one. Creator-signed.
  - name: Transactions
    description: Send a signed Solana transaction through our relay and watch it land.
paths:
  /launches/submit:
    post:
      tags:
        - Launch on purps.lol
      summary: Build the purps.lol launch
      description: >-
        Step 2. The same terms as prepare, plus the coin's image and socials,
        `ts` and `signature`. We upload the metadata, build the launch
        transaction (and a SOL-to-pair swap in front of it when the pair is not
        SOL and there is a dev buy), simulate it, and record the launch as
        pending. You get back unsigned transactions and the throwaway mint key.
        Sign each transaction with the creator wallet, and the one at
        `createIndex` with the mint key as well, then send them in order through
        /transactions/send. The launch goes live on its own once the pool exists
        on chain; poll /launches/{mint}.
      operationId: submitLaunch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LaunchSubmit'
      responses:
        '200':
          description: The transactions to sign.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    enum:
                      - true
                  data:
                    $ref: '#/components/schemas/SolanaBuild'
        '400':
          description: Every failure carries the same envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Every failure carries the same envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Every failure carries the same envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Every failure carries the same envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Every failure carries the same envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    LaunchSubmit:
      type: object
      description: 'Everything in LaunchTerms, plus:'
      properties:
        image:
          type: string
          description: >-
            The coin's logo as a data URL (`data:image/png;base64,…`). PNG,
            JPEG, WebP or GIF, 512KB max. Send this or `imageUrl`.
        imageUrl:
          type: string
          description: >-
            A public https link to the logo instead of `image`. Fetched by us
            under the same size and type rules.
        description:
          type: string
          description: Up to 500 characters.
        website:
          type: string
          description: https:// link. Defaults to the coin's purps.lol page.
        twitter:
          type: string
          description: https:// link.
        telegram:
          type: string
          description: https:// link.
        ts:
          type: integer
          description: The `ts` the prepare step returned.
          required: true
        signature:
          type: string
          description: >-
            Your wallet's signature over the prepared message. Base58 on Solana,
            0x-hex on Robinhood Chain.
          required: true
    SolanaBuild:
      type: object
      properties:
        mint:
          type: string
          description: The new coin's mint address.
        poolId:
          type: string
          description: The curve pool (purps.lol launches only).
          nullable: true
        transactions:
          type: array
          description: Base64 transactions to sign and send in order.
          items:
            type: string
        createIndex:
          type: integer
          description: >-
            Which of `transactions` is the create. Sign that one with the mint
            key as well.
        mintSecret:
          type: string
          description: >-
            The mint keypair's secret, base58. Powerless after the launch; use
            it once to countersign the create.
          nullable: true
        imageUrl:
          type: string
          description: Where the logo was stored.
          nullable: true
        url:
          type: string
          description: The coin's future page.
    Error:
      type: object
      properties:
        ok:
          type: boolean
          description: Always false on a failure.
        error:
          type: string
          description: >-
            A short reason in plain words: `coin not found`, `too many
            requests`, `invalid wallet signature`.

````