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

All 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_xxxxxxxxxxxxxxxxxxxxxxxx
Example request
curl https://www.termdrift.com/api/v1/diffs \
  -H "Authorization: Bearer td_live_xxxxxxxxxxxxxxxxxxxxxxxx"
API keys require a Business or Enterprise plan. Keys belonging to any other plan are rejected with 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" }
StatusMeaning
200Success.
401Missing or invalid API key.
403The key’s organisation is not on a Business or Enterprise plan.
404The requested change does not exist or is not visible to your organisation.
429Rate limit exceeded — back off and retry.

List changes

GET/api/v1/diffs

Returns detected changes across all documents your organisation subscribes to, newest first.

Query paramTypeDescription
risk_levelstringFilter by AI risk level — one of formatting, low, medium, high, critical.
clausestringFilter to changes touching a contract area (see Reference values).
limitintegerMax results to return. Default 50, maximum 200.
skipintegerNumber of results to skip, for pagination. Default 0.
Request
curl "https://www.termdrift.com/api/v1/diffs?risk_level=high&limit=20" \
  -H "Authorization: Bearer td_live_xxxxxxxxxxxxxxxxxxxxxxxx"
Response
{
  "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

GET/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.

Request
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

GET/api/v1/subscriptions

Returns the documents your organisation is actively monitoring.

Response
{
  "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

GET/api/v1/vendors

Returns 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.

Response
{
  "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:

FieldTypeDescription
idstringUnique identifier for the change.
canonical_url_idstringIdentifier of the monitored document.
urlstringThe document URL.
labelstringHuman-readable name of the document.
detected_atstring (ISO 8601)When the change was detected.
magnitudestringSize of the change: low (<3%), medium (<10%), or high (≥10% of characters).
char_changesintegerNumber of characters added, removed, or replaced.
ai_summarystring | nullPlain-English summary of what changed.
ai_risk_levelstring | nullAI-assessed risk (see Reference values).
ai_change_directionstring | nullWhether the change favours the customer (see Reference values).
ai_clausesstring[]Contract areas the change touches (see Reference values).
effective_datestring | nullThe document’s stated effective date, when present.
effective_date_futurebooleanTrue when the change was published before it takes effect.
review_urlstringLink to review the change in the TermDrift dashboard.
AI fields (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

ValueMeaning
formattingCosmetic / whitespace only — no change in meaning.
lowMinor wording with little practical impact.
mediumA substantive change worth reviewing.
highA material change likely to affect your obligations or rights.
criticalA severe change demanding immediate attention.

Change directions

ValueMeaning
positiveThe change is favourable to the customer.
neutralNo clear advantage to either party (always used for formatting changes).
negativeThe 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.

KeyLabel
data_sharingData sharing
ai_trainingAI model training
ai_usageAI features & usage
privacy_consentPrivacy & consent
liabilityLiability
terminationTermination
pricing_slaPricing & SLA
arbitrationArbitration & disputes
ip_rightsIP rights
governing_lawGoverning law
securitySecurity
otherOther

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>.atom
The feed URL contains a signed token that grants read access to your change metadata — treat it like a secret. It does not expire; contact support to rotate it if it leaks.

Vendor 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.atom

Each 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.