Legacy documentation. These pages are inherited from the upstream OpenAffiliate project and may describe endpoints, packages and repositories that Afftera does not operate. For what this site publishes today, see About.

References

REST API

Query the registry with simple HTTP requests. No auth required.

Endpoints

GET
/api/programs

List published programs (?q=, ?category=, ?type=, ?sort=, ?limit=, ?offset=)

GET
/api/programs/{slug}

Get one program by slug, or 404

GET
/api/categories

List categories of the published set with program counts

All three answer without authentication, send Access-Control-Allow-Origin: * and are cached for an hour at the edge. They serve only the records cleared for publication, which is a smaller set than the registry behind the site.

Query parameters

ParameterAcceptsBehaviour
qany textCase-insensitive substring of the name, short description, a tag or the category.
categorya category nameExact match. The current names come from /api/categories.
typerecurring, one-time, tieredExact match on the commission type.
sortrelevance, az, za, commission_desc, newestDefaults to relevance. An unrecognised value falls back to relevance rather than erroring.
limit1 to 500Omit to get every match. Anything above 500 is capped at 500.
offseta whole numberSkips that many matches. Defaults to 0.

There is no verified filter, and no verified field in the response. It is upstream data-quality metadata, not publication clearance and not a merchant endorsement, so the public payload leaves it out.

List programs

curl
curl "https://afftera.com/api/programs?q=ai&type=recurring&limit=1"

total counts every match, before limit and offset are applied, and filters echoes back what the route understood. Each program object carries the whole record; the sample keeps a few fields for length.

response
{
  "programs": [
    {
      "slug": "murf-ai",
      "name": "Murf AI",
      "url": "https://murf.ai",
      "category": "AI",
      "commission": {
        "type": "recurring",
        "rate": "20%",
        "mode": "percentage",
        "value": 20,
        "duration": "24 months",
        "conditions": "20% recurring commission for 24 months per referral"
      },
      "cookieDays": 90,
      "network": "partnerstack",
      "signupUrl": "https://murf.ai/partner-with-us/affiliate",
      "lastVerifiedAt": "2026-08-14"
    }
  ],
  "total": 1,
  "filters": { "q": "ai", "category": null, "type": "recurring", "sort": "relevance" }
}

Get one program

curl
curl "https://afftera.com/api/programs/murf-ai"

This one returns the program object on its own, not wrapped in an envelope. A slug that is not published answers 404 with { "error": "Program not found" }.

List categories

curl
curl "https://afftera.com/api/categories"
response
{
  "categories": [
    { "name": "AI", "count": 4 },
    { "name": "Productivity", "count": 1 }
  ],
  "total": 2
}

total is the number of categories, not of programs, and a category only appears while something published sits in it.