GetAff
Documentation API

Référence

Les tableaux ci-dessous sont produits à partir des schémas que les routes appliquent réellement. Ils ne peuvent pas décrire autre chose que le comportement en vigueur.

GET /v1/programs

Le répertoire public, trié par score d’attractivité décroissant. Les mêmes lignes pour toutes les clés.

Returns published affiliate programmes, most attractive first. The directory is public data: every key sees the same rows. Results are cursor-paginated.

Paramètres

Paramètres/v1/programs
NomEmplacementTypeRequisDescription
verticalrequêtesaas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autrenonRestrict to one industry.
modelrequêtecps | cpa | cpl | recurring | hybridnonRestrict to one payout model.
marketrequêtestringnonISO 3166-1 alpha-2 country code, case-insensitive.
recurringrequêtetrue | falsenonKeep only programs whose commission repeats, or only those that do not.
minScorerequêteinteger (0–100)nonMinimum attractiveness score.
limitrequêteinteger (1–100) · défaut 25nonItems per page, 1-100.
cursorrequêtestringnonOpaque cursor returned as `page.nextCursor` by the previous call.

Requête

curl
curl -s 'https://getaff.org/api/v1/programs?vertical=saas&minScore=60&limit=2' \
  -H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Réponse

200 OK
{
  "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"
  }
}

Champs de la réponse

Champs de la réponse/v1/programs
NomTypeDescription
dataProgramme[]
data[].slugstringStable identifier used in the directory URL.
data[].namestring
data[].hoststringAdvertiser domain, without scheme.
data[].sitestringAdvertiser website.
data[].pitchstringOne-paragraph description written by the advertiser.
data[].verticalsaas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autre
data[].modelcps | cpa | cpl | recurring | hybridPayout model.
data[].commissionstringCommission as advertised, free text (e.g. "30%", "50 EUR").
data[].recurringbooleanTrue when the commission repeats on renewals.
data[].cookieDaysintegerAttribution window, in days.
data[].payoutweekly | biweekly | monthly | net30 | net60Payment cadence.
data[].minPayoutnumberMinimum balance before payment, in the advertiser currency.
data[].marketsstring[]ISO 3166-1 alpha-2 country codes.
data[].platformstringAffiliate platform hosting the program. Empty when in-house.
data[].signupUrlstringWhere an affiliate applies.
data[].scoreintegerGetAff attractiveness score, 0-100. See /docs for how it is computed.
data[].imagestringIllustration URL. Empty when none is available.
data[].createdAtstringISO 8601 timestamp of publication.
pagePageInfo
page.limitintegerNumber of items requested for this page.
page.hasMorebooleanTrue when a further page exists.
page.nextCursorstring | nullOpaque cursor. Pass it back as `cursor` to fetch the next page. Do not parse it.

Erreurs possibles

400401429503

GET /v1/programs/{slug}

Une fiche publiée, par son identifiant d’URL.

Returns a single published programme by slug. Unpublished and rejected submissions are not reachable through this endpoint.

Paramètres

Paramètres/v1/programs/{slug}
NomEmplacementTypeRequisDescription
slugcheminstringouiProgram slug, as returned by GET /v1/programs.

Requête

curl
curl -s 'https://getaff.org/api/v1/programs/northstack-northstack' \
  -H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Réponse

200 OK
{
  "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"
  }
}

Champs de la réponse

Champs de la réponse/v1/programs/{slug}
NomTypeDescription
dataProgramme
data.slugstringStable identifier used in the directory URL.
data.namestring
data.hoststringAdvertiser domain, without scheme.
data.sitestringAdvertiser website.
data.pitchstringOne-paragraph description written by the advertiser.
data.verticalsaas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autre
data.modelcps | cpa | cpl | recurring | hybridPayout model.
data.commissionstringCommission as advertised, free text (e.g. "30%", "50 EUR").
data.recurringbooleanTrue when the commission repeats on renewals.
data.cookieDaysintegerAttribution window, in days.
data.payoutweekly | biweekly | monthly | net30 | net60Payment cadence.
data.minPayoutnumberMinimum balance before payment, in the advertiser currency.
data.marketsstring[]ISO 3166-1 alpha-2 country codes.
data.platformstringAffiliate platform hosting the program. Empty when in-house.
data.signupUrlstringWhere an affiliate applies.
data.scoreintegerGetAff attractiveness score, 0-100. See /docs for how it is computed.
data.imagestringIllustration URL. Empty when none is available.
data.createdAtstringISO 8601 timestamp of publication.

Erreurs possibles

401404429

GET /v1/me

Le compte qui appelle : plan, capacités, plateformes connectées et plafond de débit. Aucun identifiant de plateforme n’est jamais renvoyé.

Plan, capabilities, connected networks and the rate limit that applies to this key. Network credentials are never exposed by any endpoint, under any parameter.

Paramètres

Aucun paramètre.

Requête

curl
curl -s 'https://getaff.org/api/v1/me' \
  -H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Réponse

200 OK
{
  "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
    }
  }
}

Champs de la réponse

Champs de la réponse/v1/me
NomTypeDescription
dataAccount
data.uidstringStable account identifier.
data.emailstring | null
data.planfree | pro
data.capabilitiesobjectAcquisition and monetisation are independent and can both be active.
data.capabilities.acquisitionCapabilityState
data.capabilities.monetisationCapabilityState
data.networksConnectedNetwork[]Connected affiliate networks. Never credentials.
data.networks[].networkstringNetwork identifier, e.g. "awin", "impact".
data.networks[].statusnever | ok | partial | auth_failed | errorOutcome of the last synchronisation.
data.networks[].connectedAtstring | null
data.networks[].lastSyncAtstring | null
data.networks[].accountsintegerHow many accounts this connection exposes.
data.networks[].programsinteger
data.networks[].transactionsinteger
data.keyobjectThe key that authenticated this call. Never the key itself.
data.key.prefixstring
data.key.labelstring
data.key.scopesread[]
data.rateLimitobject
data.rateLimit.limitintegerRequests allowed per window, for this plan.
data.rateLimit.windowSecondsinteger

Erreurs possibles

401403429

GET /v1/commissions

Vos commissions, les plus récentes d’abord. Les montants ne sont ni convertis ni additionnés entre devises.

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.

Paramètres

Paramètres/v1/commissions
NomEmplacementTypeRequisDescription
networkrequêtestringnonRestrict to one network.
statusrequêtepending | approved | declined | paid | unknownnonRestrict to one normalised status.
fromrequêtestring (^\d{4}-\d{2}-\d{2}$)nonInclusive lower bound on the transaction date, YYYY-MM-DD (UTC).
torequêtestring (^\d{4}-\d{2}-\d{2}$)nonInclusive upper bound on the transaction date, YYYY-MM-DD (UTC).
limitrequêteinteger (1–100) · défaut 25nonItems per page, 1-100.
cursorrequêtestringnonOpaque cursor returned as `page.nextCursor` by the previous call.

Requête

curl
curl -s 'https://getaff.org/api/v1/commissions?from=2026-07-01&status=approved&limit=2' \
  -H 'Authorization: Bearer gaff_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Réponse

200 OK
{
  "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
  }
}

Champs de la réponse

Champs de la réponse/v1/commissions
NomTypeDescription
dataCommission[]
data[].idstringStable identifier within GetAff.
data[].networkstring
data[].externalIdstringIdentifier used by the network itself.
data[].programNamestring | null
data[].programExternalIdstring | null
data[].statuspending | approved | declined | paid | unknownNormalised status. `rawStatus` keeps the network wording.
data[].rawStatusstring | null
data[].saleAmountnumber | nullOrder value, when the network reports it.
data[].commissionAmountnumberAmount owed to the publisher.
data[].currencystringISO 4217. Never converted: amounts are never summed across currencies.
data[].clickedAtstring | null
data[].transactedAtstringISO 8601 timestamp of the transaction.
data[].subIdstring | nullPublisher sub-identifier, when one was passed.
pagePageInfo
page.limitintegerNumber of items requested for this page.
page.hasMorebooleanTrue when a further page exists.
page.nextCursorstring | nullOpaque cursor. Pass it back as `cursor` to fetch the next page. Do not parse it.

Erreurs possibles

400401429503

Erreurs

Toutes les erreurs partagent la même forme. Branchez votre logique sur code, jamais sur message.

Erreurs
Ouvrir la spécification OpenAPI
API — référence des points d’entrée — GetAff