Eden AI Anthropic Messages API

The Anthropic Messages API from Eden AI — 2 operation(s) for anthropic messages.

Operations 2

POST /v3/v1/messages Create Anthropic Message #
POST /v3/v1/messages/count_tokens Count Anthropic Tokens #

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/eden-ai-anthropic-messages-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

eden-ai-anthropic-messages-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Eden AI API V3 Anthropic Messages API
  version: 3.0.0
servers:
- url: https://api.edenai.run
  description: Production server
tags:
- name: Anthropic Messages
paths:
  /v3/v1/messages:
    post:
      tags:
      - Anthropic Messages
      summary: Create Anthropic Message
      description: Anthropic Messages API — native pass-through via litellm.
      operationId: create_anthropic_message_v3_v1_messages_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AnthropicMessagesBody'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnthropicMessagesResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - AuthBearer: []
  /v3/v1/messages/count_tokens:
    post:
      tags:
      - Anthropic Messages
      summary: Count Anthropic Tokens
      description: Count input tokens for an Anthropic-format request without running the model.
      operationId: count_anthropic_tokens_v3_v1_messages_count_tokens_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AnthropicCountTokensBody'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnthropicCountTokensResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - AuthBearer: []
components:
  schemas:
    AnthropicUsage:
      properties:
        input_tokens:
          type: integer
          title: Input Tokens
          description: Number of input tokens consumed.
        output_tokens:
          type: integer
          title: Output Tokens
          description: Number of output tokens generated.
        cache_creation_input_tokens:
          anyOf:
          - type: integer
          - type: 'null'
          title: Cache Creation Input Tokens
          description: Tokens written to the prompt cache (when prompt caching is used).
        cache_read_input_tokens:
          anyOf:
          - type: integer
          - type: 'null'
          title: Cache Read Input Tokens
          description: Tokens read from the prompt cache (when prompt caching is used).
      additionalProperties: true
      type: object
      required:
      - input_tokens
      - output_tokens
      title: AnthropicUsage
      description: Token usage block returned by the Anthropic Messages API.
    CacheControl:
      properties:
        type:
          type: string
          const: ephemeral
          title: Type
          description: Cache type. Currently only 'ephemeral' is supported.
        ttl:
          anyOf:
          - type: string
          - type: 'null'
          title: Ttl
          description: Optional cache time-to-live, e.g. '3600s'. Provider-dependent.
      type: object
      required:
      - type
      title: CacheControl
      description: 'Prompt-cache marker.


        Marks a message (or content part) as a cache boundary so that the prefix

        up to that point is stored and reused on subsequent requests, reducing

        latency and cost. Only a single contiguous cache-marked block is stored

        per request, and providers enforce a minimum token count below which

        caching is silently skipped. Silently ignored by providers that don''t

        support prompt caching.'
    AnthropicMessage:
      properties:
        role:
          type: string
          enum:
          - user
          - assistant
          - system
          title: Role
        content:
          anyOf:
          - type: string
          - items:
              $ref: '#/components/schemas/AnthropicContentBlock'
            type: array
          title: Content
        cache_control:
          anyOf:
          - $ref: '#/components/schemas/CacheControl'
          - type: 'null'
          description: 'Optional prompt-cache marker. When set, this message becomes a cache boundary: prefix content is stored and reused on subsequent requests to reduce latency and cost. Silently ignored by providers that don''t support prompt caching.'
      additionalProperties: true
      type: object
      required:
      - role
      - content
      title: AnthropicMessage
    AnthropicCountTokensBody:
      properties:
        model:
          type: string
          title: Model
        messages:
          items:
            $ref: '#/components/schemas/AnthropicMessage'
          type: array
          title: Messages
        system:
          anyOf:
          - type: string
          - items:
              additionalProperties: true
              type: object
            type: array
          - type: 'null'
          title: System
        tools:
          anyOf:
          - items:
              additionalProperties: true
              type: object
            type: array
          - type: 'null'
          title: Tools
        tool_choice:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Tool Choice
      additionalProperties: true
      type: object
      required:
      - model
      - messages
      title: AnthropicCountTokensBody
      description: Body for /v1/messages/count_tokens — same fields as messages but max_tokens is optional.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    AnthropicMessagesBody:
      properties:
        routing:
          anyOf:
          - $ref: '#/components/schemas/ProviderRoutingPreferences'
          - type: 'null'
          description: 'How to pick between the providers that serve the requested model. Applies when `model` is a model name with no provider prefix (e.g. ''gpt-5.5''); ignored for a concrete ''provider/model'' id, which already names its provider. With model=''@edenai'' the platform chooses the model too: `quality_cost` steers that choice, and the provider fields apply whenever the chosen model is a provider-less name.'
        fallbacks:
          anyOf:
          - items:
              type: string
            type: array
            maxItems: 3
          - type: 'null'
          title: Fallbacks
          description: 'List of fallback model IDs to try if the primary model fails. Models are tried in order. Example: [''anthropic/claude-3-opus'', ''openai/gpt-4o'']'
        session_id:
          anyOf:
          - type: string
            maxLength: 256
          - type: 'null'
          title: Session Id
          description: Identifies a conversation, so its requests keep reaching the provider that holds its prompt cache. Any stable string you choose — a thread id, a ticket number, an agent run. Also accepted as the `x-session-id` header, for clients that cannot add body fields; the body field wins if both are sent. Without one, a conversation is recognised from its opening messages instead.
        router_candidates:
          anyOf:
          - items:
              type: string
              maxLength: 128
            type: array
            maxItems: 64
          - type: 'null'
          title: Router Candidates
          description: Models the '@edenai' router may choose BETWEEN — it picks the model, whereas `routing` picks the provider for a model you already named. Used only when model='@edenai'. Each entry is a bare model name (e.g. 'gpt-5.5' — the winner's provider is then picked like any provider-less request) or a 'provider/model' id (e.g. 'openai/gpt-5-nano' — the winner is served by that exact provider). Entries the router cannot rank are skipped and listed under `edenai_metadata.routing.auto.dropped`; entries naming a model already in the list collapse into its earliest spelling, which decides how the winner is returned. The request fails only when no entry is left. If not provided, the router chooses from a default pool of eligible catalog models. At most 64 entries of up to 128 characters each.
        model:
          type: string
          title: Model
        messages:
          items:
            $ref: '#/components/schemas/AnthropicMessage'
          type: array
          title: Messages
        max_tokens:
          anyOf:
          - type: integer
            minimum: 0.0
          - type: 'null'
          title: Max Tokens
          default: 1024
        system:
          anyOf:
          - type: string
          - items:
              additionalProperties: true
              type: object
            type: array
          - type: 'null'
          title: System
        temperature:
          anyOf:
          - type: number
            maximum: 2.0
            minimum: 0.0
          - type: 'null'
          title: Temperature
        top_p:
          anyOf:
          - type: number
            maximum: 1.0
            minimum: 0.0
          - type: 'null'
          title: Top P
        top_k:
          anyOf:
          - type: integer
          - type: 'null'
          title: Top K
        stream:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Stream
          default: false
        stop_sequences:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Stop Sequences
        tools:
          anyOf:
          - items:
              additionalProperties: true
              type: object
            type: array
          - type: 'null'
          title: Tools
        tool_choice:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Tool Choice
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Metadata
        thinking:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Thinking
        extra_headers:
          anyOf:
          - additionalProperties:
              type: string
            type: object
          - type: 'null'
          title: Extra Headers
      additionalProperties: true
      type: object
      required:
      - model
      - messages
      title: AnthropicMessagesBody
    ProviderRoutingPreferences:
      properties:
        sort:
          anyOf:
          - type: string
            enum:
            - cost
            - speed
            - latency
            - exact
          - type: 'null'
          title: Sort
          description: What to optimise for when several providers serve the requested model. 'cost' (default) picks the cheapest for this request's shape; 'speed' the highest tokens/second; 'latency' the fastest to first token; 'exact' the most reliable at producing well-formed tool calls / structured output. Health is always a filter first — no mode will route you to a failing provider. Can also be written as a model suffix, e.g. 'gpt-5.5:speed'.
        sticky:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Sticky
          description: Keep a conversation on the provider holding its prompt cache. On by default, and only ever active for models whose providers discount cache reads. Set false to route every request independently on price instead. Naming an explicit `sort` also takes priority over cache affinity.
        allow_fallbacks:
          type: boolean
          title: Allow Fallbacks
          description: 'Whether other providers of the same model may be tried when the chosen one fails. Set false to pin the request to the single best provider: it then fails rather than silently moving to another seller. useful when a cache-warm prompt would cold-miss elsewhere. This governs PROVIDERS of the requested model only; models you list in `fallbacks` are your own choice and are always kept.'
          default: true
        quality_cost:
          anyOf:
          - type: integer
            maximum: 10.0
            minimum: 0.0
          - type: 'null'
          title: Quality Cost
          description: 'Only with model=''@edenai'': how far to trade answer quality for cost when the platform chooses the MODEL. 0 asks for the best model for the request, 10 for the cheapest model that can still handle it, values in between blend the two; omit it to leave the choice to the platform (quality first). This is the one `routing` field that steers the model rather than the provider — `sort` never changes which model is chosen.'
        allowed_providers:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Allowed Providers
          description: Restrict routing to these providers, e.g. ['openai', 'anthropic']. Only providers that serve the requested model are considered, so an entry that does not sell it is simply inert. If none of them do, the request fails rather than falling back to a provider you excluded. Case-insensitive. Applies to routed providers only. a concrete 'provider/model' you named in `fallbacks` is your own choice and is kept.
      type: object
      title: ProviderRoutingPreferences
      description: 'How to choose between SELLERS of one model — and, with ``@edenai``, how far to trade

        quality for cost when the platform chooses the model.


        The seller fields are only meaningful when `model` is a canonical name (`gpt-5.5`) rather than a concrete

        `provider/model` — with a concrete id there is nothing to choose between. For choosing the

        MODEL itself see ``router_candidates`` and ``model="@edenai"``, which is a different router;

        ``quality_cost`` below is the one field here that speaks to it.'
    AnthropicMessagesResponse:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the message.
        type:
          type: string
          const: message
          title: Type
          description: Object type. Always 'message' for this endpoint.
          default: message
        role:
          type: string
          const: assistant
          title: Role
          description: Conversational role of the response.
          default: assistant
        model:
          type: string
          title: Model
          description: Model that generated the message.
        content:
          items:
            $ref: '#/components/schemas/AnthropicContentBlock'
          type: array
          title: Content
          description: Ordered list of content blocks produced by the model.
        stop_reason:
          anyOf:
          - type: string
            enum:
            - end_turn
            - max_tokens
            - stop_sequence
            - tool_use
          - type: 'null'
          title: Stop Reason
          description: Reason generation stopped, if known.
        stop_sequence:
          anyOf:
          - type: string
          - type: 'null'
          title: Stop Sequence
          description: Custom stop sequence that triggered the stop, if any.
        usage:
          $ref: '#/components/schemas/AnthropicUsage'
          description: Token usage for the request.
      additionalProperties: true
      type: object
      required:
      - id
      - model
      - content
      - usage
      title: AnthropicMessagesResponse
      description: Response body for POST /v1/messages (non-streaming).
    AnthropicCountTokensResponse:
      properties:
        input_tokens:
          type: integer
          title: Input Tokens
          description: Number of input tokens the request would consume.
      type: object
      required:
      - input_tokens
      title: AnthropicCountTokensResponse
      description: Response body for POST /v1/messages/count_tokens.
    AnthropicContentBlock:
      properties:
        type:
          type: string
          title: Type
        text:
          anyOf:
          - type: string
          - type: 'null'
          title: Text
        id:
          anyOf:
          - type: string
          - type: 'null'
          title: Id
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
        input:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Input
        tool_use_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Tool Use Id
        content:
          anyOf:
          - type: string
          - items: {}
            type: array
          - type: 'null'
          title: Content
        is_error:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Error
        source:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Source
        thinking:
          anyOf:
          - type: string
          - type: 'null'
          title: Thinking
        signature:
          anyOf:
          - type: string
          - type: 'null'
          title: Signature
      additionalProperties: true
      type: object
      required:
      - type
      title: AnthropicContentBlock
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
  securitySchemes:
    AuthBearer:
      type: http
      scheme: bearer