{"openapi":"3.1.0","info":{"title":"MapleFlow","version":"0.1.0","description":"Unified developer API platform. One API key, one credit balance, dozens of endpoints wrapping Google, AWS, and Cloudflare AI services.\n\n## Authentication\nAll API endpoints require an API key via the `X-API-Key` header.\n\n## Credits\nEach API call costs credits. Check your balance at `/account`. Buy more at `/billing/packages`."},"servers":[{"url":"/","description":"Current environment"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your MapleFlow key (starts with sk_)"}},"schemas":{"Error":{"type":"object","properties":{"success":{"type":"boolean","example":false},"error":{"type":"string"}}},"CreditPackages":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","properties":{"packages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"price":{"type":"string"},"credits":{"type":"integer"},"per_1k":{"type":"string"}}}},"free_credits":{"type":"integer","example":50}}}}}}},"paths":{"/":{"get":{"summary":"Health check & endpoint list","tags":["System"],"security":[],"responses":{"200":{"description":"API info and available endpoints"}}}},"/billing/packages":{"get":{"summary":"List available credit packages","tags":["Billing"],"security":[],"responses":{"200":{"description":"Credit packages","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackages"}}}}}}},"/account":{"get":{"summary":"Get account info and credit balance","tags":["Account"],"responses":{"200":{"description":"Account details with current credit balance"},"401":{"description":"Invalid or missing API key"}}}},"/account/usage":{"get":{"summary":"Get usage history","tags":["Account"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":50},"description":"Max number of usage records to return"}],"responses":{"200":{"description":"Usage history with credit totals"}}}},"/ai/chat":{"post":{"summary":"AI Chat completion","description":"Send messages, get AI responses.\n\n**Models:**\n- `fast` (2 credits) — Llama 3.1 8B, fastest\n- `smart` (3 credits) — DeepSeek-R1 32B, better reasoning","tags":["AI"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["messages"],"properties":{"messages":{"type":"array","items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}}}},"model":{"type":"string","enum":["fast","smart"],"default":"fast"},"max_tokens":{"type":"integer","default":1024}}},"example":{"messages":[{"role":"user","content":"What is the capital of France?"}],"model":"fast"}}}},"responses":{"200":{"description":"AI response"},"400":{"description":"Invalid request"},"402":{"description":"Insufficient credits"}}}},"/ai/image":{"post":{"summary":"AI Image generation","description":"Generate images from text prompts.\n\n**Models:**\n- `flux-schnell` (2 credits) — Fast generation\n- `flux-dev` (3 credits) — Higher quality","tags":["AI"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"model":{"type":"string","enum":["flux-schnell","flux-dev"],"default":"flux-schnell"},"num_steps":{"type":"integer","default":4}}},"example":{"prompt":"A sunset over mountains, digital art","model":"flux-schnell"}}}},"responses":{"200":{"description":"Base64-encoded PNG image"}}}},"/ai/transcribe":{"post":{"summary":"Speech-to-text transcription","description":"Transcribe audio files to text using Whisper. **2 credits.**","tags":["AI"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["audio"],"properties":{"audio":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Transcribed text with timestamps"}}}},"/ai/tts":{"post":{"summary":"Text-to-speech","description":"Convert text to speech audio. **2 credits.**","tags":["AI"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"}}},"example":{"text":"Hello, welcome to MapleFlow!"}}}},"responses":{"200":{"description":"Base64-encoded WAV audio"}}}},"/ai/embeddings":{"post":{"summary":"Text embeddings","description":"Generate vector embeddings for text. **1 credit.**","tags":["AI"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}},"example":{"text":"The quick brown fox"}}}},"responses":{"200":{"description":"Embedding vectors"}}}},"/ai/summarize":{"post":{"summary":"Text summarization","description":"Summarize long text into a concise version. **2 credits.**","tags":["AI"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"max_length":{"type":"integer","default":200,"description":"Max words"}}},"example":{"text":"Long article text goes here...","max_length":100}}}},"responses":{"200":{"description":"Summarized text"}}}},"/translate":{"post":{"summary":"Translate text","description":"Translate text between languages. **1 credit.**","tags":["Utility"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text","to"],"properties":{"text":{"type":"string"},"from":{"type":"string","default":"auto","description":"Source language code"},"to":{"type":"string","description":"Target language code (e.g., es, fr, de)"}}},"example":{"text":"Hello, how are you?","to":"es"}}}},"responses":{"200":{"description":"Translated text"}}}},"/weather":{"get":{"summary":"Get current weather","description":"Get current weather for a location. **1 credit.** Cached 15 minutes.","tags":["Utility"],"parameters":[{"name":"location","in":"query","schema":{"type":"string"},"description":"City name (e.g., 'London')"},{"name":"lat","in":"query","schema":{"type":"number"},"description":"Latitude (alternative to location)"},{"name":"lon","in":"query","schema":{"type":"number"},"description":"Longitude (alternative to location)"},{"name":"units","in":"query","schema":{"type":"string","enum":["metric","imperial"],"default":"metric"}}],"responses":{"200":{"description":"Current weather data"}}}},"/currency":{"get":{"summary":"Currency exchange rate","description":"Get exchange rate and convert between currencies. **1 credit.** Cached 1 hour.","tags":["Utility"],"parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string"},"description":"Source currency code (e.g., USD)"},{"name":"to","in":"query","required":true,"schema":{"type":"string"},"description":"Target currency code (e.g., EUR)"},{"name":"amount","in":"query","schema":{"type":"number","default":1},"description":"Amount to convert"}],"responses":{"200":{"description":"Exchange rate and converted amount"}}}},"/sentiment":{"post":{"summary":"Sentiment analysis","description":"Analyze the sentiment of text (POSITIVE, NEGATIVE, NEUTRAL, MIXED). **1 credit.**","tags":["Utility"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"language":{"type":"string","default":"en"}}},"example":{"text":"I love this product, it works great!"}}}},"responses":{"200":{"description":"Sentiment analysis results"}}}},"/verify/face":{"post":{"summary":"Face comparison","description":"Compare two faces and return similarity score. **1 credit.** Accepts multipart form (image1, image2 files) or JSON (base64 strings).","tags":["Verify"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image1","image2"],"properties":{"image1":{"type":"string","format":"binary"},"image2":{"type":"string","format":"binary"}}}},"application/json":{"schema":{"type":"object","required":["image1","image2"],"properties":{"image1":{"type":"string","description":"Base64-encoded image"},"image2":{"type":"string","description":"Base64-encoded image"}}}}}},"responses":{"200":{"description":"Face match result with similarity score"}}}},"/verify/labels":{"post":{"summary":"Image label detection","description":"Detect labels/objects in an image. **1 credit.** Accepts multipart form (image file) or JSON (base64 string).","tags":["Verify"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary"}}}},"application/json":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","description":"Base64-encoded image"}}}}}},"responses":{"200":{"description":"Detected labels with confidence scores"}}}},"/images/bg-remove":{"post":{"summary":"Background removal","description":"Remove background from an image. **2 credits.** Accepts file upload, base64, or URL.","tags":["Images"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"image":{"type":"string","format":"binary"},"url":{"type":"string","description":"URL of image"}}}},"application/json":{"schema":{"type":"object","properties":{"image":{"type":"string","description":"Base64-encoded image"},"url":{"type":"string","description":"URL of image"}}}}}},"responses":{"200":{"description":"URL of image with background removed"}}}}},"tags":[{"name":"System","description":"Health check and info"},{"name":"Billing","description":"Credit packages and purchases"},{"name":"Account","description":"Account management and usage"},{"name":"AI","description":"AI-powered endpoints (chat, image gen, speech, embeddings)"},{"name":"Utility","description":"Translation, weather, currency, sentiment"},{"name":"Verify","description":"Face comparison and image labeling"},{"name":"Images","description":"Image processing (background removal)"}]}