Partner Links and Attribution
What this page solves
Retrieve partner links and their codes, check client affiliation, and create custom partner codes.
When to use it
Use this workflow when displaying partner links, checking a known client affiliation, or creating a custom code.
Before you start
Use an active signed API key and the access required by the selected operation. See Authentication and Partnership permissions. Read access is sufficient for the default link, the link list and the affiliation check. The affiliation check uses POST but is read-only. Creating a custom code requires write access.
Recommended flow
- 1Retrieve the default link.
- 2List partner links and retain their returned link codes.
- 3If your workflow needs an affiliation check, submit the client email to the documented operation.
- 4Create a custom partner code only when required, then verify the link list.
- 5Pass the returned code under the parameter name accepted by the selected report.
Main endpoints
- GET
/v1/partnership/partner/default-link— Retrieves the partner's default public link URL and code. - GET
/v1/partnership/partner/links— Lists partner link codes with status and reward-schema attributes. - POST
/v1/partnership/affiliation— Checks whether a client email is affiliated with the partner. - POST
/v1/partnership/partner/codes— Creates a custom partner code for use in partner links.
Example request
Request-shape example; replace the authentication placeholders with a fresh signature.
GET /v1/partnership/partner/default-link HTTP/1.1
Host: <your-api-host>
EXN-API-KEY: <your-api-key>
EXN-TIMESTAMP: <fresh-unix-milliseconds>
EXN-SIGN-VERSION: 1
EXN-DATA: <base64url-signed-data>
EXN-SIGN: <base64url-signature>
What to expect in return
HTTP 200 returns the default link and its components. The link list returns data and total; its partner_account can be null.
{
"full_default_link": "https://www.exness.com/a/demo22",
"domain": "exness.com",
"code": "demo22",
"path": "/a/demo22",
"url": "https://www.exness.com/a/demo22"
}
Common errors
The following errors apply to the example operation. Other operations can declare a different subset; follow their API Reference links.
| HTTP status / code | What It Means | How to Fix It |
|---|---|---|
429 / Throttled | A Partnership operation rate limit was exceeded. | Slow down the request rate and honor Retry-After when it is returned. |
504 / ServiceTransportError | A service required by the Partnership operation could not be reached or timed out. | Retry the request with exponential backoff. |
500 / Error | A Partnership operation failed because a required service could not complete the request. | Retry the request with backoff. |
401 / AuthenticationFailed | A Partnership service rejected the authenticated request after request authentication. API-key and request-signature failures use the numeric authentication errors. | Check the request authorization context. When the response uses the numeric envelope, follow the action for its error_message. |
403 / PermissionDenied | The authenticated identity cannot perform the operation or access the requested partner data. | Use credentials with the required Partnership permission and resource access. |
400 / ValidationError | Request validation failed, including bad-request or conflict conditions returned as validation errors. | Do not retry unchanged. Correct the request using details, then sign the corrected request again. |
502 / 1 — SYSTEM_BAD_GATEWAY | The API could not complete the request to the Partnership service. | Retry the request with backoff. |
503 / 2 — SYSTEM_TEMPORARY_UNAVAILABLE | A required service is temporarily unavailable or the request deadline was exceeded. | Retry the request with backoff. |
500 / 3 — SYSTEM_INTERNAL_ERROR | The API encountered an unexpected internal error. | Retry the request with backoff. |
401 / 1000 — AUTH_INVALID_API_KEY | The API key is invalid, expired, revoked, or not allowed for the request source. | Check the API key, its state, and its allowed source IP. |
401 / 1001 — AUTH_INVALID_SIGNATURE | The request signature or signed timestamp is invalid. | Rebuild the signature from the exact request and a fresh timestamp. |
403 / 1002 — AUTH_FORBIDDEN | The API key does not have a required operation scope. | Use an API key with the required Partnership scope. |
429 / 1003 — AUTH_RATE_LIMIT | The authentication rate limit was exceeded. | Honor Retry-After and reduce request rate. |
400 / 3001 — REQUEST_INVALID_PARAMETERS | Required headers or signed request data are malformed or inconsistent. | Correct the headers or signed values named by description, then sign the exact request again. |
Recovery and reconciliation
After an uncertain custom-code create, read the link list before another write. A custom code must contain 3–10 lowercase Latin letters, digits, underscores or hyphens; it cannot be numeric-only or start with c_. Preserve codes exactly as returned.