{"openapi":"3.1.0","info":{"title":"NexRelay API","version":"1.0.0","summary":"Prepaid OpenAI-compatible API gateway","description":"NexRelay provides OpenAI-compatible, Claude-compatible, and Gemini-style API surfaces with prepaid wallet protection, per-key budgets, output caps, and request-level usage logs."},"servers":[{"url":"https://nexrelay-api.xyz","description":"NexRelay production API"}],"externalDocs":{"description":"NexRelay setup documentation","url":"https://nexrelay-api.xyz/docs"},"tags":[{"name":"OpenAI-compatible","description":"OpenAI-style API routes for compatible SDKs and tools."},{"name":"Claude-compatible","description":"Claude-style message routes for compatible clients."},{"name":"Gemini-compatible","description":"Gemini-style model and generation routes."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"NexRelay API key"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"ChatMessage":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","example":"user"},"content":{"type":"string","example":"Write a concise product tagline."}}},"ChatCompletionRequest":{"type":"object","required":["model","messages"],"properties":{"model":{"type":"string","enum":["gpt-5.2","gpt-5.3","gpt-5.4","gpt-5.5"],"example":"gpt-5.4"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessage"}},"max_tokens":{"type":"integer","minimum":1,"default":500},"stream":{"type":"boolean","default":false}}},"ResponsesRequest":{"type":"object","required":["model","input"],"properties":{"model":{"type":"string","enum":["gpt-5.2","gpt-5.3","gpt-5.4","gpt-5.5"],"example":"gpt-5.5"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object"}}]},"max_output_tokens":{"type":"integer","minimum":1,"default":500},"stream":{"type":"boolean","default":false}}},"ClaudeMessageRequest":{"type":"object","required":["model","messages","max_tokens"],"properties":{"model":{"type":"string","example":"claude-sonnet-4-6"},"max_tokens":{"type":"integer","default":1024},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessage"}},"stream":{"type":"boolean","default":false}}},"GeminiGenerateRequest":{"type":"object","required":["contents"],"properties":{"contents":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","example":"user"},"parts":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Summarize this API gateway."}}}}}}},"generationConfig":{"type":"object","properties":{"maxOutputTokens":{"type":"integer","default":1024}}}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}},"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"paths":{"/api/v1/chat/completions":{"post":{"tags":["OpenAI-compatible"],"operationId":"createChatCompletion","summary":"Create an OpenAI-compatible chat completion","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"}}}},"responses":{"200":{"description":"OpenAI-compatible chat completion response","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/responses":{"post":{"tags":["OpenAI-compatible"],"operationId":"createResponse","summary":"Create an OpenAI-compatible response","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsesRequest"}}}},"responses":{"200":{"description":"OpenAI-compatible response object","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/models":{"get":{"tags":["OpenAI-compatible"],"operationId":"listModels","summary":"List supported compatible models","responses":{"200":{"description":"Model list response","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/messages":{"post":{"tags":["Claude-compatible"],"operationId":"createClaudeMessage","summary":"Create a Claude-compatible message","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeMessageRequest"}}}},"responses":{"200":{"description":"Claude-compatible message response","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/messages":{"post":{"tags":["Claude-compatible"],"operationId":"createClaudeMessageAlias","summary":"Create a Claude-compatible message through the API namespace","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeMessageRequest"}}}},"responses":{"200":{"description":"Claude-compatible message response","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1beta/models":{"get":{"tags":["Gemini-compatible"],"operationId":"listGeminiModels","summary":"List Gemini-compatible models","responses":{"200":{"description":"Gemini-compatible model list","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1beta/models/{model}:generateContent":{"post":{"tags":["Gemini-compatible"],"operationId":"generateGeminiContent","summary":"Generate Gemini-compatible content","parameters":[{"name":"model","in":"path","required":true,"schema":{"type":"string","example":"gemini-2.5-pro"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateRequest"}}}},"responses":{"200":{"description":"Gemini-compatible generation response","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or budget limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream provider unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}