ELM — Edinburgh Language Models API

OpenAI-compatible generative-AI gateway built and run by EDINA at the University of Edinburgh, described by its own metadata as delivering generative AI to UK tertiary education. /api/v1/models and /api/v1/chat/completions both answer 401 with an OpenAI-shaped error envelope without a bearer token, which is what establishes the routes and the auth scheme; /health returns 200. No public self-service registration and no published OpenAPI (/openapi.json returns the SPA shell). This is the clearest case in the profile of Edinburgh acting as an API producer rather than a buyer.

Operations 2

GET /models List the models available to the caller #
POST /chat/completions Create a chat completion #

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/elm-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

university-of-edinburgh-elm-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Edinburgh Language Models ELM API
  description: 'ELM is the University of Edinburgh''s own generative-AI access platform, described by its own metadata as "an online platform that delivers generative AI to UK tertiary education." It exposes an OpenAI-compatible HTTP API at https://elm.edina.ac.uk/api/v1 secured with a bearer token.

    This document was reconstructed by PROBING the live service on 2026-08-19. Only what was actually observed is described. Anonymous calls to /api/v1/models and /api/v1/chat/completions both returned HTTP 401 with an OpenAI-shaped error envelope, which is what establishes both the route and the auth scheme. The request and response bodies of the authenticated paths are NOT described here, because they were not observed — the platform publishes no OpenAPI document (/openapi.json and /docs both return the Angular SPA shell, a soft-200).

    Operator note: this is one of the few genuinely institution-ENGINEERED API surfaces in the University of Edinburgh''s public footprint. edina.ac.uk is registered to the EDINA National Data Centre with Domain Owner "University of Edinburgh", and EDINA is a University of Edinburgh centre. Edinburgh is acting as a producer here, not a buyer.'
  version: '1'
  contact:
    name: EDINA, University of Edinburgh
    url: https://information-services.ed.ac.uk/computing/comms-and-collab/elm
  x-operator: institution
  x-operator-evidence: 'edina.ac.uk Domain Owner: University of Edinburgh (Nominet whois); Registered For: EDINA National Data Centre'
  x-access: gated
  x-provenance:
    method: probed
    generated: '2026-08-19'
    source: https://elm.edina.ac.uk/api/v1/models
servers:
- url: https://elm.edina.ac.uk/api/v1
  description: ELM OpenAI-compatible API (probed — 401 without a bearer token)
- url: https://elm.edina.ac.uk
  description: ELM platform root, for the unauthenticated health check
tags:
- name: ELM
  description: Edinburgh Language Models generative-AI gateway
paths:
  /models:
    get:
      tags:
      - ELM
      operationId: listModels
      summary: List the models available to the caller
      description: OpenAI-compatible model listing. Observed 401 without a bearer token; the authenticated response body was not observed and is deliberately not described.
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Model list. NOT OBSERVED — no authenticated probe was made, so no schema is asserted here. Expect the OpenAI /v1/models shape by convention only.
        '401':
          description: Missing or invalid Authorization header (observed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: 401
                  type: invalid_request_error
                  message: Missing or invalid Authorization header
  /chat/completions:
    post:
      tags:
      - ELM
      operationId: createChatCompletion
      summary: Create a chat completion
      description: OpenAI-compatible chat completion endpoint. Observed 401 without a bearer token when posted a minimal JSON body. Request and response schemas are not asserted because they were not observed.
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Shape not observed. OpenAI chat-completion convention (model, messages) is assumed by the platform's compatibility claim, not verified here.
      responses:
        '200':
          description: Chat completion. NOT OBSERVED — no schema asserted.
        '401':
          description: Missing or invalid Authorization header (observed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      description: OpenAI-compatible error envelope (observed verbatim)
      properties:
        error:
          type: object
          properties:
            code:
              type: integer
              example: 401
            type:
              type: string
              example: invalid_request_error
            message:
              type: string
              example: Missing or invalid Authorization header
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token issued to University of Edinburgh accounts. There is no public self-service registration; /api redirects (302) to https://elm.edina.ac.uk/login.