Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.
openapi: 3.2.0
info:
title: Edgepedia Changes API
version: '1'
description: Read-only JSON access to the Edgepedia encyclopedia articles. Keyless. 600 requests a minute and 100,000 a day per IP address (429 with Retry-After past that). Free with credit under the Edgepedia Community License 1.0; AI training is open to everyone.
license:
name: Edgepedia Community License 1.0
url: https://www.edgechat.ai/edgepedia/license
contact:
url: https://www.edgechat.ai/developers
name: EdgeChat
email: olivia.jin@biostate.ai
x-logo:
url: https://www.edgechat.ai/assets/edgechat-chestnut-orange-logo-v2.png
altText: EdgeChat
backgroundColor: '#FFFFFF'
href: https://www.edgechat.ai/developers
x-origin:
- format: openapi
version: '3.1'
url: https://www.edgechat.ai/openapi.json
servers:
- url: https://www.edgechat.ai/api/v1
tags:
- name: Changes
paths:
/changes:
get:
operationId: getChanges
summary: The change feed since a release
description: 'The change files from `since` to the current release, in order. A line of a file: { op: added | changed | moved | removed, id, slug, from_slug, title, updated, sha256, url, markdown_url, api_url }; removed lines carry the id alone. Without since: every step. The earliest `since` is 1.5: the change feed starts at the 1.5 release.'
parameters:
- name: since
in: query
required: false
schema:
type: string
example: '1.5'
- $ref: '#/components/parameters/fields'
responses:
'200':
description: The steps
content:
application/json:
schema:
$ref: '#/components/schemas/GetChangesResponse'
examples:
live:
summary: GET https://www.edgechat.ai/api/v1/changes
description: 'A live answer of 2026-10-07: arrays cut to two items, long text cut with an ellipsis.'
value:
current: 1.5.1
steps: []
headers:
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
ETag:
$ref: '#/components/headers/ETag'
Last-Modified:
$ref: '#/components/headers/Last-Modified'
Content-Digest:
$ref: '#/components/headers/Content-Digest'
Edgepedia-Corpus-Version:
$ref: '#/components/headers/Edgepedia-Corpus-Version'
'400':
$ref: '#/components/responses/UnknownParameter'
'404':
description: An error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
tags:
- Changes
components:
headers:
RateLimit-Policy:
description: 'The limiter''s two windows, per IP address and per server instance (IETF RateLimit header fields): 600 requests a minute and 100,000 a day.'
schema:
type: string
example: '"minute";q=600;w=60, "day";q=100000;w=86400'
Content-Digest:
description: sha-256 of the body (RFC 9530).
schema:
type: string
Edgepedia-Corpus-Version:
description: The corpus release that answered.
schema:
type: string
Last-Modified:
description: The corpus release date (informational; only the ETag validates).
schema:
type: string
ETag:
description: A hash of the body; send it back as If-None-Match for a 304.
schema:
type: string
schemas:
ChangeStep:
type: object
properties:
from:
type: string
to:
type: string
file:
type: string
added:
type: integer
changed:
type: integer
moved:
type: integer
removed:
type: integer
GetChangesResponse:
type: object
properties:
since:
type: string
current:
type: string
up_to_date:
type: boolean
steps:
type: array
items:
$ref: '#/components/schemas/ChangeStep'
totals:
type: object
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
hint:
type: string
next:
type: string
format: uri
did_you_mean:
type: array
items:
type: object
properties:
id:
type: string
slug:
type: string
title:
type: string
api_url:
type: string
required:
- code
- message
required:
- error
responses:
UnknownParameter:
description: '`unknown_parameter`: the request carries a query parameter this route does not read (or one given twice). Each route reads only the parameters listed for it.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
fields:
name: fields
in: query
required: false
description: 'Comma-separated keys: each result (or the answer, when it has no results) keeps only these.'
schema:
type: string