{"openapi":"3.1.0","info":{"title":"Proxagy API","summary":"Persistent multimodal Gemini gateway","description":"\nPersistent multimodal Gemini gateway with direct Antigravity transport and CLI fallback.\n\n## Authentication\n\nUse either `Authorization: Bearer pxg_live_...` or `X-API-Key: pxg_live_...`.\nClick **Authorize** above to test requests in this page.\n\n## Compatible APIs\n\n- OpenAI Chat Completions: `POST /v1/chat/completions`\n- OpenAI Responses: `POST /v1/responses`\n- OpenAI Images: `POST /v1/images/generations`\n- Asynchronous Images: `POST /v1/images/generations/async`\n- Anthropic Messages / Claude Code: `POST /v1/messages`\n- Multipart images, audio, video and documents:\n  `POST /v1/conversations/{conversation_id}/messages`\n\n## Claude Code\n\n```bash\nexport ANTHROPIC_BASE_URL=\"https://api.lndn.space\"\nexport ANTHROPIC_AUTH_TOKEN=\"pxg_live_...\"\nexport ANTHROPIC_MODEL=\"claude-proxagy-gemini-3.6-flash-high\"\nexport ANTHROPIC_DEFAULT_OPUS_MODEL=\"$ANTHROPIC_MODEL\"\nexport ANTHROPIC_DEFAULT_SONNET_MODEL=\"$ANTHROPIC_MODEL\"\nexport ANTHROPIC_DEFAULT_HAIKU_MODEL=\"$ANTHROPIC_MODEL\"\nexport CLAUDE_CODE_ATTRIBUTION_HEADER=0\nclaude --model \"$ANTHROPIC_MODEL\"\n```\n\nClaude Code streaming, tool calls, tool results, token counting, and persistent\nsession context are translated to Gemini 3.6 Flash High automatically.\n\nChat-only clients can generate images by selecting `proxagy-image`, starting a\nmessage with `/image`, or using a clear image-generation request. The response\ncontains a Markdown preview, a direct 24-hour URL, and structured `image` data.\n\nSend `Idempotency-Key` on non-streaming POST requests to retry safely. Real SSE\nstreaming includes usage and Proxagy transport/TTFT metadata.\n","contact":{"name":"LNDN","url":"https://lndn.space/"},"version":"2.0.0"},"servers":[{"url":"https://api.lndn.space","description":"Production"}],"paths":{"/health":{"get":{"tags":["Service"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/v1/upstream/status":{"get":{"tags":["Service"],"summary":"Upstream Status","operationId":"upstream_status_v1_upstream_status_get","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upstream Status V1 Upstream Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"tags":["Models"],"summary":"Models","operationId":"models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Models V1 Models Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/images/{image_id}/content":{"get":{"tags":["OpenAI compatible"],"summary":"Download a generated image","description":"Temporary capability URL returned by the image generation endpoint. The unguessable query token is the authorization for this download.","operationId":"generated_image_content_v1_images__image_id__content_get","parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"string","title":"Image Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/images/generations":{"post":{"tags":["OpenAI compatible"],"summary":"Generate an image","description":"OpenAI Images-compatible native Antigravity image generation. Supports one image per request and either a temporary URL or base64 response.","operationId":"image_generations_v1_images_generations_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Image Generations V1 Images Generations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/images/generations/async":{"post":{"tags":["Async media"],"summary":"Start image generation in the background","operationId":"image_generations_async_v1_images_generations_async_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/media/tasks/{task_id}":{"get":{"tags":["Async media"],"summary":"Get an asynchronous media task","operationId":"media_task_get_v1_media_tasks__task_id__get","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/messages/count_tokens":{"post":{"tags":["Anthropic compatible"],"summary":"Estimate Anthropic input tokens","description":"Claude Code-compatible token counting endpoint.","operationId":"anthropic_count_tokens_v1_messages_count_tokens_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"integer"},"type":"object","title":"Response Anthropic Count Tokens V1 Messages Count Tokens Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/messages":{"post":{"tags":["Anthropic compatible"],"summary":"Create an Anthropic message","description":"Claude Code-compatible Anthropic Messages endpoint. Supports SSE streaming, text, images, documents, tool_use and tool_result blocks. Claude model names are mapped to the configured Gemini backend.","operationId":"anthropic_messages_v1_messages_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/conversations":{"post":{"tags":["Conversations"],"summary":"Conversations Create","operationId":"conversations_create_v1_conversations_post","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Conversations Create V1 Conversations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Conversations"],"summary":"Conversations List","operationId":"conversations_list_v1_conversations_get","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Conversations List V1 Conversations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations/{conversation_id}":{"get":{"tags":["Conversations"],"summary":"Conversation Get","operationId":"conversation_get_v1_conversations__conversation_id__get","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Conversation Get V1 Conversations  Conversation Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations/{conversation_id}/messages":{"get":{"tags":["Conversations"],"summary":"Conversation Messages","operationId":"conversation_messages_v1_conversations__conversation_id__messages_get","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Conversation Messages V1 Conversations  Conversation Id  Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Multimodal chat"],"summary":"Conversation Message Create","operationId":"conversation_message_create_v1_conversations__conversation_id__messages_post","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_conversation_message_create_v1_conversations__conversation_id__messages_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Conversation Message Create V1 Conversations  Conversation Id  Messages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/completions":{"post":{"tags":["OpenAI compatible"],"summary":"Chat Completions","operationId":"chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/responses":{"post":{"tags":["OpenAI compatible"],"summary":"Create a Responses API response","operationId":"responses_create_v1_responses_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}]}},"/v1/responses/{response_id}":{"get":{"tags":["OpenAI compatible"],"summary":"Get stored response metadata","operationId":"response_get_v1_responses__response_id__get","security":[{"BearerAuth":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"response_id","in":"path","required":true,"schema":{"type":"string","title":"Response Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Response Get V1 Responses  Response Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_conversation_message_create_v1_conversations__conversation_id__messages_post":{"properties":{"message":{"type":"string","title":"Message","default":""},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"max_output_tokens":{"type":"integer","title":"Max Output Tokens","default":8192},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files","default":[]}},"type":"object","title":"Body_conversation_message_create_v1_conversations__conversation_id__messages_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"BearerAuth":{"type":"http","description":"Enter a Proxagy key in the `pxg_live_...` format.","scheme":"bearer"},"ApiKeyHeader":{"type":"apiKey","description":"Alternative to the Authorization Bearer header.","in":"header","name":"X-API-Key"}}}}