Developers
API & Feeds
Pull your detected changes, subscriptions, and vendor data into your own GRC, legal, and compliance tooling — via a JSON REST API or Atom feeds. Available on the Business and Enterprise plans.
Overview
The TermDrift API is organised around the changes (“diffs”) detected across the documents your organisation subscribes to. All responses are JSON, all requests are authenticated with an API key, and every endpoint is scoped to your organisation — you only ever see your own data.
Base URL
https://www.termdrift.com/api/v1All endpoints are read-only (GET). The API never exposes another organisation’s data, and it returns only changes that have passed review (anomalies and dismissed diffs are excluded).
Authentication
Create an API key as an organisation admin under Organisation → API & Feeds. The full key is shown once, at creation — store it securely; it cannot be retrieved again. Keys look like td_live_… and can be revoked at any time.
Send your key on every request with either header:
# Recommended — Bearer token
Authorization: Bearer td_live_xxxxxxxxxxxxxxxxxxxxxxxx
# Or the X-API-Key header
X-API-Key: td_live_xxxxxxxxxxxxxxxxxxxxxxxxcurl https://www.termdrift.com/api/v1/diffs \
-H "Authorization: Bearer td_live_xxxxxxxxxxxxxxxxxxxxxxxx"403, even if the key itself is valid.Rate limits & errors
Each endpoint is rate-limited to 120 requests per minute. Exceeding it returns 429 Too Many Requests.
Errors return a JSON body with a detail field:
{ "detail": "Invalid API key" }| Status | Meaning |
|---|---|
| 200 | Success. |
| 401 | Missing or invalid API key. |
| 403 | The key’s organisation is not on a Business or Enterprise plan. |
| 404 | The requested change does not exist or is not visible to your organisation. |
| 429 | Rate limit exceeded — back off and retry. |
List changes
/api/v1/diffsReturns detected changes across all documents your organisation subscribes to, newest first.
| Query param | Type | Description |
|---|---|---|
| risk_level | string | Filter by AI risk level — one of formatting, low, medium, high, critical. |
| clause | string | Filter to changes touching a contract area (see Reference values). |
| limit | integer | Max results to return. Default 50, maximum 200. |
| skip | integer | Number of results to skip, for pagination. Default 0. |
curl "https://www.termdrift.com/api/v1/diffs?risk_level=high&limit=20" \
-H "Authorization: Bearer td_live_xxxxxxxxxxxxxxxxxxxxxxxx"{
"count": 1,
"results": [
{
"id": "665f1c9a4b2e8a0012ab34cd",
"canonical_url_id": "660a1b2c3d4e5f0011223344",
"url": "https://aws.amazon.com/service-terms/",
"label": "AWS Service Terms",
"detected_at": "2026-05-28T09:14:22+00:00",
"magnitude": "medium",
"char_changes": 1842,
"ai_summary": "Expanded the data-processing section to permit use of customer content for model training unless the customer opts out.",
"ai_risk_level": "high",
"ai_change_direction": "negative",
"ai_clauses": ["ai_training", "data_sharing"],
"effective_date": "2026-06-15T00:00:00+00:00",
"effective_date_future": true,
"review_url": "https://www.termdrift.com/dashboard/diffs/665f1c9a4b2e8a0012ab34cd"
}
]
}Get a change
/api/v1/diffs/{id}Returns a single change by its ID. Responds with 404 if the change does not exist, has not passed review, or belongs to a document your organisation does not subscribe to.
curl https://www.termdrift.com/api/v1/diffs/665f1c9a4b2e8a0012ab34cd \
-H "Authorization: Bearer td_live_xxxxxxxxxxxxxxxxxxxxxxxx"The response is a single change object (see The change object).
List subscriptions
/api/v1/subscriptionsReturns the documents your organisation is actively monitoring.
{
"count": 1,
"results": [
{
"id": "670b2c3d4e5f60011223abcd",
"canonical_url_id": "660a1b2c3d4e5f0011223344",
"url": "https://aws.amazon.com/service-terms/",
"label": "AWS Service Terms",
"min_notify_risk_level": "medium",
"notify_clauses": ["ai_training", "data_sharing"]
}
]
}min_notify_risk_level is the threshold below which this subscription is not notified. notify_clauses restricts notifications to specific contract areas — an empty list means all areas.
List vendors
/api/v1/vendorsReturns the full catalogue of vendors known to TermDrift (not just the ones you subscribe to), useful for resolving a slug for the vendor Atom feed.
{
"results": [
{
"name": "Amazon Web Services",
"slug": "amazon-web-services",
"primary_url": "https://aws.amazon.com",
"description": "Cloud infrastructure and platform services."
}
]
}The change object
Every change returned by the API has the following shape:
| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier for the change. |
| canonical_url_id | string | Identifier of the monitored document. |
| url | string | The document URL. |
| label | string | Human-readable name of the document. |
| detected_at | string (ISO 8601) | When the change was detected. |
| magnitude | string | Size of the change: low (<3%), medium (<10%), or high (≥10% of characters). |
| char_changes | integer | Number of characters added, removed, or replaced. |
| ai_summary | string | null | Plain-English summary of what changed. |
| ai_risk_level | string | null | AI-assessed risk (see Reference values). |
| ai_change_direction | string | null | Whether the change favours the customer (see Reference values). |
| ai_clauses | string[] | Contract areas the change touches (see Reference values). |
| effective_date | string | null | The document’s stated effective date, when present. |
| effective_date_future | boolean | True when the change was published before it takes effect. |
| review_url | string | Link to review the change in the TermDrift dashboard. |
ai_summary, ai_risk_level, ai_change_direction) are null when assessment has not run or is not configured. The summary and risk are automated outputs — review the review_url before acting on them.Reference values
Risk levels
| Value | Meaning |
|---|---|
| formatting | Cosmetic / whitespace only — no change in meaning. |
| low | Minor wording with little practical impact. |
| medium | A substantive change worth reviewing. |
| high | A material change likely to affect your obligations or rights. |
| critical | A severe change demanding immediate attention. |
Change directions
| Value | Meaning |
|---|---|
| positive | The change is favourable to the customer. |
| neutral | No clear advantage to either party (always used for formatting changes). |
| negative | The change is unfavourable to the customer. Medium+ neutral changes are coerced to negative as the safer assumption. |
Contract areas (clauses)
Used in ai_clauses and the clause filter. The live list is also available from GET /clause-types.
| Key | Label |
|---|---|
| data_sharing | Data sharing |
| ai_training | AI model training |
| ai_usage | AI features & usage |
| privacy_consent | Privacy & consent |
| liability | Liability |
| termination | Termination |
| pricing_sla | Pricing & SLA |
| arbitration | Arbitration & disputes |
| ip_rights | IP rights |
| governing_law | Governing law |
| security | Security |
| other | Other |
Atom feeds
Prefer a feed reader over polling the API? TermDrift publishes Atom feeds you can add to any reader, Slack RSS app, or feed-to-anything automation.
Your organisation feed
A private feed of the most recent 50 changes across everything your organisation subscribes to. Find your feed URL under Organisation → API & Feeds. It looks like:
https://www.termdrift.com/feeds/<signed-token>.atomVendor feeds
When enabled, TermDrift offers a public per-vendor feed of changes across that vendor’s monitored documents — no authentication required. Use the vendor slug from GET /vendors:
https://www.termdrift.com/feeds/vendor/amazon-web-services.atomEach entry is titled [risk] Document name and links back to the change in TermDrift.
Need a higher rate limit, additional endpoints, or help integrating? Email support@termdrift.com.