{
  "components": {
    "securitySchemes": {
      "bearer": {
        "description": "Account API key",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "OpenAI- and Anthropic-compatible endpoints available to ZRouter account API keys. Request and response bodies follow the upstream OpenAI and Anthropic formats. Full guide: https://agents.zrouter.si/docs/api.md",
    "title": "ZRouter API (account keys)",
    "version": "dev"
  },
  "openapi": "3.1.0",
  "paths": {
    "/v1/audio/speech": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Text to speech"
      }
    },
    "/v1/audio/transcriptions": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Speech to text"
      }
    },
    "/v1/audio/translations": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Speech translation to English text"
      }
    },
    "/v1/chat/completions": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "OpenAI Chat Completions (text)"
      }
    },
    "/v1/embeddings": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Text embeddings"
      }
    },
    "/v1/images/edits": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Edit images"
      }
    },
    "/v1/images/generations": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Generate images"
      }
    },
    "/v1/messages": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Anthropic Messages (text)"
      }
    },
    "/v1/messages/count_tokens": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Count input tokens without a credit charge"
      }
    },
    "/v1/models": {
      "get": {
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "List models available to this account, including its virtual models"
      }
    },
    "/v1/responses": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "OpenAI Responses (text)"
      }
    },
    "/v1/usage": {
      "get": {
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Usage aggregates for this account"
      }
    },
    "/v1/videos": {
      "post": {
        "parameters": [
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Create a video job"
      }
    },
    "/v1/videos/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Delete a video job"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Get a video job"
      }
    },
    "/v1/videos/{id}/content": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Download finished video content"
      }
    },
    "/v1/videos/{id}/remix": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Set to true to use the account's saved provider key",
            "in": "header",
            "name": "X-ZRouter-BYOK",
            "required": false,
            "schema": {
              "enum": [
                "true"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. Bodies follow the OpenAI or Anthropic format for this path."
          },
          "400": {
            "description": "Invalid request or BYOK setup"
          },
          "401": {
            "description": "Invalid account API key"
          },
          "402": {
            "description": "Insufficient credit for the reservation"
          },
          "403": {
            "description": "Endpoint or model not allowed"
          },
          "429": {
            "description": "Rate limit or budget exceeded"
          },
          "503": {
            "description": "Account or billing service unavailable"
          }
        },
        "summary": "Remix a finished video"
      }
    }
  },
  "security": [
    {
      "bearer": []
    }
  ],
  "servers": [
    {
      "url": "https://zrouter.si"
    }
  ]
}
