Edgee Compress API

Standalone token compression endpoint

Operations 1

POST /v1/compress Compress request #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/edgee-compress-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

edgee-compress-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Edgee Compress API
  version: 1.0.0
  description: Edgee is an edge-native AI Gateway with private model hosting, automatic model selection, cost audits/alerts, and edge tools. This API is OpenAI-compatible, providing one API for any model and any provider.
servers:
- url: https://edgee.io
  description: Edgee AI Gateway
security:
- bearerAuth: []
tags:
- name: Compress
  description: Standalone token compression endpoint
paths:
  /v1/compress:
    post:
      operationId: compress
      summary: Compress request
      description: 'Compresses an LLM request payload and returns it with the `messages`, `input`, `system`, and `tools` fields replaced by their compressed versions. Accepts OpenAI Chat Completions, Anthropic Messages, and OpenAI Responses API formats — the wire format is auto-detected from the request body.


        No LLM provider is called. This is a pure pre-processing step intended for teams running their own LLM gateways who want Edgee token compression without routing requests through Edgee.'
      tags:
      - Compress
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompressRequest'
            examples:
              openaiChat:
                summary: OpenAI Chat Completions format
                value:
                  model: openai/gpt-4o
                  messages:
                  - role: system
                    content: You are a helpful assistant.
                  - role: user
                    content: What is the capital of France?
                  - role: assistant
                    content: Paris.
                  - role: tool
                    tool_call_id: call_abc
                    content: <large tool result>
                  tools:
                  - type: function
                    function:
                      name: get_weather
                      description: Get weather for a location
                      parameters:
                        type: object
                        properties:
                          location:
                            type: string
              anthropic:
                summary: Anthropic Messages format
                value:
                  model: claude-sonnet-4.5
                  max_tokens: 1024
                  system: You are a helpful assistant.
                  messages:
                  - role: user
                    content: What is the capital of France?
                  - role: assistant
                    content: Paris.
              responsesApi:
                summary: OpenAI Responses API format
                value:
                  model: openai/gpt-4o
                  instructions: You are a helpful assistant.
                  input:
                  - role: user
                    content: What is the capital of France?
                  - type: function_call
                    call_id: call_abc
                    name: get_weather
                    arguments: '{"location":"Paris"}'
                  - type: function_call_output
                    call_id: call_abc
                    output: <large tool result>
      responses:
        '200':
          description: Request compressed successfully. The response mirrors the input format with the `messages`, `input`, `system`, and `tools` fields replaced by their compressed versions. All other fields pass through unchanged. A `compression` metadata object is always appended.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompressResponse'
              example:
                model: openai/gpt-4o
                messages:
                - role: system
                  content: You are a helpful assistant.
                - role: user
                  content: What is the capital of France?
                - role: assistant
                  content: Paris.
                - role: tool
                  tool_call_id: call_abc
                  content: <trimmed>
                tools:
                - type: function
                  function:
                    name: get_weather
                    description: Get weather for a location
                    parameters:
                      type: object
                      properties:
                        location:
                          type: string
                compression:
                  technique: auto
                  applied_strategies:
                  - tool_result_trimming
                  compression_rate: 0.19
                  uncompressed_input_tokens: 1000
                  compressed_input_tokens: 810
                  compression_time_ms: 12
        '400':
          description: Bad request — malformed JSON or unrecognized request format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalidJson:
                  value:
                    error:
                      code: invalid_json
                      message: 'Failed to parse JSON: ...'
                invalidRequest:
                  value:
                    error:
                      code: invalid_request
                      message: 'Failed to convert Anthropic request: ...'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: unauthorized
                  message: Missing x-api-key or Authorization Bearer header
        '403':
          description: Forbidden — API key is inactive or expired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: forbidden
                  message: API key is inactive
components:
  schemas:
    ToolChoiceTypedMode:
      type: object
      description: Typed-mode form of `tool_choice` — an object containing only a `type` field set to `auto` or `none`.
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - auto
          - none
    ToolChoiceSpecific:
      type: object
      required:
      - type
      - function
      properties:
        type:
          type: string
          enum:
          - function
          description: The type of the tool.
        function:
          $ref: '#/components/schemas/ToolChoiceFunction'
    FunctionDefinition:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          description: The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.
        description:
          type: string
          description: A description of what the function does, used by the model to choose when and how to call the function.
        parameters:
          type: object
          description: The parameters the functions accepts, described as a JSON Schema object. See the guide for examples, and the JSON Schema reference for documentation about the format.
          additionalProperties: true
    ResponsesRequest:
      type: object
      required:
      - model
      - input
      properties:
        model:
          type: string
          description: 'ID of the model to use, with provider prefix. Format: `{author_id}/{model_id}`.'
          example: openai/gpt-4o
        input:
          description: The input to the model. Either a plain string (treated as a single user message) or a flat array of typed input items (messages, function calls, function call outputs).
          oneOf:
          - type: string
          - type: array
            items:
              $ref: '#/components/schemas/ResponsesInputItem'
        instructions:
          type: string
          description: System-level instruction prepended to the conversation. An alternative to including a `system` role message in the `input` array.
        stream:
          type: boolean
          description: If set, the response is streamed as Server-Sent Events (SSE).
          default: false
        max_output_tokens:
          type: integer
          description: Maximum number of tokens to generate.
          minimum: 1
        tools:
          type: array
          description: Tools available to the model. Uses the Responses API flat format (no nested `function` key).
          items:
            $ref: '#/components/schemas/ResponsesTool'
        tool_choice:
          description: Controls tool selection.
          oneOf:
          - type: string
            enum:
            - auto
            - none
            description: Bare-string mode. `auto` lets the model decide; `none` forbids tool calls.
          - $ref: '#/components/schemas/ToolChoiceTypedMode'
          - $ref: '#/components/schemas/ResponsesToolChoiceFunction'
        temperature:
          type: number
          description: Sampling temperature between 0 and 2. Higher values produce more random outputs.
          minimum: 0
          maximum: 2
        top_p:
          type: number
          description: Nucleus sampling probability. Alternative to temperature.
        tags:
          type: array
          items:
            type: string
          description: List of string tags for categorizing and filtering requests in analytics and logs. Can also be sent via the `X-Edgee-Tags` header.
        enable_debug:
          type: boolean
          description: Enable debug mode to include additional information in the response.
        edgee_tool_ids:
          type: array
          items:
            type: string
          description: List of Edgee-managed tool IDs to include automatically (e.g. `edgee_current_time`, `edgee_generate_uuid`). Each ID must be activated for your API key.
          example:
          - edgee_current_time
          - edgee_generate_uuid
        edgee_pending_id:
          type: string
          description: Pending operation ID when continuing a conversation after Edge Tool execution. The gateway injects stored Edge Tool results into the conversation history.
        compression_model:
          $ref: '#/components/schemas/CompressionModel'
    ContentBlock:
      type: object
      required:
      - type
      discriminator:
        propertyName: type
      oneOf:
      - type: object
        required:
        - type
        - text
        properties:
          type:
            type: string
            enum:
            - text
          text:
            type: string
      - type: object
        required:
        - type
        - id
        - name
        - input
        properties:
          type:
            type: string
            enum:
            - tool_use
          id:
            type: string
          name:
            type: string
          input:
            type: object
      - type: object
        required:
        - type
        - tool_use_id
        - content
        properties:
          type:
            type: string
            enum:
            - tool_result
          tool_use_id:
            type: string
          content:
            type: string
          is_error:
            type: boolean
            default: false
    ResponsesContentPart:
      description: A typed content part within a message item.
      oneOf:
      - type: object
        required:
        - type
        - text
        properties:
          type:
            type: string
            enum:
            - input_text
          text:
            type: string
      - type: object
        required:
        - type
        - text
        properties:
          type:
            type: string
            enum:
            - output_text
          text:
            type: string
      - type: object
        required:
        - type
        - text
        properties:
          type:
            type: string
            enum:
            - text
          text:
            type: string
    CompressRequest:
      description: 'An LLM request payload to compress. Accepts any of three wire formats — the format is auto-detected from the request body: a top-level `"system"` key indicates Anthropic Messages format; a top-level `"input"` key indicates OpenAI Responses API format; otherwise, OpenAI Chat Completions format is assumed.'
      anyOf:
      - $ref: '#/components/schemas/ChatCompletionRequest'
      - $ref: '#/components/schemas/CreateMessageRequest'
      - $ref: '#/components/schemas/ResponsesRequest'
    ToolChoice:
      type: object
      required:
      - type
      discriminator:
        propertyName: type
      oneOf:
      - type: object
        required:
        - type
        properties:
          type:
            type: string
            enum:
            - auto
            description: Model decides whether to use tools
      - type: object
        required:
        - type
        properties:
          type:
            type: string
            enum:
            - any
            description: Model must use one of the provided tools
      - type: object
        required:
        - type
        - name
        properties:
          type:
            type: string
            enum:
            - tool
          name:
            type: string
            description: Name of the specific tool to use
    ToolCall:
      type: object
      required:
      - id
      - type
      - function
      properties:
        id:
          type: string
          description: The ID of the tool call.
        type:
          type: string
          enum:
          - function
          description: The type of the tool call.
        function:
          $ref: '#/components/schemas/FunctionCall'
    MessageParam:
      type: object
      required:
      - role
      - content
      properties:
        role:
          type: string
          enum:
          - user
          - assistant
          description: The role of the message
        content:
          oneOf:
          - type: string
            description: Simple text content
          - type: array
            description: Array of content blocks
            items:
              $ref: '#/components/schemas/ContentBlock'
    AnthropicTool:
      type: object
      required:
      - name
      - input_schema
      properties:
        name:
          type: string
          description: The name of the tool
        description:
          type: string
          description: Description of what the tool does
        input_schema:
          type: object
          description: JSON Schema describing the tool's input parameters
    CompressResponse:
      type: object
      description: The original request payload with compressed content fields replaced. All fields not touched by compression (`model`, `temperature`, `top_p`, `stop_sequences`, etc.) pass through unchanged. A `compression` object is always appended.
      required:
      - compression
      properties:
        compression:
          $ref: '#/components/schemas/CompressMetadata'
      additionalProperties: true
    CompressionModel:
      type: string
      description: Selects the compression bundle to apply to the request. Equivalent to the `X-Edgee-Compression-Model` header.
      enum:
      - claude
      - opencode
      - codex
      - cursor
    Tool:
      type: object
      required:
      - type
      - function
      properties:
        type:
          type: string
          enum:
          - function
          description: The type of the tool. Currently, only `function` is supported.
        function:
          $ref: '#/components/schemas/FunctionDefinition'
    ChatCompletionRequest:
      type: object
      required:
      - model
      - messages
      properties:
        model:
          type: string
          description: 'ID of the model to use. Format: `{author_id}/{model_id}` (e.g. `openai/gpt-5.2`)'
          example: openai/gpt-5.2
        messages:
          type: array
          description: A list of messages comprising the conversation so far.
          items:
            $ref: '#/components/schemas/Message'
          minItems: 1
        max_tokens:
          type: integer
          description: The maximum number of tokens that can be generated in the chat completion.
          minimum: 1
        stream:
          type: boolean
          description: If set, partial message deltas will be sent, as in OpenAI. Streamed chunks are sent as Server-Sent Events (SSE).
          default: false
        stream_options:
          type: object
          description: Options for streaming response.
          properties:
            include_usage:
              type: boolean
              description: If set, an additional `[DONE]` message will be sent with usage statistics when the stream is finished.
        tools:
          type: array
          description: A list of tools the model may call. Currently, only `function` type is supported.
          items:
            $ref: '#/components/schemas/Tool'
        tool_choice:
          oneOf:
          - type: string
            enum:
            - none
            - auto
            description: Bare-string mode. `none` forbids tool calls; `auto` lets the model decide.
          - $ref: '#/components/schemas/ToolChoiceTypedMode'
          - $ref: '#/components/schemas/ToolChoiceSpecific'
          description: 'Controls which tool (if any) the model is allowed to call. Accepts a bare string (`none` / `auto`), a typed-mode object (`{ "type": "auto" | "none" }`), or a specific function reference.'
        edgee_tool_ids:
          type: array
          items:
            type: string
          description: List of Edge Tool IDs to inject (e.g. edgee_current_time, edgee_generate_uuid). Each ID must be activated for your API key. When omitted or empty, only tools with hydration enabled for your org or API key are auto-injected. Invalid or non-activated IDs return 400 with invalid_edgee_tool_ids.
          example:
          - edgee_current_time
          - edgee_generate_uuid
        edgee_pending_id:
          type: string
          description: Pending operation ID when continuing a conversation after Edge Tool execution (e.g. when mixing client-side and Edge Tools). The gateway injects stored Edge Tool results into the message history.
        tags:
          type: array
          items:
            type: string
          description: Optional tags to categorize and label the request. Useful for filtering and grouping requests in analytics and logs. Can also be sent via the `x-edgee-tags` header as a comma-separated string.
        enable_debug:
          type: boolean
          description: When `true`, the response includes additional debug information. Equivalent to the `X-Edgee-Debug` header.
        compression_model:
          $ref: '#/components/schemas/CompressionModel'
    CompressMetadata:
      type: object
      description: Token compression metrics appended to every `/v1/compress` response.
      required:
      - technique
      - applied_strategies
      - compression_rate
      - uncompressed_input_tokens
      - compressed_input_tokens
      - compression_time_ms
      properties:
        technique:
          type: string
          enum:
          - auto
          - tool
          description: '`auto` when all applicable strategies are tried; `tool` when a specific compression model was requested via the `X-Edgee-Compression-Model` header or `compression_model` body field.'
          example: auto
        applied_strategies:
          type: array
          description: Names of the compression strategies that were applied to the request.
          items:
            type: string
          example:
          - tool_result_trimming
        compression_rate:
          type: number
          description: Fraction of input tokens removed (0.0–1.0). For example, `0.19` means 19% of input tokens were removed.
          minimum: 0
          maximum: 1
          example: 0.19
        uncompressed_input_tokens:
          type: integer
          description: Token count of the original, uncompressed input.
          minimum: 0
          example: 1000
        compressed_input_tokens:
          type: integer
          description: Token count after compression. This is what the downstream LLM provider will be billed for.
          minimum: 0
          example: 810
        compression_time_ms:
          type: integer
          description: Wall-clock time taken to perform compression, in milliseconds.
          minimum: 0
          example: 12
        error:
          type: string
          description: Human-readable error message if compression partially failed. Present only when an error occurred during compression.
        tool_stats:
          type: object
          description: Per-tool compression statistics. Present only when `tool_result_trimming` was applied.
          additionalProperties: true
    ErrorResponse:
      type: object
      required:
      - error
      description: Error response. The `error` object follows OpenAI's error envelope shape; the gateway additionally populates `type` (Anthropic-style category) and `param` when applicable.
      properties:
        error:
          type: object
          required:
          - message
          properties:
            message:
              type: string
              description: A human-readable error message.
            type:
              type: string
              enum:
              - invalid_request_error
              - authentication_error
              - permission_error
              - not_found_error
              - rate_limit_error
              - server_error
              - provider_error
              description: Anthropic-style high-level error category. Always present.
            code:
              type:
              - string
              - 'null'
              description: 'A machine-readable error code. Currently emitted values: `unauthorized`, `forbidden`, `invalid_json`, `bad_model_id`, `model_not_found`, `provider_not_supported`, `invalid_tokenizer`, `invalid_request`, `usage_limit_exceeded`, `provider_error`, `internal_error`.'
              example: bad_model_id
            param:
              type:
              - string
              - 'null'
              description: Name of the request parameter that caused the error, when applicable.
    ResponsesToolChoiceFunction:
      type: object
      description: Forces the model to call the specified function.
      required:
      - type
      - name
      properties:
        type:
          type: string
          enum:
          - function
        name:
          type: string
          description: Name of the function to call.
    ResponsesInputItem:
      description: A single item in the `input` array. Either a message turn, an assistant function call, or a function call output.
      oneOf:
      - type: object
        title: Message
        required:
        - role
        - content
        properties:
          role:
            type: string
            enum:
            - user
            - assistant
            - system
            - developer
            description: The role of the message author.
          content:
            description: Message content. Either a plain string or an array of typed content parts.
            oneOf:
            - type: string
            - type: array
              items:
                $ref: '#/components/schemas/ResponsesContentPart'
      - type: object
        title: Function call
        required:
        - type
        - call_id
        - name
        - arguments
        properties:
          type:
            type: string
            enum:
            - function_call
          call_id:
            type: string
            description: Identifier linking this call to its `function_call_output`.
            example: call_abc123
          name:
            type: string
            description: Name of the function the assistant is calling.
            example: get_weather
          arguments:
            type: string
            description: Arguments passed to the function, encoded as a JSON string.
            example: '{"location": "Paris"}'
      - type: object
        title: Function call output
        required:
        - type
        - call_id
        - output
        properties:
          type:
            type: string
            enum:
            - function_call_output
          call_id:
            type: string
            description: Identifier matching the `function_call` item this is responding to.
            example: call_abc123
          output:
            type: string
            description: Tool result, encoded as a string (typically JSON).
            example: '{"temperature": 22}'
    Message:
      type: object
      required:
      - role
      properties:
        role:
          type: string
          enum:
          - system
          - user
          - assistant
          - tool
          - developer
          description: 'The role of the message author. Required properties vary by role:

            - `system`, `user`, `developer`: requires `content`

            - `assistant`: `content` is optional (can be empty if `tool_calls` is present)

            - `tool`: requires `content` and `tool_call_id`'
        content:
          type: string
          description: The contents of the message. Required for all roles except `assistant` (where it can be empty if `tool_calls` is present). For `assistant` role, defaults to empty string if not provided.
        name:
          type: string
          description: An optional name for the participant. Provides the model information to differentiate between participants of the same role. Used for `system`, `user`, `assistant`, and `developer` roles.
        tool_call_id:
          type: string
          description: The ID of the tool call that this message is responding to. Required for `tool` role only.
        refusal:
          type: string
          description: The refusal message from the model, if any. Used for `assistant` role only.
        tool_calls:
          type: array
          description: The tool calls made by the assistant. Used for `assistant` role only.
          items:
            $ref: '#/components/schemas/ToolCall'
        cache_control:
          type: object
          description: Anthropic prompt-cache control passthrough. Applied when routing to an Anthropic-backed model. Used on `system`, `user`, and `assistant` roles only.
          additionalProperties: true
          example:
            type: ephemeral
    CreateMessageRequest:
      type: object
      required:
      - model
      - max_tokens
      - messages
      properties:
        model:
          type: string
          description: The model ID to use (Anthropic format, without provider prefix)
          example: claude-sonnet-4.5
        max_tokens:
          type: integer
          description: Maximum number of tokens to generate
          minimum: 1
          example: 1024
        messages:
          type: array
          description: Array of message objects
          items:
            $ref: '#/components/schemas/MessageParam'
          minItems: 1
        system:
          oneOf:
          - type: string
            description: System prompt as a string
          - type: array
            description: System prompt as content blocks
            items:
              $ref: '#/components/schemas/ContentBlock'
        stream:
          type: boolean
          description: Enable streaming responses
          default: false
        tools:
          type: array
          description: Tool definitions
          items:
            $ref: '#/components/schemas/AnthropicTool'
        tool_choice:
          $ref: '#/components/schemas/ToolChoice'
    FunctionCall:
      type: object
      required:
      - name
      - arguments
      properties:
        name:
          type: string
          description: The name of the function to call.
        arguments:
          type: string
          description: The arguments to call the function with, as JSON.
    ToolChoiceFunction:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          description: The name of the function to call.
    ResponsesTool:
      type: object
      description: Tool definition in the Responses API flat format. Unlike Chat Completions, there is no nested `function` key.
      required:
      - type
      - name
      properties:
        type:
          type: string
          enum:
          - function
        name:
          type: string
          description: The name of the function.
        description:
          type: string
          description: Description of what the function does, used by the model to choose when to call it.
        parameters:
          type: object
          description: JSON Schema object describing the function's parameters.
          additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Bearer authentication header of the form `Bearer <token>`, where `<token>` is your API key. More info [here](/docs/api-reference/authentication)
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Anthropic-style API key authentication using the x-api-key header