{"openapi":"3.1.0","info":{"title":"relayfor.si management API","version":"1.0.0","description":"Launch pump.fun tokens whose creator fees pay for their AI, bring existing tokens and read them with their routes, and manage their fee presets, AI credit, router keys, usage, webhooks and statements. Authenticate with a project's secret key as Authorization: Bearer rf_sk_... (or x-api-key). Every refusal has one shape, the Error schema; a path the API doesn't have answers 404 not_found, and a method a path doesn't take 405 method_not_allowed with an Allow header."},"servers":[{"url":"https://relayfor.si"}],"security":[{"secretKey":[]},{"apiKey":[]}],"paths":{"/api/project/v1/tokens/import":{"post":{"operationId":"importToken","summary":"Bring an existing pump.fun token onto a route","description":"Reads who may set the token's route from the chain and builds pump.fun's fee-sharing transaction with relayfor's 1 SOL fee, checked by simulation, for that wallet to sign. Then as a wallet launch: send it yourself or post it to /launches/{id}/submit, and poll GET /launches/{id}. Refused when the route is locked already or the token has no creator fee to route.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportTokenRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Launch"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, import_refused, insufficient_funds, launch_refused.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","import_refused","insufficient_funds","launch_refused"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, launches_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","launches_closed"]}}}}}]}}}}}}},"/api/project/v1/tokens":{"get":{"operationId":"listTokens","summary":"The project's tokens, newest first","parameters":[{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/tokens/{mint}":{"get":{"operationId":"getToken","summary":"A token, with its curve read from the chain now","parameters":[{"name":"mint","in":"path","required":true,"description":"The token's mint address.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetail"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/accounts":{"get":{"operationId":"listAccounts","summary":"The project's credit accounts, newest first","description":"Each token has its own account: its AI share from every payout lands there, and its router keys spend it.","parameters":[{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/accounts/{id}":{"get":{"operationId":"getAccount","summary":"A credit account and its balance","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id (acc_...) or its token's mint.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/accounts/{id}/ledger":{"get":{"operationId":"listLedger","summary":"Every change to an account's balance, newest first","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id (acc_...) or its token's mint.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/accounts/{id}/purchases":{"post":{"operationId":"createPurchase","summary":"Buy credit for an account in USDC","description":"Answers with a transaction for the payer's wallet: a USDC transfer to relayfor's AI treasury carrying a one-time reference key, checked by simulation. Once the transfer is final the account is credited $1 a USDC for what arrived; poll the purchase, or watch its signature. The same payment as a Solana Pay link, for wallets and QR codes.","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id (acc_...) or its token's mint.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePurchaseRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Purchase"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, insufficient_funds.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","insufficient_funds"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, purchases_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","purchases_closed"]}}}}}]}}}}}},"get":{"operationId":"listPurchases","summary":"An account's purchases, newest first","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id (acc_...) or its token's mint.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/accounts/{id}/purchases/{purchase}":{"get":{"operationId":"getPurchase","summary":"A purchase and whether it was credited","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id (acc_...) or its token's mint.","schema":{"type":"string"}},{"name":"purchase","in":"path","required":true,"description":"The purchase's id: pur_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Purchase"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/keys":{"get":{"operationId":"listRouterKeys","summary":"The project's router keys that are not revoked, newest first","parameters":[{"name":"account","in":"query","required":false,"description":"Only this account's keys: acc_... or its token's mint.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}},{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterKeyList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"post":{"operationId":"createRouterKey","summary":"Make a router key on an account","description":"The answer carries the key itself (rf_ai_...), and gives it again to a retry with the same Idempotency-Key. Give it to an agent's OpenAI or Anthropic SDK with base URL https://relayfor.si/api/v1. Up to 100 keys per account.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRouterKeyRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewRouterKey"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, too_many_keys.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","too_many_keys"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/keys/{id}":{"get":{"operationId":"getRouterKey","summary":"A router key and its limit this period","parameters":[{"name":"id","in":"path","required":true,"description":"The key's id: key_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterKey"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"patch":{"operationId":"updateRouterKey","summary":"Rename a router key, or set or remove its limit","description":"A limit set mid-period counts what the key's calls already spent and hold in it.","parameters":[{"name":"id","in":"path","required":true,"description":"The key's id: key_...","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRouterKeyRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterKey"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"delete":{"operationId":"revokeRouterKey","summary":"Revoke a router key: its next call is refused","parameters":[{"name":"id","in":"path","required":true,"description":"The key's id: key_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterKey"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/usage":{"get":{"operationId":"getUsage","summary":"The project's router usage by day, account, key and model","parameters":[{"name":"from","in":"query","required":false,"description":"The first day, YYYY-MM-DD (UTC); default 6 days before `to`.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}},{"name":"to","in":"query","required":false,"description":"The last day, YYYY-MM-DD (UTC); default today. At most 31 days in all.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}},{"name":"account","in":"query","required":false,"description":"Only this account's calls: acc_... or its token's mint.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}},{"name":"key","in":"query","required":false,"description":"Only this key's calls: key_...","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/webhooks":{"get":{"operationId":"listWebhooks","summary":"The project's webhook endpoints, newest first","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookList"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"post":{"operationId":"createWebhook","summary":"Add a webhook endpoint","description":"The answer carries the endpoint's signing secret, and gives it again to a retry with the same Idempotency-Key. Events: launch.confirmed, launch.failed, token.imported, token.graduated, payout.credited, account.low_balance (spendable credit under $5, once until topped up), key.limit_reached (once a period) and route.changed. Up to 5 endpoints per project.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewWebhook"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, too_many_webhooks.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","too_many_webhooks"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, webhooks_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","webhooks_closed"]}}}}}]}}}}}}},"/api/project/v1/webhooks/{id}":{"get":{"operationId":"getWebhook","summary":"A webhook endpoint","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint's id: whk_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"delete":{"operationId":"deleteWebhook","summary":"Delete a webhook endpoint: nothing more is sent to it","description":"Deleting an endpoint already deleted answers it again, so a retry after a lost answer is safe.","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint's id: whk_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/webhooks/{id}/rotate":{"post":{"operationId":"rotateWebhookSecret","summary":"Replace an endpoint's signing secret","description":"The answer carries the new secret, and gives it again to a retry with the same Idempotency-Key. For 24 hours deliveries carry a signature under each secret, so the receiver can switch without missing one.","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint's id: whk_...","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewWebhook"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, webhooks_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","webhooks_closed"]}}}}}]}}}}}}},"/api/project/v1/webhooks/{id}/test":{"post":{"operationId":"testWebhook","summary":"Send a test event (ping) to an endpoint now","description":"Answers once the attempt is made, with how it went.","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint's id: whk_...","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Delivery"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, webhooks_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","webhooks_closed"]}}}}}]}}}}}}},"/api/project/v1/webhooks/deliveries":{"get":{"operationId":"listDeliveries","summary":"The project's webhook deliveries, newest first","parameters":[{"name":"webhook","in":"query","required":false,"description":"Only this endpoint's deliveries: whk_...","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}},{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/webhooks/deliveries/{id}/replay":{"post":{"operationId":"replayDelivery","summary":"Send a delivery again","description":"Due now, with 24 hours of retries from now. The event keeps its id, so a receiver that handled it already can tell.","parameters":[{"name":"id","in":"path","required":true,"description":"The delivery's id: dlv_...","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Delivery"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, webhooks_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","webhooks_closed"]}}}}}]}}}}}}},"/api/project/v1/statements/{month}":{"get":{"operationId":"getStatement","summary":"The project's statement for a month","parameters":[{"name":"month","in":"path","required":true,"description":"YYYY-MM, in UTC; the current month reads to date.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Statement"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/presets":{"get":{"operationId":"listPresets","summary":"The project's fee presets, its default first","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetList"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"post":{"operationId":"createPreset","summary":"Add a fee preset","description":"The shares, in basis points of the project's part, add up to 10,000; the AI keeps at least its floor (2,500 or more); every other share is 0 or at least 125. A wallet a payout could never reach (a program, a sysvar, relayfor's own) is refused. Up to 20 presets per project.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePresetRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress, preset_name_taken.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress","preset_name_taken"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, too_many_presets.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","too_many_presets"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/presets/templates":{"get":{"operationId":"listPresetTemplates","summary":"relayfor's starting splits for a new preset","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetTemplateList"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/presets/{id}":{"get":{"operationId":"getPreset","summary":"A fee preset, and what its creators may choose","parameters":[{"name":"id","in":"path","required":true,"description":"The preset's id: fps_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"patch":{"operationId":"updatePreset","summary":"Change a fee preset, or make it the default","description":"The changed preset is checked whole, by the same rules as a new one. Tokens already launched with it keep their routes: a route is locked on chain when its token is made.","parameters":[{"name":"id","in":"path","required":true,"description":"The preset's id: fps_...","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePresetRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: preset_name_taken.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["preset_name_taken"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}},"delete":{"operationId":"archivePreset","summary":"Archive a fee preset: no new launch can use it","description":"The default can't be archived: make another preset the default first. Tokens launched with it still name it. Archiving one already archived answers it again, so a retry is safe.","parameters":[{"name":"id","in":"path","required":true,"description":"The preset's id: fps_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: preset_is_default.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["preset_is_default"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/project":{"get":{"operationId":"getProject","summary":"The project this key belongs to","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/launches/prepare":{"post":{"operationId":"prepareWalletLaunch","summary":"Prepare a launch for the user's wallet to sign","description":"Builds the token's launch transaction (its route locked in the same transaction), checks it by simulation and signs it with the new mint. The user's wallet signs it last; send it yourself, or post it to /launches/{id}/submit.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletLaunchRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Launch"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, launch_refused, insufficient_funds.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","launch_refused","insufficient_funds"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, launches_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","launches_closed"]}}}}}]}}}}}}},"/api/project/v1/launches/{id}/submit":{"post":{"operationId":"submitLaunch","summary":"Send a launch the user's wallet signed","parameters":[{"name":"id","in":"path","required":true,"description":"The launch's id: lch_...","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Any unique string (a UUID): a retry with the same key and request gets the first answer back.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitLaunchRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Launch"}}}},"400":{"description":"Error codes: invalid_request, missing_idempotency_key.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"409":{"description":"Error codes: idempotency_in_progress.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_in_progress"]}}}}}]}}}},"413":{"description":"Error codes: payload_too_large.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]}}}}}]}}}},"415":{"description":"Error codes: unsupported_media_type.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]}}}}}]}}}},"422":{"description":"Error codes: idempotency_mismatch, launch_refused, insufficient_funds.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_mismatch","launch_refused","insufficient_funds"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable, launches_closed.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable","launches_closed"]}}}}}]}}}}}}},"/api/project/v1/launches/{id}":{"get":{"operationId":"getLaunch","summary":"A launch and its state","parameters":[{"name":"id","in":"path","required":true,"description":"The launch's id: lch_...","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Launch"}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"404":{"description":"Error codes: not_found.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}},"/api/project/v1/launches":{"get":{"operationId":"listLaunches","summary":"The project's launches, newest first","parameters":[{"name":"limit","in":"query","required":false,"description":"1 to 100; default 20.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"cursor","in":"query","required":false,"description":"next_cursor from the page before.","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchList"}}}},"400":{"description":"Error codes: invalid_request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]}}}}}]}}}},"401":{"description":"Error codes: unauthorized.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]}}}}}]}}}},"429":{"description":"Error codes: rate_limited.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]}}}}}]}}}},"500":{"description":"Error codes: internal.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal"]}}}}}]}}}},"503":{"description":"Error codes: unavailable.","headers":{"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unavailable"]}}}}}]}}}}}}}},"webhooks":{"launch.confirmed":{"post":{"summary":"A launch the chain confirmed: its token is on its route.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchConfirmedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"launch.failed":{"post":{"summary":"A launch the chain refused, or whose route came out other than prepared.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchFailedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"token.imported":{"post":{"summary":"An import the chain confirmed: the existing token is on its route.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenImportedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"token.graduated":{"post":{"summary":"A token's curve completed: it trades on PumpSwap, its fees still on its route.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenGraduatedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"payout.credited":{"post":{"summary":"A payout of a token's creator fees became AI credit.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutCreditedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"account.low_balance":{"post":{"summary":"An account's spendable credit fell under the threshold: once, until a credit lifts it back.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountLowBalanceEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"key.limit_reached":{"post":{"summary":"A router key's call was refused for its spending limit: once in each of the limit's periods.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyLimitReachedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"route.changed":{"post":{"summary":"A token's creator fees no longer follow the route relayfor locked (a takeover on pump.fun): its payouts stop.","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteChangedEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}},"ping":{"post":{"summary":"A test event, sent only to the endpoint tested (POST /webhooks/{id}/test).","parameters":[{"name":"relayfor-signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<HMAC-SHA256 hex of \"<t>.<raw body>\" under the endpoint's secret>; a second v1 for 24 hours after a rotation. Refuse a t more than 5 minutes off.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingEvent"}}}},"responses":{"2XX":{"description":"Received. Any other answer, or none within 10 seconds, is retried for 24 hours."}}}}},"components":{"securitySchemes":{"secretKey":{"type":"http","scheme":"bearer","description":"rf_sk_..."},"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"rf_sk_..., for clients that can't send a Bearer token."}},"schemas":{"WalletLaunchRequest":{"type":"object","properties":{"creator":{"type":"string","description":"The user's wallet: the token's creator, which pays and signs the transaction last."},"name":{"type":"string","minLength":1,"description":"The token's name, up to 32 bytes."},"symbol":{"type":"string","minLength":1,"description":"Its ticker, up to 13 bytes, such as NOVA."},"description":{"description":"A few words about it, shown on pump.fun; up to 1,000 characters.","type":"string","maxLength":1000},"image":{"type":"string","maxLength":3000000,"description":"A base64 data URI: data:image/png;base64,... PNG, JPEG, GIF or WebP, up to 2 MB."},"website":{"description":"Its site, an https:// link shown on pump.fun.","type":"string","maxLength":200,"format":"uri"},"twitter":{"description":"Its X account, an https:// link shown on pump.fun.","type":"string","maxLength":200,"format":"uri"},"telegram":{"description":"Its Telegram, an https:// link shown on pump.fun.","type":"string","maxLength":200,"format":"uri"},"preset":{"description":"The fee preset (fps_...) that splits the project's part of the token's creator fee; the project's default when absent.","type":"string"},"split":{"description":"The creator's choice of the AI and creator parts, in basis points of the project's part: either alone, or both adding up to the preset's creator_choice.budget; the AI at least the preset's floor. The preset's own split when absent.","type":"object","properties":{"ai_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"creator_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."}},"additionalProperties":false},"creator_fees_to":{"description":"Where the creator's part goes; the creator's own wallet when absent. When it is one of the preset's wallets, that wallet holds both shares. Ignored when the creator's share is 0.","type":"string"},"opening_buy_lamports":{"description":"For a token quoted in SOL: SOL to buy the token with in the launch itself, fees included.","anyOf":[{"type":"string","pattern":"^\\d{1,20}$"},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"quote_mint":{"description":"What the token trades against and pays its creator fees in: a token pump.fun takes as a quote (USDC, or one on its quote-control list). SOL when absent. The token's AI share then arrives in that token.","type":"string"},"opening_buy_amount":{"description":"For a token quoted in another token: its base units to buy the token with in the launch itself, fees included (5000000 is 5 USDC), from the creator's own account for it. Base units as on chain: a Token-2022 quote with a scaled UI amount (an xStock) or interest reads differently in wallets, and Token-2022's UiAmountToAmount turns a wallet's amount into them.","anyOf":[{"type":"string","pattern":"^\\d{1,20}$"},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"tokens_to":{"description":"Who gets the opening buy's tokens; the creator when absent.","type":"string"},"transaction_version":{"description":"1 (the default) for wallets that sign v1 transactions; 0 for one that doesn't yet: a v0 transaction of at most 1232 bytes, its shared accounts loaded from relayfor's lookup table. A v0 launch carries no opening buy and fits the creator and about 2 funded project wallets in its route.","anyOf":[{"type":"number","const":0},{"type":"number","const":1}]}},"required":["creator","name","symbol","image"],"additionalProperties":false},"SubmitLaunchRequest":{"type":"object","properties":{"transaction":{"type":"string","minLength":1,"maxLength":10000,"description":"The prepared transaction with the wallet's signature added, base64."}},"required":["transaction"],"additionalProperties":false},"ImportTokenRequest":{"type":"object","properties":{"mint":{"type":"string","description":"The existing pump.fun token."},"creator":{"type":"string","description":"The wallet that signs: the token's creator on pump.fun (its open route's admin, if it has one)."},"preset":{"description":"The fee preset (fps_...) that splits the project's part of the token's creator fee; the project's default when absent.","type":"string"},"split":{"description":"The creator's choice of the AI and creator parts, in basis points of the project's part: either alone, or both adding up to the preset's creator_choice.budget; the AI at least the preset's floor. The preset's own split when absent.","type":"object","properties":{"ai_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"creator_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."}},"additionalProperties":false},"creator_fees_to":{"description":"Where the creator's part goes; the creator's own wallet when absent. When it is one of the preset's wallets, that wallet holds both shares. Ignored when the creator's share is 0.","type":"string"},"transaction_version":{"description":"1 (the default) for wallets that sign v1 transactions; 0 for one that doesn't yet: a v0 transaction of at most 1232 bytes, its shared accounts loaded from relayfor's lookup table. A v0 launch carries no opening buy and fits the creator and about 2 funded project wallets in its route.","anyOf":[{"type":"number","const":0},{"type":"number","const":1}]}},"required":["mint","creator"],"additionalProperties":false},"CreateRouterKeyRequest":{"type":"object","properties":{"account":{"type":"string","description":"The account it spends: acc_..., or its token's mint."},"name":{"description":"1 to 48 characters, for people.","type":"string"},"limit":{"description":"A spending limit; none when left out (the account's balance still holds).","anyOf":[{"type":"object","properties":{"usd":{"description":"Dollars per period, like \"5\" or \"12.50\".","type":["string","number"]},"reset":{"type":"string","enum":["daily","weekly","monthly"],"description":"When it starts over, at 00:00 UTC."}},"required":["usd","reset"]},{"type":"null"}]}},"required":["account","name"]},"UpdateRouterKeyRequest":{"type":"object","properties":{"name":{"description":"1 to 48 characters, for people.","type":"string"},"limit":{"description":"A new limit, or null to remove it.","anyOf":[{"type":"object","properties":{"usd":{"description":"Dollars per period, like \"5\" or \"12.50\".","type":["string","number"]},"reset":{"type":"string","enum":["daily","weekly","monthly"],"description":"When it starts over, at 00:00 UTC."}},"required":["usd","reset"]},{"type":"null"}]}}},"CreatePurchaseRequest":{"type":"object","properties":{"amount_usd":{"description":"Dollars of credit, $20 to $1,000,000, like \"20\" or \"49.50\": as many USDC.","type":["string","number"]},"payer":{"type":"string","description":"The wallet that pays: it signs the transaction."}},"required":["amount_usd","payer"]},"CreateWebhookRequest":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"description":"A public https:// URL, without credentials in it."},"events":{"description":"The event types it receives; left out or empty for all of them.","maxItems":8,"type":"array","items":{"type":"string","enum":["launch.confirmed","launch.failed","token.imported","token.graduated","payout.credited","account.low_balance","key.limit_reached","route.changed"]}}},"required":["url"]},"CreatePresetRequest":{"type":"object","properties":{"name":{"description":"2 to 48 characters, unique in the project whatever their case.","type":"string"},"ai_share":{"type":"integer","minimum":0,"maximum":10000,"description":"The AI's share when the creator doesn't choose."},"creator_share":{"type":"integer","minimum":0,"maximum":10000,"description":"The creator's share when the creator doesn't choose: 0, or at least 125."},"ai_floor_share":{"description":"The least AI share its creators may choose; default 2,500.","type":"integer","minimum":0,"maximum":10000},"wallets":{"maxItems":7,"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"A Solana address of the project's own."},"share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."}},"required":["address","share"],"additionalProperties":false},"description":"Up to 7 of the project's own wallets; their shares together are the project's share. Each at least 125 (1% of the token's fees)."},"default":{"description":"Make it the project's default; the old default stops being one. Every project is made with one, relayfor's Standard.","type":"boolean"}},"required":["name","ai_share","creator_share"],"additionalProperties":false},"UpdatePresetRequest":{"type":"object","properties":{"name":{"description":"2 to 48 characters, unique in the project whatever their case.","type":"string"},"ai_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"creator_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"ai_floor_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"wallets":{"maxItems":7,"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"A Solana address of the project's own."},"share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."}},"required":["address","share"],"additionalProperties":false},"description":"Up to 7 of the project's own wallets; their shares together are the project's share. Each at least 125 (1% of the token's fees)."},"default":{"description":"Make it the project's default; the old default stops being one.","type":"boolean","const":true}},"additionalProperties":false},"Project":{"type":"object","properties":{"id":{"type":"string","description":"The project's public id: prj_ and 16 characters."},"name":{"type":"string","description":"The project's name, as on the dashboard."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."}},"required":["id","name","created_at"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","missing_idempotency_key","unauthorized","not_found","method_not_allowed","idempotency_in_progress","payload_too_large","unsupported_media_type","idempotency_mismatch","too_many_keys","too_many_webhooks","too_many_presets","preset_name_taken","preset_is_default","launch_refused","import_refused","insufficient_funds","rate_limited","internal","launches_closed","purchases_closed","webhooks_closed","unavailable"],"description":"Stable: branch on it. Each response lists the codes it may carry; a new code may be added."},"message":{"type":"string","description":"For people; may change."},"param":{"description":"The request field at fault: split.creator_share.","type":"string"},"request_id":{"type":"string","description":"This answer's id, also in its request-id header: quote it to support."}},"required":["code","message","request_id"],"additionalProperties":false,"description":"What was refused, and why."}},"required":["error"],"additionalProperties":false},"Launch":{"type":"object","properties":{"id":{"type":"string","description":"lch_ and 16 characters."},"kind":{"type":"string","enum":["wallet","import"],"description":"wallet: launched from the creator's wallet; import: brought from pump.fun."},"state":{"type":"string","enum":["prepared","sent","confirmed","failed","expired"],"description":"prepared: waits for the wallet; confirmed: the chain shows the token as prepared."},"mint":{"type":"string","description":"The token's mint address."},"creator":{"type":"string","description":"The creator's wallet: it signs and pays for the launch or import."},"name":{"type":"string","description":"The token's name."},"symbol":{"type":"string","description":"The token's ticker."},"metadata_uri":{"type":"string","description":"The token's metadata on IPFS, as pump.fun names it."},"image":{"description":"Null for an import: we fetch no link a token names.","type":["string","null"]},"route":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"A shareholder's wallet."},"bps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Basis points of the whole creator fee, as pump.fun pays it."},"roles":{"type":"array","items":{"type":"string","enum":["ai","platform","creator","project"]},"description":"ai: the token's vault, its AI credit; platform: relayfor's 20%; creator: the creator's part; project: one of the project's wallets. A creator who is one of the project's wallets holds both shares in one shareholder."}},"required":["address","bps","roles"],"additionalProperties":false},"description":"The token's shareholders as locked on chain: the AI first, relayfor second."},"preset":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"fps_..."},"name":{"type":"string","description":"Its name when the token was made."}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"The fee preset it was made with, named as it was then."},"fee_lamports":{"type":"string","description":"relayfor's fee in this transaction, in lamports: 0.02 SOL a launch, 1 SOL an import."},"quote_mint":{"type":"string","description":"What the token trades against: wrapped SOL for SOL."},"opening_buy":{"anyOf":[{"type":"object","properties":{"amount":{"type":"string","description":"The quote's base units spent, fees included."},"lamports":{"description":"The same in lamports, for a token quoted in SOL.","type":["string","null"]},"tokens":{"type":"string","description":"The tokens it gets, in base units."},"tokens_to":{"description":"Who gets them; null for the creator.","type":["string","null"]}},"required":["amount","lamports","tokens","tokens_to"],"additionalProperties":false},{"type":"null"}],"description":"The creator's first buy, in the launch itself; null for none."},"transaction":{"anyOf":[{"type":"object","properties":{"version":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1}],"description":"Its format: 1, or 0 for a wallet that can't sign version 1."},"base64":{"type":"string","description":"The transaction, base64, signed by the new mint."},"last_valid_block_height":{"type":"string","description":"Past this block height it can no longer land: prepare a new launch."}},"required":["version","base64","last_valid_block_height"],"additionalProperties":false},{"type":"null"}],"description":"While prepared: the transaction for the creator's wallet to sign last (a wallet launch or an import)."},"signature":{"description":"The transaction on Solana; null until it was sent.","type":["string","null"]},"error":{"description":"Why it failed or expired; null unless it did.","type":["string","null"]},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"confirmed_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When the chain confirmed it; null until then."}},"required":["id","kind","state","mint","creator","name","symbol","metadata_uri","image","route","preset","fee_lamports","quote_mint","opening_buy","transaction","signature","error","created_at","confirmed_at"],"additionalProperties":false},"LaunchList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Launch"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"Token":{"type":"object","properties":{"mint":{"type":"string","description":"The token's mint address."},"kind":{"type":"string","enum":["wallet","import"],"description":"How it came to relayfor."},"quote_mint":{"type":"string","description":"What it trades against and pays its fees in: wrapped SOL for SOL."},"name":{"type":"string","description":"The token's name."},"symbol":{"type":"string","description":"The token's ticker."},"metadata_uri":{"type":"string","description":"The token's metadata on IPFS, as pump.fun names it."},"image":{"description":"The token's image; null for a token brought from pump.fun.","type":["string","null"]},"creator":{"type":"string","description":"Its creator on pump.fun before the route took its place."},"route":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"A shareholder's wallet."},"bps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Basis points of the whole creator fee, as pump.fun pays it."},"roles":{"type":"array","items":{"type":"string","enum":["ai","platform","creator","project"]},"description":"ai: the token's vault, its AI credit; platform: relayfor's 20%; creator: the creator's part; project: one of the project's wallets. A creator who is one of the project's wallets holds both shares in one shareholder."}},"required":["address","bps","roles"],"additionalProperties":false},"description":"The token's shareholders as locked on chain: the AI first, relayfor second."},"preset":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"fps_..."},"name":{"type":"string","description":"Its name when the token was made."}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"The fee preset it was made with, named as it was then."},"sharing_config":{"type":"string","description":"pump.fun's account holding the route."},"bonding_curve":{"type":"string","description":"The token's bonding curve account on pump.fun."},"launch_id":{"description":"The launch or import that brought it: lch_...","type":["string","null"]},"signature":{"type":"string","description":"The transaction that locked its route."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."}},"required":["mint","kind","quote_mint","name","symbol","metadata_uri","image","creator","route","preset","sharing_config","bonding_curve","launch_id","signature","created_at"],"additionalProperties":false},"TokenList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Token"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"TokenDetail":{"type":"object","properties":{"mint":{"type":"string","description":"The token's mint address."},"kind":{"type":"string","enum":["wallet","import"],"description":"How it came to relayfor."},"quote_mint":{"type":"string","description":"What it trades against and pays its fees in: wrapped SOL for SOL."},"name":{"type":"string","description":"The token's name."},"symbol":{"type":"string","description":"The token's ticker."},"metadata_uri":{"type":"string","description":"The token's metadata on IPFS, as pump.fun names it."},"image":{"description":"The token's image; null for a token brought from pump.fun.","type":["string","null"]},"creator":{"type":"string","description":"Its creator on pump.fun before the route took its place."},"route":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"A shareholder's wallet."},"bps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Basis points of the whole creator fee, as pump.fun pays it."},"roles":{"type":"array","items":{"type":"string","enum":["ai","platform","creator","project"]},"description":"ai: the token's vault, its AI credit; platform: relayfor's 20%; creator: the creator's part; project: one of the project's wallets. A creator who is one of the project's wallets holds both shares in one shareholder."}},"required":["address","bps","roles"],"additionalProperties":false},"description":"The token's shareholders as locked on chain: the AI first, relayfor second."},"preset":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"fps_..."},"name":{"type":"string","description":"Its name when the token was made."}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"The fee preset it was made with, named as it was then."},"sharing_config":{"type":"string","description":"pump.fun's account holding the route."},"bonding_curve":{"type":"string","description":"The token's bonding curve account on pump.fun."},"launch_id":{"description":"The launch or import that brought it: lch_...","type":["string","null"]},"signature":{"type":"string","description":"The transaction that locked its route."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"market":{"anyOf":[{"type":"object","properties":{"graduated":{"type":"boolean","description":"Its curve completed: it trades on PumpSwap."},"curve_progress_bps":{"type":"number","description":"How much of its curve sold, in basis points (10000 once graduated)."}},"required":["graduated","curve_progress_bps"],"additionalProperties":false},{"type":"null"}],"description":"Read from the chain now; null when it could not be read."}},"required":["mint","kind","quote_mint","name","symbol","metadata_uri","image","creator","route","preset","sharing_config","bonding_curve","launch_id","signature","created_at","market"],"additionalProperties":false},"Account":{"type":"object","properties":{"id":{"type":"string","description":"The account's id: acc_ and 16 characters."},"token":{"anyOf":[{"type":"object","properties":{"mint":{"type":"string","description":"The token's mint address."},"name":{"type":"string","description":"The token's name."},"symbol":{"type":"string","description":"The token's ticker."}},"required":["mint","name","symbol"],"additionalProperties":false},{"type":"null"}],"description":"The token whose AI share lands here."},"spendable_usd":{"type":"string","description":"What new calls can reserve now: the balance less what is reserved."},"balance_usd":{"type":"string","description":"Credit left, what running calls reserved included."},"reserved_usd":{"type":"string","description":"Held by calls still running or waiting on their cost."},"credited_usd":{"type":"string","description":"Every credit the account ever received."},"spent_usd":{"type":"string","description":"Everything its calls were charged."},"running_calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Calls running on it now: it allows 8 at once."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."}},"required":["id","token","spendable_usd","balance_usd","reserved_usd","credited_usd","spent_usd","running_calls","created_at"],"additionalProperties":false},"AccountList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Account"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"LedgerEntry":{"type":"object","properties":{"kind":{"type":"string","enum":["call_charge","fee_credit","purchase","adjustment"],"description":"fee_credit: a payout's AI share; purchase: credit bought; call_charge: a settled call; adjustment: by hand."},"amount_usd":{"type":"string","description":"Positive for a credit, negative for a charge."},"ref":{"type":"string","description":"What made it, once: call:<id>, payout:<signature>:<event>, purchase:<signature>."},"note":{"description":"Why it was made, for an adjustment by hand.","type":["string","null"]},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."}},"required":["kind","amount_usd","ref","note","created_at"],"additionalProperties":false},"LedgerList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEntry"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"KeyLimit":{"type":"object","properties":{"limit_usd":{"type":"string","description":"Dollars it may spend each period."},"reset":{"type":"string","enum":["daily","weekly","monthly"],"description":"When the limit starts over, at 00:00 UTC."},"spent_usd":{"type":"string","description":"Charged to its calls that started this period."},"reserved_usd":{"type":"string","description":"Held by its calls of this period still open."},"remaining_usd":{"type":"string","description":"What it may still start this period."},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"00:00 UTC; a week starts on Monday."}},"required":["limit_usd","reset","spent_usd","reserved_usd","remaining_usd","resets_at"],"additionalProperties":false},"RouterKey":{"type":"object","properties":{"id":{"type":"string","description":"The key's id: key_ and 16 characters."},"name":{"type":"string","description":"What uses it, such as the agent's name."},"hint":{"type":"string","description":"The key's first characters: enough to tell keys apart."},"account":{"type":"string","description":"The account it spends: acc_..."},"limit":{"anyOf":[{"$ref":"#/components/schemas/KeyLimit"},{"type":"null"}],"description":"Its spending limit and what this period used of it; null for none."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"last_used_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it last started a call; null if never."},"revoked_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it was revoked; null while it works."}},"required":["id","name","hint","account","limit","created_at","last_used_at","revoked_at"],"additionalProperties":false},"NewRouterKey":{"type":"object","properties":{"id":{"type":"string","description":"The key's id: key_ and 16 characters."},"name":{"type":"string","description":"What uses it, such as the agent's name."},"hint":{"type":"string","description":"The key's first characters: enough to tell keys apart."},"account":{"type":"string","description":"The account it spends: acc_..."},"limit":{"anyOf":[{"$ref":"#/components/schemas/KeyLimit"},{"type":"null"}],"description":"Its spending limit and what this period used of it; null for none."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"last_used_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it last started a call; null if never."},"revoked_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it was revoked; null while it works."},"key":{"description":"The key itself, rf_ai_...: shown in this answer, and again to a retry with the same Idempotency-Key within 24 hours. Null only if it can't be given back: then revoke that key and make another.","type":["string","null"]}},"required":["id","name","hint","account","limit","created_at","last_used_at","revoked_at","key"],"additionalProperties":false},"RouterKeyList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RouterKey"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"Purchase":{"type":"object","properties":{"id":{"type":"string","description":"The purchase's id: pur_ and 16 characters."},"account":{"type":"string","description":"The account it credits: acc_..."},"status":{"type":"string","enum":["pending","credited"],"description":"pending: waits for the transfer; credited: it arrived and was credited."},"amount_usd":{"type":"string","description":"Asked for, in dollars: as many USDC."},"credited_usd":{"description":"What arrived and was credited, once final.","type":["string","null"]},"payer":{"description":"The wallet the transaction was made for; null for a dashboard payment request.","type":["string","null"]},"reference":{"type":"string","description":"The one-time key the transfer names: how the payment is found."},"recipient":{"description":"relayfor's AI treasury, the wallet paid.","type":["string","null"]},"token_account":{"description":"Its USDC account, which receives.","type":["string","null"]},"mint":{"type":"string","description":"USDC's mint."},"solana_pay_url":{"description":"A Solana Pay transfer request for the same payment, for a wallet or a QR code.","type":["string","null"]},"transaction":{"description":"In the answer that made the purchase only: the transaction (v0, base64) for the payer's wallet to sign and send. It expires with its blockhash in about a minute; make another purchase if it does.","type":["string","null"]},"signature":{"description":"The payment's transaction, once credited.","type":["string","null"]},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"credited_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it was credited; null while it waits for payment."}},"required":["id","account","status","amount_usd","credited_usd","payer","reference","recipient","token_account","mint","solana_pay_url","transaction","signature","created_at","credited_at"],"additionalProperties":false},"PurchaseList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Purchase"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"Usage":{"type":"object","properties":{"from":{"type":"string","description":"The first day read, YYYY-MM-DD (UTC)."},"to":{"type":"string","description":"The last day read, YYYY-MM-DD (UTC)."},"data":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","description":"The day, YYYY-MM-DD in UTC."},"account":{"type":"string","description":"The credit account: acc_..."},"key":{"type":"string","description":"The router key: key_..."},"model":{"type":"string","description":"The model id the calls named."},"calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Calls charged."},"prompt_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tokens read."},"completion_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tokens written, reasoning included."},"reasoning_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Of those written, the model's thinking."},"cached_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Of those read, served from the provider's cache at its lower price."},"spent_usd":{"type":"string","description":"What the calls were charged: OpenRouter's cost + 20%."}},"required":["day","account","key","model","calls","prompt_tokens","completion_tokens","reasoning_tokens","cached_tokens","spent_usd"],"additionalProperties":false},"description":"One row per day, account, key and model."},"totals":{"type":"object","properties":{"calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Calls charged."},"prompt_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tokens read."},"completion_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tokens written."},"spent_usd":{"type":"string","description":"What they were charged, in dollars."}},"required":["calls","prompt_tokens","completion_tokens","spent_usd"],"additionalProperties":false,"description":"The rows added up."}},"required":["from","to","data","totals"],"additionalProperties":false},"Webhook":{"type":"object","properties":{"id":{"type":"string","description":"The endpoint's id: whk_ and 16 characters."},"url":{"type":"string","description":"Where events are sent."},"events":{"type":"array","items":{"type":"string","enum":["launch.confirmed","launch.failed","token.imported","token.graduated","payout.credited","account.low_balance","key.limit_reached","route.changed"]},"description":"The event types it receives; empty for all of them."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"rotated_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When its secret was last replaced."}},"required":["id","url","events","created_at","rotated_at"],"additionalProperties":false},"NewWebhook":{"type":"object","properties":{"id":{"type":"string","description":"The endpoint's id: whk_ and 16 characters."},"url":{"type":"string","description":"Where events are sent."},"events":{"type":"array","items":{"type":"string","enum":["launch.confirmed","launch.failed","token.imported","token.graduated","payout.credited","account.low_balance","key.limit_reached","route.changed"]},"description":"The event types it receives; empty for all of them."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"rotated_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When its secret was last replaced."},"secret":{"description":"The signing secret, whsec_...: shown in this answer, and again to a retry with the same Idempotency-Key within 24 hours. Null only if it can't be given back: then rotate it.","type":["string","null"]}},"required":["id","url","events","created_at","rotated_at","secret"],"additionalProperties":false},"WebhookList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"},"description":"The items, newest first."}},"required":["data"],"additionalProperties":false},"Delivery":{"type":"object","properties":{"id":{"type":"string","description":"The delivery's id: dlv_ and 16 characters."},"webhook":{"type":"string","description":"The endpoint: whk_..."},"event":{"type":"object","properties":{"id":{"type":"string","description":"The event's id, evt_..., as its body names it."},"type":{"type":"string","description":"The event's type, such as payout.credited."}},"required":["id","type"],"additionalProperties":false,"description":"The event it carries."},"status":{"type":"string","enum":["pending","delivered","failed"],"description":"pending: sent again later; delivered: answered 2xx; failed: given up."},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many times it was sent."},"next_attempt_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it is sent again; null once delivered or given up."},"last_attempt_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When it was last sent; null before the first try."},"last_status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The HTTP status it last answered."},"last_error":{"description":"Why the last try failed, such as \"answered 500\".","type":["string","null"]},"delivered_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When the endpoint answered 2xx; null until then."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."}},"required":["id","webhook","event","status","attempts","next_attempt_at","last_attempt_at","last_status","last_error","delivered_at","created_at"],"additionalProperties":false},"DeliveryList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Delivery"},"description":"The items, newest first."},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"TokenRef":{"type":"object","properties":{"mint":{"type":"string","description":"The token's mint address."},"name":{"type":"string","description":"The token's name."},"symbol":{"type":"string","description":"The token's ticker."}},"required":["mint","name","symbol"],"additionalProperties":false},"Payout":{"type":"object","properties":{"token":{"type":"string","description":"The token's mint."},"account":{"type":"string","description":"The credit account it was credited to: acc_..."},"signature":{"type":"string","description":"The payout's transaction."},"event":{"type":"string","description":"Which of the transaction's payout events: a transaction may carry several."},"slot":{"type":"string","description":"The slot the payout landed in."},"quote_mint":{"type":"string","description":"What it was paid in: wrapped SOL for SOL, else the token's quote."},"distributed_lamports":{"type":"string","description":"What the payout shared among every shareholder, in the quote's base units."},"ai_bps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The AI's share of the route, in basis points."},"ai_lamports":{"type":"string","description":"What reached the token's vault, in the quote's base units."},"sol_usd":{"anyOf":[{"type":"object","properties":{"price":{"type":"string","description":"Dollars per SOL."},"confidence":{"type":"string","description":"Pyth's stated uncertainty, in dollars."},"published_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When Pyth published the price."}},"required":["price","confidence","published_at"],"additionalProperties":false},{"type":"null"}],"description":"Pyth's SOL/USD price the payout was valued at, credited at the price less its confidence; null for a payout in a token."},"credited_usd":{"anyOf":[{"type":"string","description":"The credit it became, in dollars."},{"type":"null"}],"description":"The credit it became, in dollars; null while a token payout waits to be sold for USDC."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."}},"required":["token","account","signature","event","slot","quote_mint","distributed_lamports","ai_bps","ai_lamports","sol_usd","credited_usd","created_at"],"additionalProperties":false},"LaunchConfirmedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"launch.confirmed","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"launch":{"description":"The launch or import, as GET /launches/{id} answers it.","$ref":"#/components/schemas/Launch"}},"required":["launch"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"LaunchFailedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"launch.failed","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"launch":{"description":"The launch or import, as GET /launches/{id} answers it.","$ref":"#/components/schemas/Launch"}},"required":["launch"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"TokenImportedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"token.imported","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"launch":{"description":"The launch or import, as GET /launches/{id} answers it.","$ref":"#/components/schemas/Launch"}},"required":["launch"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"TokenGraduatedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"token.graduated","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"token":{"description":"The token that graduated.","$ref":"#/components/schemas/TokenRef"},"graduated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When its curve completed, in UTC."}},"required":["token","graduated_at"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"PayoutCreditedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"payout.credited","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"payout":{"description":"The payout, and the credit it became.","$ref":"#/components/schemas/Payout"}},"required":["payout"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"AccountLowBalanceEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"account.low_balance","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"account":{"description":"The account as it stands now.","$ref":"#/components/schemas/Account"},"threshold_usd":{"type":"string","description":"The threshold: $5."}},"required":["account","threshold_usd"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"KeyLimitReachedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"key.limit_reached","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"key":{"description":"The key refused, with its limit.","$ref":"#/components/schemas/RouterKey"}},"required":["key"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"RouteChangedEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"route.changed","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"token":{"description":"The token whose fees moved.","$ref":"#/components/schemas/TokenRef"},"reason":{"type":"string","description":"What the chain shows instead."},"detected_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When relayfor saw it, in UTC."}},"required":["token","reason","detected_at"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"PingEvent":{"type":"object","properties":{"id":{"type":"string","description":"The event's id: evt_ and 16 characters. The same event may arrive twice."},"type":{"type":"string","const":"ping","description":"The event's type."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"project":{"type":"string","description":"The project's id: prj_..."},"data":{"type":"object","properties":{"message":{"type":"string","description":"A line saying it is a test."}},"required":["message"],"additionalProperties":false,"description":"What it tells of."}},"required":["id","type","created_at","project","data"],"additionalProperties":false},"Statement":{"type":"object","properties":{"month":{"type":"string","description":"YYYY-MM, in UTC."},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The month's first instant, in UTC."},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The next month's first instant: not included."},"complete":{"type":"boolean","description":"False for the current month: its figures are to date."},"accounts":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string","description":"The credit account: acc_..."},"token":{"anyOf":[{"type":"object","properties":{"mint":{"type":"string","description":"The token's mint address."},"name":{"type":"string","description":"The token's name."},"symbol":{"type":"string","description":"The token's ticker."}},"required":["mint","name","symbol"],"additionalProperties":false},{"type":"null"}],"description":"The token whose AI share lands there."},"opening_usd":{"type":"string","description":"Its balance as the month began."},"credited_usd":{"type":"object","properties":{"fee_credit":{"type":"string","description":"From the token's payouts."},"purchase":{"type":"string","description":"Bought in USDC."},"adjustment":{"type":"string","description":"By hand."}},"required":["fee_credit","purchase","adjustment"],"additionalProperties":false,"description":"Credit that came in, by kind."},"spent_usd":{"type":"string","description":"What its AI calls were charged."},"closing_usd":{"type":"string","description":"Its balance as the month ended, or now."},"payouts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Payouts credited."},"calls":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Calls charged."}},"required":["account","token","opening_usd","credited_usd","spent_usd","closing_usd","payouts","calls"],"additionalProperties":false},"description":"One row per credit account."},"totals":{"type":"object","properties":{"opening_usd":{"type":"string","description":"Dollars, as an exact decimal."},"credited_usd":{"type":"string","description":"Dollars, as an exact decimal."},"spent_usd":{"type":"string","description":"Dollars, as an exact decimal."},"closing_usd":{"type":"string","description":"Dollars, as an exact decimal."}},"required":["opening_usd","credited_usd","spent_usd","closing_usd"],"additionalProperties":false,"description":"The accounts together."},"lines":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it happened, in UTC."},"account":{"type":"string","description":"The credit account: acc_..."},"token":{"description":"The token's symbol.","type":["string","null"]},"kind":{"type":"string","description":"fee_credit, purchase, adjustment or call_charge."},"amount_usd":{"type":"string","description":"Positive for a credit, negative for spend."},"ref":{"type":"string","description":"The ledger's reference (payout:<signature>:<event>, purchase:...), or calls:<n> for a day's AI spend."}},"required":["at","account","token","kind","amount_usd","ref"],"additionalProperties":false},"description":"Each credit on its own, and each account's AI spend once a day, oldest first."}},"required":["month","from","to","complete","accounts","totals","lines"],"additionalProperties":false},"Preset":{"type":"object","properties":{"id":{"type":"string","description":"The preset's id: fps_ and 16 characters."},"name":{"type":"string","description":"Its name, unique in the project."},"default":{"type":"boolean","description":"The project's default: what a launch or import gets when it names none."},"ai_share":{"type":"integer","minimum":0,"maximum":10000,"description":"The AI's share when the creator doesn't choose."},"creator_share":{"type":"integer","minimum":0,"maximum":10000,"description":"The creator's share when the creator doesn't choose."},"project_share":{"type":"integer","minimum":0,"maximum":10000,"description":"The project's wallets together."},"ai_floor_share":{"type":"integer","minimum":0,"maximum":10000,"description":"The least AI share its creators may choose: at least 2,500 (20% of the token's fees)."},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"A wallet of the project's own."},"share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."}},"required":["address","share"],"additionalProperties":false},"description":"The project's wallets, each with its share of the project's part."},"creator_choice":{"type":"object","properties":{"budget":{"type":"integer","minimum":0,"maximum":10000,"description":"The AI and creator shares together."},"ai_floor":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"creator_max":{"type":"integer","minimum":0,"maximum":10000,"description":"The most a creator may take: the budget less the floor."}},"required":["budget","ai_floor","creator_max"],"additionalProperties":false,"description":"What a creator may choose at launch, for a launchpad's own page."},"fee_bps":{"type":"object","properties":{"ai":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The AI's basis points of the whole fee."},"creator":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The creator's basis points of the whole fee."},"project":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The project's wallets' basis points of the whole fee, together."},"platform":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"relayfor's 20%."}},"required":["ai","creator","project","platform"],"additionalProperties":false,"description":"The preset's own split in basis points of the whole creator fee, as a route locks it: shares rounded down, the AI taking what rounding leaves."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it was made, in UTC."},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When it last changed, in UTC."}},"required":["id","name","default","ai_share","creator_share","project_share","ai_floor_share","wallets","creator_choice","fee_bps","created_at","updated_at"],"additionalProperties":false},"PresetList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Preset"},"description":"The items, the default first, then newest first."}},"required":["data"],"additionalProperties":false},"PresetTemplateList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["standard","ai_first","creator_first","no_project_share"],"description":"Which starting split: the dashboard names it."},"ai_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"creator_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."},"project_share":{"type":"integer","minimum":0,"maximum":10000,"description":"Basis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves."}},"required":["key","ai_share","creator_share","project_share"],"additionalProperties":false},"description":"relayfor's starting splits."}},"required":["data"],"additionalProperties":false}}}}