{"openapi":"3.1.0","info":{"title":"JestSprout API","version":"1.0.0","description":"Generate concept-only meme coin names, tickers, descriptions, and hosted logo URLs from a theme."},"servers":[{"url":"/"}],"paths":{"/api/generate":{"post":{"operationId":"generateConcept","summary":"Generate a concept-only meme coin draft","description":"Unauthenticated callers receive five successful generations per IP address per UTC day. After that, pay $0.01 USDC per call with the X-PAYMENT x402 header, or use the existing $5 API-key pack for 500 generations at /api-keys. x402 uses exact on Base with maxAmountRequired 10000, asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, and payTo 0x0E2C79D680016D1b13be69780e45Bb2bE175F16e. Results are concept-only: JestSprout does not deploy tokens, connect wallets, process payments, or claim that a coin exists or has value.","security":[{},{"apiKey":[]},{"bearerAuth":[]},{"xPayment":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"},"example":{"theme":"a pigeon that knows everyone’s secrets"}}}},"responses":{"200":{"description":"A concept-only generation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResponse"}}}},"400":{"description":"The request body is invalid; the theme must be 3–240 characters."},"401":{"description":"The supplied API key is missing, invalid, or revoked."},"402":{"description":"The free successful-generation allowance is exhausted, or the supplied API key has no credits remaining. Without a valid API key or X-PAYMENT, the body has error free_limit_reached, buy https://jestsprout.polsia.io/api-keys, and accepts the fixed x402 payment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"503":{"description":"Concept generation is temporarily unavailable."}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key from the $5 pack for 500 generations at /api-keys."},"bearerAuth":{"type":"http","scheme":"bearer","description":"Send the API key as Authorization: Bearer <key>."},"xPayment":{"type":"apiKey","in":"header","name":"X-PAYMENT","description":"Base64-encoded x402 payment payload. Required after five successful free generations; PayAI’s keyless facilitator settles $0.01 USDC on Base before the result is served."}},"schemas":{"GenerateRequest":{"type":"object","required":["theme"],"properties":{"theme":{"type":"string","minLength":3,"maxLength":240,"description":"The theme or vibe to turn into a concept-only meme coin draft."}},"additionalProperties":false},"GenerateResponse":{"type":"object","required":["coinName","ticker","description","logoUrl","conceptOnly"],"properties":{"coinName":{"type":"string"},"ticker":{"type":"string"},"description":{"type":"string"},"logoUrl":{"type":"string","format":"uri"},"logo_error":{"type":"string","description":"Present only when logo generation is unavailable."},"logo_error_detail":{"type":"string","description":"A bounded, redacted provider diagnostic present with a fallback logo."},"conceptOnly":{"const":true,"description":"Always true; this API returns ideas and never live tokens."}},"additionalProperties":false},"X402PaymentRequired":{"type":"object","required":["x402Version","error","buy","accepts"],"properties":{"x402Version":{"const":1},"error":{"type":"string","example":"free_limit_reached"},"buy":{"type":"string","format":"uri","const":"https://jestsprout.polsia.io/api-keys"},"accepts":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","required":["scheme","network","maxAmountRequired","asset","payTo","resource","description","mimeType"],"properties":{"scheme":{"const":"exact"},"network":{"const":"base"},"maxAmountRequired":{"const":"10000"},"asset":{"const":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"payTo":{"const":"0x0E2C79D680016D1b13be69780e45Bb2bE175F16e"},"resource":{"type":"string","format":"uri"},"description":{"type":"string"},"mimeType":{"const":"application/json"}}}}}}}}}