RouterPlus API

RouterPlus API as documented publicly: 27 operations. Contract generated from the documentation by API Evangelist (2026-10-29); not the provider's own document.

Operations 27

GET /api/identity/keys Metadata only, including workspace/principal bindings #
POST /api/identity/keys Metadata only, including workspace/principal bindings #
GET /api/identity/members Workspaces and principals #
POST /api/identity/members Workspaces and principals #
GET /api/identity/organizations Workspaces and principals #
GET /api/identity/principals Principal metadata #
POST /api/identity/principals Principal metadata #
GET /api/identity/workspaces Workspaces and principals #
POST /api/identity/workspaces Workspace metadata and policy pointers #
GET /api/models.json Live list of models #
POST /api/models.json POST /api/models.json #
POST /assets Upload an asset #
GET /llms.txt Machine‑readable model catalog #
POST /login Login endpoint #
GET /v1/chat/completions Use the endpoint's model id in place of a catalog model id. Everything else stays the same: both surfaces (/v1/chat/completions and /v1/messages), streaming or not, and every reque #
POST /v1/chat/completions POST /v1/chat/completions #
POST /v1/decisions POST /v1/decisions #
GET /v1/generation The full per-attempt audit for one request. #
POST /v1/images/generations POST /v1/images/generations #
GET /v1/limits GET /v1/limits #
POST /v1/messages POST /v1/messages #
GET /v1/models GET /v1/models #
POST /v1/responses POST /v1/responses #
POST /v1/route POST /v1/route #
POST /v1/signup Retired signup endpoint #
GET /v1/usage GET /v1/usage #
POST /v1/videos POST /v1/videos #

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/routerplus-com:routerplus-com-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

routerplus-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: RouterPlus API
  version: '2026-10-29'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-29: 27 operation(s) read from 7 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; RouterPlus has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 2
    documentation: 25
    pages-with-code: 5
    pages-read: 7
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-10-29'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://dev.routerplus.com/api/models.json
  - https://app.routerplus.com/docs/dedicated-endpoints
  - https://dev.routerplus.com/docs/dedicated-endpoints.md
  - https://app.routerplus.com/docs/install
  - https://app.routerplus.com/docs/identity
  - https://app.routerplus.com/docs/api-usage
  - https://app.routerplus.com/docs/migration
servers:
- url: https://api.routerplus.com
paths:
  /api/identity/keys:
    get:
      operationId: get_api_identity_keys
      tags:
      - Api
      summary: Metadata only, including workspace/principal bindings
      x-source: https://app.routerplus.com/docs/identity
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiIdentityKeysResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_identity_keys
      tags:
      - Api
      summary: Metadata only, including workspace/principal bindings
      x-source: https://app.routerplus.com/docs/identity
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiIdentityKeysRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiIdentityKeysResponse'
      x-evidence:
        kind: documentation
  /api/identity/members:
    get:
      operationId: get_api_identity_members
      tags:
      - Api
      summary: Workspaces and principals
      x-source: https://app.routerplus.com/docs/identity
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiIdentityMembersResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_identity_members
      tags:
      - Api
      summary: Workspaces and principals
      x-source: https://app.routerplus.com/docs/identity
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiIdentityMembersRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiIdentityMembersResponse'
      x-evidence:
        kind: documentation
  /api/identity/organizations:
    get:
      operationId: get_api_identity_organizations
      tags:
      - Api
      summary: Workspaces and principals
      x-source: https://app.routerplus.com/docs/identity
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiIdentityOrganizationsResponse'
      x-evidence:
        kind: documentation
  /api/identity/principals:
    get:
      operationId: get_api_identity_principals
      tags:
      - Api
      summary: Principal metadata
      x-source: https://app.routerplus.com/docs/identity
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiIdentityPrincipalsResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_identity_principals
      tags:
      - Api
      summary: Principal metadata
      x-source: https://app.routerplus.com/docs/identity
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiIdentityPrincipalsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiIdentityPrincipalsResponse'
      x-evidence:
        kind: documentation
  /api/identity/workspaces:
    get:
      operationId: get_api_identity_workspaces
      tags:
      - Api
      summary: Workspaces and principals
      x-source: https://app.routerplus.com/docs/identity
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiIdentityWorkspacesResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_identity_workspaces
      tags:
      - Api
      summary: Workspace metadata and policy pointers
      x-source: https://app.routerplus.com/docs/identity
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiIdentityWorkspacesRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiIdentityWorkspacesResponse'
      x-evidence:
        kind: documentation
  /api/models.json:
    get:
      operationId: get_api_models_json
      tags:
      - Api
      summary: Live list of models
      x-source: https://app.routerplus.com/docs/install
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_models_json
      tags:
      - Api
      summary: POST /api/models.json
      x-source: https://app.routerplus.com/docs/install
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiModelsJsonRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -s https://app.routerplus.com/api/models.json 04 Make the test call. OpenAI-compatible surface; works for every chat model,\
          \ including Claude models — the gateway translates: \n bash copy curl -N https://api.routerplus.com/v1/chat/completions  -H \"Authorization:\
          \ Bearer $TM_API_KEY\"  -H \"content-type: application/json\"  -d '{\"model\":\"claude-haiku-5-5\",\"stream\":true,\"max_tokens\":40,\"\
          messages\":[{\""
  /assets:
    post:
      operationId: post_assets
      tags:
      - Assets
      summary: Upload an asset
      x-source: https://dev.routerplus.com/api/models.json
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /llms.txt:
    get:
      operationId: get_llms_txt
      tags:
      - Llms
      summary: Machine‑readable model catalog
      x-source: https://app.routerplus.com/docs/install
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /login:
    post:
      operationId: post_login
      tags:
      - Login
      summary: Login endpoint
      x-source: https://app.routerplus.com/docs/install
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/chat/completions:
    get:
      operationId: get_v1_chat_completions
      tags:
      - Chat
      summary: 'Use the endpoint''s model id in place of a catalog model id. Everything else stays the same: both surfaces (/v1/chat/completions
        and /v1/messages), streaming or not, and every request field the model a'
      x-source: https://dev.routerplus.com/docs/dedicated-endpoints.md
      parameters:
      - name: model
        in: query
        required: true
        schema:
          type: string
        description: Endpoint identifier, e.g., acme/gemma-31b.
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1ChatCompletionsResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_v1_chat_completions
      tags:
      - Chat
      summary: POST /v1/chat/completions
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1ChatCompletionsRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl https://api.routerplus.com/v1/chat/completions  -H \"Authorization: Bearer $TM_API_KEY\"  -H \"Content-Type: application/json\"\
          \  -d '{\"model\": \"acme/gemma-31b\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}' \n Only your organization's keys\
          \ can call the endpoint. It can also be limited to named workspaces. For any other key the id does not exist: it gets the same 404 model_unavailable\
          \ as an "
  /v1/decisions:
    post:
      operationId: post_v1_decisions
      tags:
      - Decisions
      summary: POST /v1/decisions
      description: Dedicated endpoint operation listed in the documentation.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/generation:
    get:
      operationId: get_v1_generation
      tags:
      - Generation
      summary: The full per-attempt audit for one request.
      x-source: https://app.routerplus.com/docs/api-usage
      parameters:
      - name: id
        in: query
        required: true
        schema:
          type: string
        description: The request id to audit (x‑request‑id header value)
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1GenerationResponse'
      x-evidence:
        kind: documentation
  /v1/images/generations:
    post:
      operationId: post_v1_images_generations
      tags:
      - Images
      summary: POST /v1/images/generations
      description: Dedicated endpoint operation listed in the documentation.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/limits:
    get:
      operationId: get_v1_limits
      tags:
      - Limits
      summary: GET /v1/limits
      description: Returns your key's effective limits on the endpoint and a dedicated object with endpoint details, revision, model, output default,
        fallback caps and spillover settings.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      parameters:
      - name: model
        in: query
        required: false
        schema:
          type: string
        description: The endpoint model identifier in the form <your-namespace>/<name>.
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/messages:
    post:
      operationId: post_v1_messages
      tags:
      - Messages
      summary: POST /v1/messages
      description: Dedicated endpoint operation listed in the documentation.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/models:
    get:
      operationId: get_v1_models
      tags:
      - Models
      summary: GET /v1/models
      description: Lists your organization's active endpoints with details such as id, model, base URL, status, provider, price per million tokens
        and limits.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/responses:
    post:
      operationId: post_v1_responses
      tags:
      - Responses
      summary: POST /v1/responses
      description: Dedicated endpoint operation listed in the documentation.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/route:
    post:
      operationId: post_v1_route
      tags:
      - Route
      summary: POST /v1/route
      description: Edge operation that changes an endpoint's configuration on request; each change creates a new revision.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/signup:
    post:
      operationId: post_v1_signup
      tags:
      - Signup
      summary: Retired signup endpoint
      x-source: https://app.routerplus.com/docs/install
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/usage:
    get:
      operationId: get_v1_usage
      tags:
      - Usage
      summary: GET /v1/usage
      description: Dedicated endpoint operation listed in the documentation.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/videos:
    post:
      operationId: post_v1_videos
      tags:
      - Videos
      summary: POST /v1/videos
      description: Dedicated endpoint operation listed in the documentation.
      x-source: https://app.routerplus.com/docs/dedicated-endpoints
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
components:
  schemas:
    GetApiIdentityKeysResponse:
      type: object
      properties:
        keys:
          type: array
          description: list of key metadata objects
    PostApiIdentityKeysRequest:
      type: object
      properties:
        principal_id:
          type: string
        name:
          type: string
        connection_id:
          type: string
      required:
      - principal_id
      - name
    PostApiIdentityKeysResponse:
      type: object
      properties:
        key_id:
          type: string
        key:
          type: string
        copyable:
          type: boolean
    GetApiIdentityMembersResponse:
      type: object
      properties:
        members:
          type: array
          description: List of member objects
        email:
          type: string
          description: Member email
        role:
          type: string
          description: Member role
        disabled:
          type: boolean
          description: Whether the member is disabled
    PostApiIdentityMembersRequest:
      type: object
      properties:
        email:
          type: string
          description: Member email
        role:
          type: string
          description: Member role, either "admin" or "viewer"
        disabled:
          type: boolean
          description: Optional disabled flag
      required:
      - email
      - role
    PostApiIdentityMembersResponse:
      type: object
      properties:
        email:
          type: string
          description: Member email
        role:
          type: string
          description: Member role
        disabled:
          type: boolean
          description: Disabled status
    GetApiIdentityOrganizationsResponse:
      type: object
      properties:
        organizations:
          type: array
          description: List of organization objects
        org_id:
          type: string
          description: Organization UUID
        name:
          type: string
          description: Organization name
        role:
          type: string
          description: Member role in the organization
    GetApiIdentityPrincipalsResponse:
      type: object
      properties:
        principals:
          type: array
          description: list of principal objects
    PostApiIdentityPrincipalsRequest:
      type: object
      properties:
        workspace_id:
          type: string
        kind:
          type: string
          description: '"service"|"end_user"|"member"'
        subject:
          type: string
        member_email:
          type: string
      required:
      - workspace_id
      - kind
      - subject
    PostApiIdentityPrincipalsResponse:
      type: object
      properties:
        principal_id:
          type: string
    GetApiIdentityWorkspacesResponse:
      type: object
      properties:
        workspaces:
          type: array
          description: List of workspace objects
        workspace_id:
          type: string
          description: Workspace UUID
        name:
          type: string
          description: Workspace name
        disabled:
          type: boolean
          description: Whether the workspace is disabled
        route_policy_id:
          type: string
          description: Associated routing policy ID
    PostApiIdentityWorkspacesRequest:
      type: object
      properties:
        name:
          type: string
      required:
      - name
    PostApiIdentityWorkspacesResponse:
      type: object
      properties:
        workspace_id:
          type: string
    PostApiModelsJsonRequest:
      type: object
      properties:
        model:
          type: string
        stream:
          type: boolean
        max_tokens:
          type: integer
        messages:
          type: array
          items:
            type: object
            properties:
              role:
                type: string
              content:
                type: string
    GetV1ChatCompletionsResponse:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
        created:
          type: integer
        model:
          type: string
        choices:
          type: array
          description: List of completion choices.
        usage:
          type: object
          description: Token usage details.
    PostV1ChatCompletionsRequest:
      type: object
      properties:
        model:
          type: string
        messages:
          type: array
          items:
            type: object
            properties:
              role:
                type: string
              content:
                type: string
    GetV1GenerationResponse:
      type: object
      properties:
        request_id:
          type: string
          description: Echo of the queried id
        admission_events:
          type: array
          description: List of limit or balance refusals recorded before any attempt
        attempts:
          type: array
          description: Per‑attempt audit objects
        attempts[].attempt:
          type: number
          description: Physical dispatch ordinal, starting at 1
        attempts[].deployment:
          type: string
          description: Deployment that served this attempt
        attempts[].model:
          type: string
          description: Model id used for the attempt
        attempts[].outcome:
          type: string
          description: See outcome table
        attempts[].usage_provenance:
          type: string
          description: observed, unknown, or estimated
        attempts[].tokens:
          type: object
          description: Token counts for the attempt
        attempts[].tokens.input:
          type: number
          description: Input tokens (cache‑inclusive)
        attempts[].tokens.cached:
          type: number
          description: Cached reads
        attempts[].tokens.cache_write:
          type: number
          description: Cache writes
        attempts[].tokens.output:
          type: number
          description: Output tokens (or charge in micro‑dollars)
        attempts[].tokens.reasoning:
          type: number
          description: Reasoning tokens (subset of output)
        attempts[].reserved_max_usd:
          type: number
          description: Worst‑case hold taken before dispatch
        attempts[].cost_usd:
          type: number
          description: Settled cost, includes any web‑search fee
        attempts[].billing_source:
          type: string
          description: house or byok
        attempts[].inference_cost_usd:
          type: number
          description: Cost attributed from pinned rates
        attempts[].inference_price_source:
          type: string
          description: platform_list, customer_rate, unknown, or legacy_platform_list
        attempts[].price_snapshot_id:
          type: string
          description: Identifier of the pinned rate snapshot
        attempts[].fee_policy_version:
          type: string
          description: Economic policy applied to this attempt
        attempts[].error_code:
          type: string
          description: Canonical error class on failure
        attempts[].error_origin:
          type: string
          description: Where a failure came from
        attempts[].admission_context:
          type: object
          description: Limits claimed at dispatch
        attempts[].route_context:
          type: object
          description: Route plan behind this attempt
        attempts[].dropped_params:
          type: array
          description: Parameter paths dropped for this deployment
        attempts[].dispatched_at:
          type: string
          description: Dispatch timestamp
        attempts[].server_tool_use:
          type: object
          description: Web‑search and fetch calls the provider ran
        attempts[].server_tool_fee_usd:
          type: number
          description: Part of cost_usd that is web‑search fees
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Api
- name: Assets
- name: Chat
- name: Decisions
- name: Generation
- name: Images
- name: Limits
- name: Llms
- name: Login
- name: Messages
- name: Models
- name: Responses
- name: Route
- name: Signup
- name: Usage
- name: Videos