GetAff
Documentación de la API

Referencia

Las tablas siguientes se generan a partir de los esquemas que las rutas aplican realmente. No pueden describir otra cosa que el comportamiento vigente.

GET /v1/programs

El directorio público, ordenado por puntuación de atractivo descendente. Las mismas filas para todas las claves.

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

Parámetros

Parámetros/v1/programs
NombreUbicaciónTipoObligatorioDescripción
verticalconsultasaas | ecommerce | infoproduit | finance | sante | voyage | mode | maison | jeux | services | immobilier | autrenoRestrict to one industry.
modelconsultacps | cpa | cpl | recurring | hybridnoRestrict to one payout model.
marketconsultastringnoISO 3166-1 alpha-2 country code, case-insensitive.
recurringconsultatrue | falsenoKeep only programs whose commission repeats, or only those that do not.
minScoreconsultainteger (0–100)noMinimum attractiveness score.
limitconsultainteger (1–100) · por defecto 25noItems per page, 1-100.
cursorconsultastringnoOpaque cursor returned as `page.nextCursor` by the previous call.

Petición

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

Respuesta

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"
  }
}

Campos de la respuesta

Campos de la respuesta/v1/programs
NombreTipoDescripción
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.

Errores posibles

400401429503

GET /v1/programs/{slug}

Una ficha publicada, por su identificador de URL.

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

Parámetros

Parámetros/v1/programs/{slug}
NombreUbicaciónTipoObligatorioDescripción
slugrutastringProgram slug, as returned by GET /v1/programs.

Petición

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

Respuesta

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"
  }
}

Campos de la respuesta

Campos de la respuesta/v1/programs/{slug}
NombreTipoDescripción
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.

Errores posibles

401404429

GET /v1/me

La cuenta que llama: plan, capacidades, plataformas conectadas y tope de caudal. Nunca se devuelve ninguna credencial de plataforma.

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

Parámetros

Sin parámetros.

Petición

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

Respuesta

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
    }
  }
}

Campos de la respuesta

Campos de la respuesta/v1/me
NombreTipoDescripción
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

Errores posibles

401403429

GET /v1/commissions

Sus comisiones, las más recientes primero. Los importes no se convierten ni se suman entre divisas.

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.

Parámetros

Parámetros/v1/commissions
NombreUbicaciónTipoObligatorioDescripción
networkconsultastringnoRestrict to one network.
statusconsultapending | approved | declined | paid | unknownnoRestrict to one normalised status.
fromconsultastring (^\d{4}-\d{2}-\d{2}$)noInclusive lower bound on the transaction date, YYYY-MM-DD (UTC).
toconsultastring (^\d{4}-\d{2}-\d{2}$)noInclusive upper bound on the transaction date, YYYY-MM-DD (UTC).
limitconsultainteger (1–100) · por defecto 25noItems per page, 1-100.
cursorconsultastringnoOpaque cursor returned as `page.nextCursor` by the previous call.

Petición

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

Respuesta

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
  }
}

Campos de la respuesta

Campos de la respuesta/v1/commissions
NombreTipoDescripción
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.

Errores posibles

400401429503

Errores

Todos los errores comparten la misma forma. Base su lógica en code, nunca en message.

Errores
Abrir la especificación OpenAPI
API — referencia de puntos de entrada — GetAff