References
REST API
Query the registry with simple HTTP requests. No auth required.
Endpoints
/api/programsList published programs (?q=, ?category=, ?type=, ?sort=, ?limit=, ?offset=)
/api/programs/{slug}Get one program by slug, or 404
/api/categoriesList 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
| Parameter | Accepts | Behaviour |
|---|---|---|
| q | any text | Case-insensitive substring of the name, short description, a tag or the category. |
| category | a category name | Exact match. The current names come from /api/categories. |
| type | recurring, one-time, tiered | Exact match on the commission type. |
| sort | relevance, az, za, commission_desc, newest | Defaults to relevance. An unrecognised value falls back to relevance rather than erroring. |
| limit | 1 to 500 | Omit to get every match. Anything above 500 is capped at 500. |
| offset | a whole number | Skips 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 "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.
{
"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 "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 "https://afftera.com/api/categories"{
"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.