Referenz
Die folgenden Tabellen entstehen aus denselben Schemata, die die Routen tatsächlich erzwingen. Sie können nichts anderes beschreiben als das gegenwärtige Verhalten.
GET /v1/programs
Das öffentliche Verzeichnis, absteigend nach Attraktivitätsscore. Für jeden Schlüssel dieselben Zeilen.
Returns published affiliate programmes, most attractive first. The directory is public data: every key sees the same rows. Results are cursor-paginated.
Parameter
| Name | Ort | Typ | Pflicht | Beschreibung |
|---|---|---|---|---|
vertical | Query | saas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autre | nein | Restrict to one industry. |
model | Query | cps | cpa | cpl | recurring | hybrid | nein | Restrict to one payout model. |
market | Query | string | nein | ISO 3166-1 alpha-2 country code, case-insensitive. |
recurring | Query | true | false | nein | Keep only programs whose commission repeats, or only those that do not. |
minScore | Query | integer (0–100) | nein | Minimum attractiveness score. |
limit | Query | integer (1–100) · Standard 25 | nein | Items per page, 1-100. |
cursor | Query | string | nein | Opaque cursor returned as `page.nextCursor` by the previous call. |
Anfrage
curl -s 'https://getaff.org/api/v1/programs?vertical=saas&minScore=60&limit=2' \
-H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'Antwort
{
"data": [
{
"slug": "northstack-northstack",
"name": "NorthStack",
"host": "northstack.io",
"site": "https://northstack.io",
"pitch": "Managed Postgres for teams that ship on Fridays. Free tier, usage billing.",
"vertical": "saas",
"model": "recurring",
"commission": "25% recurring",
"recurring": true,
"cookieDays": 90,
"payout": "monthly",
"minPayout": 50,
"markets": [
"FR",
"BE",
"CH",
"DE"
],
"platform": "in-house",
"signupUrl": "https://northstack.io/partners",
"score": 78,
"image": "",
"createdAt": "2026-03-11T09:24:00.000Z"
}
],
"page": {
"limit": 2,
"hasMore": true,
"nextCursor": "Wzc4LCJ2SzlxIl0"
}
}Felder der Antwort
| Name | Typ | Beschreibung |
|---|---|---|
data | Programme[] | |
data[].slug | string | Stable identifier used in the directory URL. |
data[].name | string | |
data[].host | string | Advertiser domain, without scheme. |
data[].site | string | Advertiser website. |
data[].pitch | string | One-paragraph description written by the advertiser. |
data[].vertical | saas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autre | |
data[].model | cps | cpa | cpl | recurring | hybrid | Payout model. |
data[].commission | string | Commission as advertised, free text (e.g. "30%", "50 EUR"). |
data[].recurring | boolean | True when the commission repeats on renewals. |
data[].cookieDays | integer | Attribution window, in days. |
data[].payout | weekly | biweekly | monthly | net30 | net60 | Payment cadence. |
data[].minPayout | number | Minimum balance before payment, in the advertiser currency. |
data[].markets | string[] | ISO 3166-1 alpha-2 country codes. |
data[].platform | string | Affiliate platform hosting the program. Empty when in-house. |
data[].signupUrl | string | Where an affiliate applies. |
data[].score | integer | GetAff attractiveness score, 0-100. See /docs for how it is computed. |
data[].image | string | Illustration URL. Empty when none is available. |
data[].createdAt | string | ISO 8601 timestamp of publication. |
page | PageInfo | |
page.limit | integer | Number of items requested for this page. |
page.hasMore | boolean | True when a further page exists. |
page.nextCursor | string | null | Opaque cursor. Pass it back as `cursor` to fetch the next page. Do not parse it. |
Mögliche Fehler
400401429503
GET /v1/programs/{slug}
Ein veröffentlichtes Programm, über seine URL-Kennung.
Returns a single published programme by slug. Unpublished and rejected submissions are not reachable through this endpoint.
Parameter
| Name | Ort | Typ | Pflicht | Beschreibung |
|---|---|---|---|---|
slug | Pfad | string | ja | Program slug, as returned by GET /v1/programs. |
Anfrage
curl -s 'https://getaff.org/api/v1/programs/northstack-northstack' \
-H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'Antwort
{
"data": {
"slug": "northstack-northstack",
"name": "NorthStack",
"host": "northstack.io",
"site": "https://northstack.io",
"pitch": "Managed Postgres for teams that ship on Fridays. Free tier, usage billing.",
"vertical": "saas",
"model": "recurring",
"commission": "25% recurring",
"recurring": true,
"cookieDays": 90,
"payout": "monthly",
"minPayout": 50,
"markets": [
"FR",
"BE",
"CH",
"DE"
],
"platform": "in-house",
"signupUrl": "https://northstack.io/partners",
"score": 78,
"image": "",
"createdAt": "2026-03-11T09:24:00.000Z"
}
}Felder der Antwort
| Name | Typ | Beschreibung |
|---|---|---|
data | Programme | |
data.slug | string | Stable identifier used in the directory URL. |
data.name | string | |
data.host | string | Advertiser domain, without scheme. |
data.site | string | Advertiser website. |
data.pitch | string | One-paragraph description written by the advertiser. |
data.vertical | saas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autre | |
data.model | cps | cpa | cpl | recurring | hybrid | Payout model. |
data.commission | string | Commission as advertised, free text (e.g. "30%", "50 EUR"). |
data.recurring | boolean | True when the commission repeats on renewals. |
data.cookieDays | integer | Attribution window, in days. |
data.payout | weekly | biweekly | monthly | net30 | net60 | Payment cadence. |
data.minPayout | number | Minimum balance before payment, in the advertiser currency. |
data.markets | string[] | ISO 3166-1 alpha-2 country codes. |
data.platform | string | Affiliate platform hosting the program. Empty when in-house. |
data.signupUrl | string | Where an affiliate applies. |
data.score | integer | GetAff attractiveness score, 0-100. See /docs for how it is computed. |
data.image | string | Illustration URL. Empty when none is available. |
data.createdAt | string | ISO 8601 timestamp of publication. |
Mögliche Fehler
401404429
GET /v1/me
Das aufrufende Konto: Tarif, Fähigkeiten, verbundene Netzwerke und Obergrenze. Netzwerk-Zugangsdaten werden niemals zurückgegeben.
Plan, capabilities, connected networks and the rate limit that applies to this key. Network credentials are never exposed by any endpoint, under any parameter.
Parameter
Keine Parameter.
Anfrage
curl -s 'https://getaff.org/api/v1/me' \
-H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'Antwort
{
"data": {
"uid": "kJ2p8wQxYb",
"email": "[email protected]",
"plan": "pro",
"capabilities": {
"acquisition": {
"enabled": true,
"configured": true,
"enabledAt": "2026-02-04T08:11:00.000Z"
},
"monetisation": {
"enabled": true,
"configured": true,
"enabledAt": "2026-02-04T08:40:00.000Z"
}
},
"networks": [
{
"network": "awin",
"status": "ok",
"connectedAt": "2026-02-04T08:40:00.000Z",
"lastSyncAt": "2026-07-25T03:12:00.000Z",
"accounts": 1,
"programs": 34,
"transactions": 1209
}
],
"key": {
"prefix": "gaff_live_9fA2xQ1p",
"label": "Reporting cron",
"scopes": [
"read"
]
},
"rateLimit": {
"limit": 600,
"windowSeconds": 60
}
}
}Felder der Antwort
| Name | Typ | Beschreibung |
|---|---|---|
data | Account | |
data.uid | string | Stable account identifier. |
data.email | string | null | |
data.plan | free | pro | |
data.capabilities | object | Acquisition and monetisation are independent and can both be active. |
data.capabilities.acquisition | CapabilityState | |
data.capabilities.monetisation | CapabilityState | |
data.networks | ConnectedNetwork[] | Connected affiliate networks. Never credentials. |
data.networks[].network | string | Network identifier, e.g. "awin", "impact". |
data.networks[].status | never | ok | partial | auth_failed | error | Outcome of the last synchronisation. |
data.networks[].connectedAt | string | null | |
data.networks[].lastSyncAt | string | null | |
data.networks[].accounts | integer | How many accounts this connection exposes. |
data.networks[].programs | integer | |
data.networks[].transactions | integer | |
data.key | object | The key that authenticated this call. Never the key itself. |
data.key.prefix | string | |
data.key.label | string | |
data.key.scopes | read[] | |
data.rateLimit | object | |
data.rateLimit.limit | integer | Requests allowed per window, for this plan. |
data.rateLimit.windowSeconds | integer |
Mögliche Fehler
401403429
GET /v1/commissions
Ihre Provisionen, die jüngsten zuerst. Beträge werden weder umgerechnet noch über Währungen hinweg summiert.
Commissions collected from the networks connected to the calling account, most recent first. Amounts are reported in the currency the network used and are never converted or summed across currencies.
Parameter
| Name | Ort | Typ | Pflicht | Beschreibung |
|---|---|---|---|---|
network | Query | string | nein | Restrict to one network. |
status | Query | pending | approved | declined | paid | unknown | nein | Restrict to one normalised status. |
from | Query | string (^\d{4}-\d{2}-\d{2}$) | nein | Inclusive lower bound on the transaction date, YYYY-MM-DD (UTC). |
to | Query | string (^\d{4}-\d{2}-\d{2}$) | nein | Inclusive upper bound on the transaction date, YYYY-MM-DD (UTC). |
limit | Query | integer (1–100) · Standard 25 | nein | Items per page, 1-100. |
cursor | Query | string | nein | Opaque cursor returned as `page.nextCursor` by the previous call. |
Anfrage
curl -s 'https://getaff.org/api/v1/commissions?from=2026-07-01&status=approved&limit=2' \
-H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'Antwort
{
"data": [
{
"id": "uid123_awin_884120933",
"network": "awin",
"externalId": "884120933",
"programName": "NorthStack",
"programExternalId": "20114",
"status": "approved",
"rawStatus": "confirmed",
"saleAmount": 240,
"commissionAmount": 60,
"currency": "EUR",
"clickedAt": "2026-06-30T18:02:11.000Z",
"transactedAt": "2026-07-01T10:15:04.000Z",
"subId": "newsletter-42"
}
],
"page": {
"limit": 2,
"hasMore": false,
"nextCursor": null
}
}Felder der Antwort
| Name | Typ | Beschreibung |
|---|---|---|
data | Commission[] | |
data[].id | string | Stable identifier within GetAff. |
data[].network | string | |
data[].externalId | string | Identifier used by the network itself. |
data[].programName | string | null | |
data[].programExternalId | string | null | |
data[].status | pending | approved | declined | paid | unknown | Normalised status. `rawStatus` keeps the network wording. |
data[].rawStatus | string | null | |
data[].saleAmount | number | null | Order value, when the network reports it. |
data[].commissionAmount | number | Amount owed to the publisher. |
data[].currency | string | ISO 4217. Never converted: amounts are never summed across currencies. |
data[].clickedAt | string | null | |
data[].transactedAt | string | ISO 8601 timestamp of the transaction. |
data[].subId | string | null | Publisher sub-identifier, when one was passed. |
page | PageInfo | |
page.limit | integer | Number of items requested for this page. |
page.hasMore | boolean | True when a further page exists. |
page.nextCursor | string | null | Opaque cursor. Pass it back as `cursor` to fetch the next page. Do not parse it. |
Mögliche Fehler
400401429503
Alle Fehler haben dieselbe Form. Verzweigen Sie Ihre Logik über code, niemals über message.