Good Faith Mark

Partner API

The registry as JSON. No key, no account, no partnership required: read it and cite it.

Every data response says when the record was exported and under what license.

Endpoints

All of them answer GET with a JSON object: data and meta. The list is generated from the same description that openapi.json serves, so it cannot name a route that does not exist.

PathReturns
/api/v1Counts, coverage and the other endpoints
/api/v1/programsEvery program, with its latest terms
/api/v1/programs/{slug}One program
/api/v1/changesThe newest 500 term changes, newest first
/api/v1/listingsPublished listings, newest first

Example

curl -s https://goodfaithmark.com/api/v1/programs/1password
{
  "data": {
    "slug": "1password",
    "name": "1Password",
    "url": "https://goodfaithmark.com/programs/1password",
    "platform": "cj",
    "category": "Security",
    "verificationTier": "unverified",
    "terms": {
      "capturedAt": "2026-09-22T19:45:15.226757+00:00",
      "commissionRate": 2,
      "commissionType": "hybrid",
      "cookieDays": null,
      "payoutThreshold": 2,
      "payoutThresholdCurrency": "USD",
      "payoutSchedule": "unknown"
    },
    "claim": null,
    "mark": null,
    "reports": null
  },
  "meta": {
    "version": 1,
    "exportedAt": "2026-10-31T15:31:06.700Z",
    "license": { "name": "CC BY 4.0", "url": "https://creativecommons.org/licenses/by/4.0/" },
    "attribution": "Good Faith Mark, goodfaithmark.com"
  }
}

Shortened. The full shape of every object is in openapi.json.

What the fields mean

Terms are what the page says
Commission, cookie window, threshold and schedule are read from the program's own affiliate page. A null means the page did not state it. Nothing is inferred from industry norms, so a blank is a fact about the page, not a gap in ours.
Changes are changes
The change feed lists only edits a program made to a value it had already published. Discoveries, where the crawler learned something new, are counted in changeCounts but not listed.
Reports are an aggregate
A program's reports object says how many affiliates reported, how many were paid on time and how late the median was. It never says who. The exported record holds no reporter identity, so the API has none to give.
The tier is not for sale
verificationTier is earned from payout reports, proof documents and, for Connected, a read-only platform connection. A claim, a mark license or a listing fee does not move it, and the API shows a claim and a mark license as separate fields, so you can see that for yourself.