API reference · Partner API
Links
Tracking links: list them with their results, or create new ones.
List links
/v1/partner-api/linksYour tracking links, newest first, with all-time clicks, registrations and qualified users.
AuthPartner API key with scope links:read
Query parameters
limitintegerItems per page.
cursorstringnextCursor from the previous page.
programIdstringOnly this program.
statusstringOne of active inactive
Returns · 200
itemsarray of objectsrequiredChild attributes
idstringrequiredcodestringrequiredAlso the affiliate code people can type.
namestringrequiredstatusstringrequiredOne of active inactive
programIdstringrequiredprogramNamestringrequiredappNamestringrequiredcampaignIdstringrequireddestinationUrlstringrequiredsubIdsmap of stringsrequiredutmmap of stringsrequiredexpiresAtstringrequiredcreatedAtstringrequiredurlstringrequiredThe tracking link to share.
statsobjectrequiredAll time, in the key’s environment.
Child attributes
clicksintegerrequiredregistrationsintegerrequiredqualifiedintegerrequiredhasMorebooleanrequirednextCursorstringrequiredPass as cursor for the next page; null on the last one.
Errors
- 400
validation_error The request does not match the schema.
detailssays which fields failed and why.- 400
invalid_cursor cursoris not one this API handed out.- 401
invalid_api_key No key was sent, or the key is unknown, expired or revoked.
- 403
partner_suspended API access is suspended for this partner account.
- 403
insufficient_scope The key lacks the scope this endpoint needs.
- 429
rate_limited Too many requests with this key in the last minute. Wait
Retry-Afterseconds.
curl "https://api.flowgroup.se/v1/partner-api/links" \
-H "authorization: Bearer $FA_API_KEY"const res = await fetch('https://api.flowgroup.se/v1/partner-api/links', {
headers: {
authorization: `Bearer ${process.env.FA_API_KEY}`,
},
});
const data = await res.json();{
"items": [
{
"id": "7c8d9e0f-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
"code": "k7qxa2mp",
"name": "Newsletter November",
"status": "active",
"programId": "0c9e6f3a-1b2d-4c5e-8f7a-9b0c1d2e3f4a",
"programName": "Nordshop Partner Program",
"appName": "Nordshop",
"campaignId": null,
"destinationUrl": null,
"subIds": {
"placement": "newsletter"
},
"utm": {},
"expiresAt": null,
"createdAt": "2026-11-01T08:00:00.000Z",
"url": "https://go.affiliate.yflow.io/a/k7qxa2mp",
"stats": {
"clicks": 412,
"registrations": 37,
"qualified": 21
}
}
],
"hasMore": true,
"nextCursor": "nextCursor"
}Create a link
/v1/partner-api/linksA new tracking link in a program you are an active member of. Its code is generated, and doubles as an affiliate code.
AuthPartner API key with scope links:write
Request body
programIdstringrequiredA program you are an active member of.
campaignIdstringAn active campaign of the program; its default campaign when omitted.
namestringYour own name for the link.
destinationUrlstringWhere the link sends desktop visitors. Must be on the app’s own domain.
subIdsmap of stringsUp to 10 keys of your own, reported back on conversions, e.g. { "placement": "bio" }.
utmmap of stringsUTM parameters added to the destination, e.g. { "source": "newsletter" }.
Returns · 201
idstringrequiredcodestringrequiredAlso the affiliate code people can type.
namestringrequiredstatusstringrequiredOne of active inactive
programIdstringrequiredprogramNamestringrequiredappNamestringrequiredcampaignIdstringrequireddestinationUrlstringrequiredsubIdsmap of stringsrequiredutmmap of stringsrequiredexpiresAtstringrequiredcreatedAtstringrequiredurlstringrequiredThe tracking link to share.
bioNotestringrequiredErrors
- 400
validation_error The request does not match the schema.
detailssays which fields failed and why.- 400
destination_not_allowed destinationUrlis not on the app’s own domain.- 401
invalid_api_key No key was sent, or the key is unknown, expired or revoked.
- 403
partner_suspended API access is suspended for this partner account.
- 403
insufficient_scope The key lacks the scope this endpoint needs.
- 403
membership_required You are not an active member of the program.
- 404
not_found campaignIdis not an active campaign of the program.- 429
rate_limited Too many requests with this key in the last minute. Wait
Retry-Afterseconds.
curl -X POST "https://api.flowgroup.se/v1/partner-api/links" \
-H "authorization: Bearer $FA_API_KEY" \
-H "content-type: application/json" \
-d '{
"programId": "0c9e6f3a-1b2d-4c5e-8f7a-9b0c1d2e3f4a",
"name": "Newsletter November",
"subIds": {
"placement": "newsletter"
}
}'const res = await fetch('https://api.flowgroup.se/v1/partner-api/links', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.FA_API_KEY}`,
'content-type': 'application/json',
},
body: JSON.stringify({
programId: '0c9e6f3a-1b2d-4c5e-8f7a-9b0c1d2e3f4a',
name: 'Newsletter November',
subIds: {
placement: 'newsletter'
}
}),
});
const data = await res.json();{
"id": "3f1c8a52-6c1e-4b8e-9d0a-2b7f0c4e5a91",
"code": "k7qxa2mp",
"name": "name",
"status": "active",
"programId": "3f1c8a52-6c1e-4b8e-9d0a-2b7f0c4e5a91",
"programName": "programName",
"appName": "appName",
"campaignId": "3f1c8a52-6c1e-4b8e-9d0a-2b7f0c4e5a91",
"destinationUrl": "https://example.com",
"subIds": {
"key": "value"
},
"utm": {
"key": "value"
},
"expiresAt": "2026-11-09T12:00:00.000Z",
"createdAt": "2026-11-09T12:00:00.000Z",
"url": "https://example.com",
"bioNote": "bioNote"
}Get a link
/v1/partner-api/links/{id}AuthPartner API key with scope links:read
Path parameters
idstringrequiredThe link’s id.
Returns · 200
idstringrequiredcodestringrequiredAlso the affiliate code people can type.
namestringrequiredstatusstringrequiredOne of active inactive
programIdstringrequiredprogramNamestringrequiredappNamestringrequiredcampaignIdstringrequireddestinationUrlstringrequiredsubIdsmap of stringsrequiredutmmap of stringsrequiredexpiresAtstringrequiredcreatedAtstringrequiredurlstringrequiredThe tracking link to share.
statsobjectrequiredAll time, in the key’s environment.
Child attributes
clicksintegerrequiredregistrationsintegerrequiredqualifiedintegerrequiredErrors
- 400
validation_error The request does not match the schema.
detailssays which fields failed and why.- 401
invalid_api_key No key was sent, or the key is unknown, expired or revoked.
- 403
partner_suspended API access is suspended for this partner account.
- 403
insufficient_scope The key lacks the scope this endpoint needs.
- 404
not_found You have no link with this id.
- 429
rate_limited Too many requests with this key in the last minute. Wait
Retry-Afterseconds.
curl "https://api.flowgroup.se/v1/partner-api/links/3f1c8a52-6c1e-4b8e-9d0a-2b7f0c4e5a91" \
-H "authorization: Bearer $FA_API_KEY"const res = await fetch('https://api.flowgroup.se/v1/partner-api/links/3f1c8a52-6c1e-4b8e-9d0a-2b7f0c4e5a91', {
headers: {
authorization: `Bearer ${process.env.FA_API_KEY}`,
},
});
const data = await res.json();{
"id": "7c8d9e0f-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
"code": "k7qxa2mp",
"name": "Newsletter November",
"status": "active",
"programId": "0c9e6f3a-1b2d-4c5e-8f7a-9b0c1d2e3f4a",
"programName": "Nordshop Partner Program",
"appName": "Nordshop",
"campaignId": null,
"destinationUrl": null,
"subIds": {
"placement": "newsletter"
},
"utm": {},
"expiresAt": null,
"createdAt": "2026-11-01T08:00:00.000Z",
"url": "https://go.affiliate.yflow.io/a/k7qxa2mp",
"stats": {
"clicks": 412,
"registrations": 37,
"qualified": 21
}
}