{
  "openapi": "3.0.3",
  "info": {
    "title": "Deside Agent Launchpad",
    "version": "1.0.0",
    "description": "Permissionless token launches for AI agents on Meteora Dynamic Bonding Curve. Write operations return unsigned transactions. Deside does not custody funds or keys. This service only builds Meteora Dynamic Bonding Curve transactions that you sign with your own wallet. Tokens are created by their signer, not by Deside. Deside is the fee partner of the launch configuration and receives the partner share of trading fees stated below. Nothing here is investment advice; launching or trading a token can lose all the money involved."
  },
  "servers": [
    {
      "url": "https://launchpad.deside.io"
    }
  ],
  "paths": {
    "/v1/info": {
      "get": {
        "operationId": "get_launchpad_info",
        "summary": "Launchpad terms, fees and costs",
        "description": "Read first. Fees, anti-sniper, graduation, locked liquidity, what a launch costs, the 4-step flow, and the on-chain config per network. No wallet needed.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": false,
            "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL).",
            "schema": {
              "type": "string",
              "enum": [
                "devnet",
                "mainnet"
              ],
              "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
            }
          }
        ]
      }
    },
    "/v1/launch": {
      "post": {
        "operationId": "launch_token",
        "summary": "Prepare a token launch",
        "description": "Prepares ONE unsigned transaction that creates your token and its Meteora bonding curve, optionally registers an EIP-8004 agent identity owned by your wallet, and pays the permanent Arweave storage of the logo and metadata. You (the wallet) are creator and payer, about 0.026 SOL in total. Nothing is sent: sign the returned `transaction` with your wallet and call submit_transaction within about 60 seconds.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "wallet": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Solana address that will sign and pay the launch and become the token creator (and the agent identity owner). Costs about 0.021 SOL, or 0.026 with an agent identity; keep about 0.03 SOL."
                  },
                  "token": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 32,
                        "description": "Token name, max 32 characters."
                      },
                      "symbol": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 10,
                        "description": "Ticker, max 10 characters."
                      },
                      "description": {
                        "description": "Short token description, max 500 characters.",
                        "type": "string",
                        "maxLength": 500
                      },
                      "image": {
                        "description": "https URL of a square PNG, JPG, WebP or GIF logo. Used as is: you keep it online. Prefer imageBase64 for a permanent copy.",
                        "type": "string",
                        "maxLength": 300,
                        "format": "uri"
                      },
                      "imageBase64": {
                        "description": "Logo file in base64 (PNG, JPG, WebP or GIF, max 1 MB). Stored permanently on Arweave, paid inside the same signature.",
                        "type": "string",
                        "maxLength": 1400000
                      },
                      "website": {
                        "description": "Project website.",
                        "type": "string",
                        "maxLength": 200,
                        "format": "uri"
                      },
                      "x": {
                        "description": "X (Twitter) profile URL.",
                        "type": "string",
                        "maxLength": 200,
                        "format": "uri"
                      },
                      "telegram": {
                        "description": "Telegram URL.",
                        "type": "string",
                        "maxLength": 200,
                        "format": "uri"
                      }
                    },
                    "required": [
                      "name",
                      "symbol"
                    ],
                    "additionalProperties": false,
                    "description": "The token. Provide image OR imageBase64."
                  },
                  "acceptTerms": {
                    "type": "boolean",
                    "enum": [
                      true
                    ],
                    "description": "Must be true. You accept the creator terms (GET /terms, also in get_launchpad_info): you answer for your token; it raises no capital and gives no rights; no promised returns, no misleading fees, no market manipulation."
                  },
                  "registerAgentIdentity": {
                    "description": "true also creates a Metaplex Agent Registry identity (EIP-8004 registration) owned by wallet, in the SAME signature. Adds about 0.005 SOL. Default false.",
                    "type": "boolean"
                  },
                  "agent": {
                    "description": "EIP-8004 registration fields, used only when registerAgentIdentity is true. Deside fills type and registrations, adds agentWallet (the signing wallet) and, on mainnet, a web service pointing to the Metaplex agent page if you give none. The file follows the EIP-8004 registration-v1 fields exactly.",
                    "type": "object",
                    "properties": {
                      "name": {
                        "description": "Agent name. Defaults to token.name.",
                        "type": "string",
                        "maxLength": 64
                      },
                      "description": {
                        "description": "What the agent does, how to interact with it, pricing, key capabilities. Defaults to token.description.",
                        "type": "string",
                        "maxLength": 1000
                      },
                      "image": {
                        "description": "Agent avatar URL. Defaults to the token logo.",
                        "type": "string",
                        "maxLength": 300,
                        "format": "uri"
                      },
                      "active": {
                        "description": "Whether the agent is live. Default true.",
                        "type": "boolean"
                      },
                      "x402Support": {
                        "description": "true if the agent sells anything over x402. Default false.",
                        "type": "boolean"
                      },
                      "supportedTrust": {
                        "description": "Only list trust models you actually implement. Default empty.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "reputation",
                            "crypto-economic",
                            "tee-attestation"
                          ]
                        }
                      },
                      "services": {
                        "description": "Every way to reach or verify the agent. The directory checks mcp, a2a, x402 and web live; the rest is declarative. agentWallet defaults to the signing wallet.",
                        "maxItems": 40,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 64,
                              "description": "Service name: web, MCP, A2A, OASF, x402, x402-resources, openapi, llms.txt, docs, ENS, DID, agentWallet, email, X, github, telegram, discord, farcaster, or any other name."
                            },
                            "endpoint": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "description": "URL or identifier of the service (https URL, name.eth, did:..., CAIP-10 address, email)."
                            },
                            "version": {
                              "description": "Protocol version, e.g. MCP \"2025-06-18\", A2A \"0.3.0\".",
                              "type": "string",
                              "maxLength": 32
                            },
                            "mcpTools": {
                              "description": "MCP only: tool names the server exposes.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "a2aSkills": {
                              "description": "A2A only: skill ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "skills": {
                              "description": "OASF only: skill ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "domains": {
                              "description": "OASF only: domain ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "resources": {
                              "description": "x402-resources only: paid endpoint URLs.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 512
                              }
                            }
                          },
                          "required": [
                            "name",
                            "endpoint"
                          ],
                          "additionalProperties": {}
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "network",
                  "wallet",
                  "token",
                  "acceptTerms"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/agent-identity": {
      "post": {
        "operationId": "register_agent_identity",
        "summary": "Prepare an agent identity for a launched token",
        "description": "For a token already launched here without an agent identity: prepares ONE unsigned transaction that creates its Metaplex Agent Registry identity (EIP-8004 registration) owned by the creator wallet, and pays the permanent Arweave storage of the registration. Only the token creator can do it, about 0.005 SOL. Name, description and logo default to the token's. Sign the returned `transaction` and call submit_transaction within about 60 seconds.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "wallet": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Creator wallet of the token: it signs, pays (about 0.005 SOL) and owns the agent identity."
                  },
                  "mint": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Mint of a token launched through this launchpad by wallet. Name, description and logo default to the token's."
                  },
                  "acceptTerms": {
                    "type": "boolean",
                    "enum": [
                      true
                    ],
                    "description": "Must be true. You accept the creator terms (GET /terms), which also cover the agent identity you attach."
                  },
                  "agent": {
                    "description": "EIP-8004 registration fields. Deside fills type and registrations, adds agentWallet (the signing wallet) and, on mainnet, a web service pointing to the Metaplex agent page if you give none.",
                    "type": "object",
                    "properties": {
                      "name": {
                        "description": "Agent name. Defaults to token.name.",
                        "type": "string",
                        "maxLength": 64
                      },
                      "description": {
                        "description": "What the agent does, how to interact with it, pricing, key capabilities. Defaults to token.description.",
                        "type": "string",
                        "maxLength": 1000
                      },
                      "image": {
                        "description": "Agent avatar URL. Defaults to the token logo.",
                        "type": "string",
                        "maxLength": 300,
                        "format": "uri"
                      },
                      "active": {
                        "description": "Whether the agent is live. Default true.",
                        "type": "boolean"
                      },
                      "x402Support": {
                        "description": "true if the agent sells anything over x402. Default false.",
                        "type": "boolean"
                      },
                      "supportedTrust": {
                        "description": "Only list trust models you actually implement. Default empty.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "reputation",
                            "crypto-economic",
                            "tee-attestation"
                          ]
                        }
                      },
                      "services": {
                        "description": "Every way to reach or verify the agent. The directory checks mcp, a2a, x402 and web live; the rest is declarative. agentWallet defaults to the signing wallet.",
                        "maxItems": 40,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 64,
                              "description": "Service name: web, MCP, A2A, OASF, x402, x402-resources, openapi, llms.txt, docs, ENS, DID, agentWallet, email, X, github, telegram, discord, farcaster, or any other name."
                            },
                            "endpoint": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "description": "URL or identifier of the service (https URL, name.eth, did:..., CAIP-10 address, email)."
                            },
                            "version": {
                              "description": "Protocol version, e.g. MCP \"2025-06-18\", A2A \"0.3.0\".",
                              "type": "string",
                              "maxLength": 32
                            },
                            "mcpTools": {
                              "description": "MCP only: tool names the server exposes.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "a2aSkills": {
                              "description": "A2A only: skill ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "skills": {
                              "description": "OASF only: skill ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "domains": {
                              "description": "OASF only: domain ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "resources": {
                              "description": "x402-resources only: paid endpoint URLs.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 512
                              }
                            }
                          },
                          "required": [
                            "name",
                            "endpoint"
                          ],
                          "additionalProperties": {}
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "network",
                  "wallet",
                  "mint",
                  "acceptTerms"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/agent-identity/update": {
      "post": {
        "operationId": "update_agent_identity",
        "summary": "Prepare an agent identity update",
        "description": "Changes the EIP-8004 registration of an agent identity you own (for example, add an x402 or MCP service, or set x402Support): stores the new registration on Arweave and points the Metaplex identity to it, in ONE unsigned transaction. Same agent, same address. Omitted fields keep their value; services replaces the whole list. Sign and call submit_transaction within about 60 seconds.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "wallet": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Owner and update authority of the agent asset: it signs and pays the storage of the new registration."
                  },
                  "asset": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Agent asset address (agentAsset returned by launch_token or register_agent_identity)."
                  },
                  "agent": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "description": "Agent name. Defaults to token.name.",
                        "type": "string",
                        "maxLength": 64
                      },
                      "description": {
                        "description": "What the agent does, how to interact with it, pricing, key capabilities. Defaults to token.description.",
                        "type": "string",
                        "maxLength": 1000
                      },
                      "image": {
                        "description": "Agent avatar URL. Defaults to the token logo.",
                        "type": "string",
                        "maxLength": 300,
                        "format": "uri"
                      },
                      "active": {
                        "description": "Whether the agent is live. Default true.",
                        "type": "boolean"
                      },
                      "x402Support": {
                        "description": "true if the agent sells anything over x402. Default false.",
                        "type": "boolean"
                      },
                      "supportedTrust": {
                        "description": "Only list trust models you actually implement. Default empty.",
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "reputation",
                            "crypto-economic",
                            "tee-attestation"
                          ]
                        }
                      },
                      "services": {
                        "description": "Every way to reach or verify the agent. The directory checks mcp, a2a, x402 and web live; the rest is declarative. agentWallet defaults to the signing wallet.",
                        "maxItems": 40,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 64,
                              "description": "Service name: web, MCP, A2A, OASF, x402, x402-resources, openapi, llms.txt, docs, ENS, DID, agentWallet, email, X, github, telegram, discord, farcaster, or any other name."
                            },
                            "endpoint": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "description": "URL or identifier of the service (https URL, name.eth, did:..., CAIP-10 address, email)."
                            },
                            "version": {
                              "description": "Protocol version, e.g. MCP \"2025-06-18\", A2A \"0.3.0\".",
                              "type": "string",
                              "maxLength": 32
                            },
                            "mcpTools": {
                              "description": "MCP only: tool names the server exposes.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "a2aSkills": {
                              "description": "A2A only: skill ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "skills": {
                              "description": "OASF only: skill ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "domains": {
                              "description": "OASF only: domain ids.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 128
                              }
                            },
                            "resources": {
                              "description": "x402-resources only: paid endpoint URLs.",
                              "maxItems": 100,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 512
                              }
                            }
                          },
                          "required": [
                            "name",
                            "endpoint"
                          ],
                          "additionalProperties": {}
                        }
                      }
                    },
                    "additionalProperties": false,
                    "description": "Fields to change. Omitted fields keep their current value; services, if sent, replaces the whole list (include every service you want to keep)."
                  }
                },
                "required": [
                  "network",
                  "wallet",
                  "asset",
                  "agent"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/submit": {
      "post": {
        "operationId": "submit_transaction",
        "summary": "Send a signed transaction",
        "description": "Sends a transaction prepared by this launchpad and signed by your wallet. For launches it first simulates it, stores the paid Arweave files, and only then sends it, so explorers and wallets find the logo when the token appears. Waits for confirmation. Returns the signature, links and, for launches, the mint and file URLs. You may also send a launch yourself and pass { network, signature }, but then the files are stored after the token exists and some explorers may never show its logo.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "transaction": {
                    "description": "The transaction returned by a prepare tool, signed by your wallet, base64. Deside sends it, waits for confirmation and, for launches, uploads the paid Arweave files.",
                    "type": "string",
                    "maxLength": 4000
                  },
                  "signature": {
                    "description": "Alternative: signature of a launch you already sent yourself. Deside checks the payment on chain and uploads the files.",
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "required": [
                  "network"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/tokens/{mint}": {
      "get": {
        "operationId": "get_token",
        "summary": "Token status",
        "description": "Name, creator, curve progress toward graduation, graduated pool, and unclaimed creator fees of any Meteora DBC token.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL).",
            "schema": {
              "type": "string",
              "enum": [
                "devnet",
                "mainnet"
              ],
              "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
            }
          },
          {
            "name": "mint",
            "in": "path",
            "required": true,
            "description": "Token mint address.",
            "schema": {
              "type": "string",
              "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
              "description": "Token mint address."
            }
          }
        ]
      }
    },
    "/v1/creators/{wallet}/launches": {
      "get": {
        "operationId": "list_launches",
        "summary": "Launches by creator",
        "description": "Tokens a wallet launched through this launchpad, with progress and unclaimed creator fees. Read from the chain; Deside keeps no list.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL).",
            "schema": {
              "type": "string",
              "enum": [
                "devnet",
                "mainnet"
              ],
              "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
            }
          },
          {
            "name": "wallet",
            "in": "path",
            "required": true,
            "description": "Creator wallet.",
            "schema": {
              "type": "string",
              "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
              "description": "Creator wallet."
            }
          }
        ]
      }
    },
    "/v1/swap": {
      "post": {
        "operationId": "swap",
        "summary": "Prepare a buy or sell",
        "description": "Prepares an unsigned buy or sell of a launchpad token: on the bonding curve before graduation, on the Meteora DAMM v2 pool after. Includes a quote with minimum output under your slippage. Sign and call submit_transaction.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "wallet": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Wallet that signs and pays the trade."
                  },
                  "mint": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Token mint address."
                  },
                  "side": {
                    "type": "string",
                    "enum": [
                      "buy",
                      "sell"
                    ],
                    "description": "buy spends SOL, sell spends tokens."
                  },
                  "amount": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMinimum": true,
                    "description": "buy: SOL to spend. sell: tokens to sell (human units, 6 decimals)."
                  },
                  "slippageBps": {
                    "description": "Max slippage in basis points. Default 300 (3%). The first 120 s after launch carry an anti-sniper fee of up to 25%.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 5000
                  }
                },
                "required": [
                  "network",
                  "wallet",
                  "mint",
                  "side",
                  "amount"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/claim": {
      "post": {
        "operationId": "claim_fees",
        "summary": "Prepare a creator fee claim",
        "description": "Prepares ONE unsigned transaction that collects everything the creator can claim: curve trading fees, surplus after graduation, and fees of the creator locked liquidity position. Only the creator wallet can claim. Sign and call submit_transaction.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "wallet": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Wallet that signs and pays."
                  },
                  "mint": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Token mint address."
                  }
                },
                "required": [
                  "network",
                  "wallet",
                  "mint"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/migrate": {
      "post": {
        "operationId": "migrate",
        "summary": "Prepare graduation to the pool",
        "description": "Prepares the permissionless migration of a curve that reached its threshold into a Meteora DAMM v2 pool. On mainnet the Meteora keeper normally does this within seconds; use only if it has not. Anyone can pay it (about 0.017 SOL).",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Invalid input"
          },
          "402": {
            "description": "Launch does not pay its Arweave upload"
          },
          "403": {
            "description": "Only the creator wallet can do this"
          },
          "404": {
            "description": "Not found"
          },
          "409": {
            "description": "Not possible in the current state"
          },
          "413": {
            "description": "Body larger than 2 MB"
          },
          "422": {
            "description": "Transaction rejected or failed"
          },
          "429": {
            "description": "Rate limit: 60 requests/min and 2 launches/min per wallet (or IP); 600 requests/min and 30 launches/min for the whole service"
          },
          "503": {
            "description": "Uploads or network temporarily unavailable"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "network": {
                    "type": "string",
                    "enum": [
                      "devnet",
                      "mainnet"
                    ],
                    "description": "\"mainnet\" for real tokens; \"devnet\" to rehearse the full flow with free devnet SOL (test config graduates at about 0.64 SOL)."
                  },
                  "wallet": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Wallet that signs and pays."
                  },
                  "mint": {
                    "type": "string",
                    "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
                    "description": "Token mint address."
                  }
                },
                "required": [
                  "network",
                  "wallet",
                  "mint"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    }
  }
}