Access affiliate performance data from your Inflektion account. Pull summary reports, conversion-level logs, and affiliate details.
Overview
The Brand Metrics API gives brands programmatic access to the affiliate performance data flowing through Inflektion. It is organized around REST principles and uses standard HTTP verbs, status codes, and JSON request/response bodies.
The API is organized into the following capabilities:
- Summary Reporting: Aggregate metrics grouped by affiliate, date, geography, or other dimensions. Ideal for leaderboards and time-series charts.
- Conversion Log: Transaction-level detail for every conversion and (optionally) on-site event. Ideal for daily syncs into a data warehouse or BI tool.
- Edit Conversion: Update the sale amount on an existing conversion. Revenue and payout are adjusted automatically when applicable.
- Delete Conversion: Remove a conversion from the record.
- Affiliate Details: Active affiliate roster with contract tier, join date, and referral tree data.
Authentication
All requests must be authenticated with a Bearer token in the Authorization header. Your API key is provided by your Inflektion account manager if you're on the Growth or Enterprise plans.
Authorization: Bearer YOUR_API_KEY
IMPORTANT: Keep your API key secret. Do not expose it in client-side code, public repositories, or browser requests. If you believe your key has been compromised, contact your Inflektion account manager immediately for a rotation.
Base URL
All requests are made over HTTPS to https://brand-api.inflektion.io
Request bodies (where applicable) must be JSON with the "Content-Type" header set to "application/json".
Pagination
Endpoints that return lists include a "paging" object in the response body:
{
"paging": {
"page": 2,
"page_size": 50,
"total_count": 150
}
}Pages are 1-indexed (the first page is 1, not 0). When no pagination parameters are specified, the API returns the first page with a default page_size of 50. The maximum page size is 2000 unless an endpoint specifies otherwise.
To request a specific page, include page and page_size as query string parameters on GET endpoints, or as fields in the JSON body on POST endpoints.
Timezones
Every reporting request must include a timezone_id to anchor date ranges correctly. Common timezone IDs:
| TIMEZONE | ID |
| America/New_York | 80 |
| America/Chicago | 85 |
| America/Denver | 87 |
| America/Phoenix | 89 |
| America/Los_Angeles | 90 |
| UTC | 67 |
If you need a timezone ID not listed here, contact your Inflektion account manager.
Summary Reporting
POST /api/reporting/entityReturns aggregate performance metrics grouped by one or more dimensions, similar to a pivot table. Use this endpoint to build leaderboards, time-series charts, or summary dashboards.
Request Body
| FIELD | TYPE | REQUIRED | DESCRIPTION |
| from | string | Yes | Start date in YYYY-MM-DD format. |
| to | string | Yes | End date in YYYY-MM-DD format. |
| timezone_id | integer | Yes | See Timezones section above. |
| currency_id | string | Yes | ISO 4217 currency code (e.g. "USD"). |
| columns | array | Yes | One to ten grouping columns. See available columns below. |
| query.filters | array | No | Array of filter objects to narrow results. |
| query.search_terms | array | No | Free-text search terms. |
Available Columns
| COLUMN | GROUPS BY |
| affiliate_id | Affiliate ID |
| country | Country name of the purchaser |
| country_code | ISO country code of the purchaser |
| date | Day of the conversion |
| week | Week of the year |
| month | Month |
CONSTRAINT: Date ranges are limited to a maximum span of one year. Requests exceeding this limit will return an error.
Response Structure
The response contains three objects:
summary: Aggregate metrics for the entire date range across all groupings.
performance: Time-series data for building aggregate charts. The granularity adapts to the date range automatically:
- 1 day — 96 intervals of 15 minutes
- 2–3 days — 1-hour intervals
- 4–7 days — 6-hour intervals
- 8–14 days — 12-hour intervals
- >14 days — Daily intervals
table: Aggregate metrics broken down by the requested grouping column(s). Limited to 10,000 rows. Ideal for leaderboard/dashboard views.
Example Request
View aggregate data, grouped by affiliate_id, for the months of August through November 2025.
curl --request POST 'https://brand-api.inflektion.io/api/reporting/entity' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"from": "2025-08-01",
"to": "2025-11-30",
"timezone_id": 90,
"currency_id": "USD",
"query": {
"filters": [],
"search_terms": []
},
"columns": [
{ "column": "affiliate_id" }
]
}'TIP: Use the performance object for time-series charts and the table object for affiliate leaderboards. The summary object is useful for top-level KPI cards (total clicks, revenue, commissions, etc.).
Conversion Log
POST /api/reporting/conversionsReturns transaction-level data for individual conversions and (optionally) on-site events such as Add to Cart. Results are paginated.
RECOMMENDED USAGE: Call this endpoint once per day for the prior day's date range. This gives you a complete, log-level feed suitable for syncing into a data warehouse or BI tool.
Request Body
| FIELD | TYPE | REQUIRED | DESCRIPTION |
| from | string | Yes | Start date (YYYY-MM-DD). |
| to | string | Yes | End date (YYYY-MM-DD). |
| timezone_id | integer | Yes | See Timezones section above. |
| currency_id | string | Yes | ISO 4217 currency code. |
| show_conversions | boolean | Yes | Set to true to include purchase conversions. |
| show_events | boolean | Yes | Set to true to include non-conversion events (e.g. Add to Cart). |
| show_only_vt | boolean | No | Filter to view-through conversions only. |
| show_only_ct | boolean | No | Filter to click-through conversions only. |
Example Request
curl --request POST 'https://brand-api.inflektion.io/api/reporting/conversions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"show_conversions": true,
"show_events": false,
"show_only_vt": false,
"show_only_ct": false,
"from": "2025-11-30",
"to": "2025-11-30",
"timezone_id": 90,
"currency_id": "USD",
"query": {
"filters": [],
"search_terms": []
}
}'Example Response
{
"conversions": [
{
"conversion_id": "9008277d544441a7bc0c64533ccbbad8",
"conversion_unix_timestamp": 1764489640,
"cost_type": "RPS",
"cost": 8.09,
"session_user_ip": "203.0.113.42",
"conversion_user_ip": "203.0.113.42",
"country": "United States",
"region": "California",
"city": "Los Angeles",
"dma": 0,
"carrier": "",
"platform": "iOS",
"os_version": "",
"device_type": "Phone",
"brand": "Apple",
"browser": "Safari",
"language": "en",
"http_user_agent": "Mozilla/5.0 ...",
"is_event": false,
"transaction_id": "41c9b30abde3434db512025fab386952",
"click_unix_timestamp": 1764489486,
"event": "Purchase",
"currency_id": "USD",
"isp": "",
"adv1": "",
"adv2": "",
"adv3": "",
"adv4": "couponcode",
"adv5": "",
"sale_amount": 53.91,
"relationship": {
"offer": {
"network_offer_id": 123,
"network_id": 888,
"name": "Your Brand",
"offer_status": "active"
},
"events_count": 0,
"affiliate_id": 123456,
"affiliate": {
"network_affiliate_id": 123456,
"network_id": 888,
"name": "Sample Affiliate",
"account_status": "active"
},
"sub1": "",
"sub2": "",
"sub3": "",
"sub4": "",
"sub5": "",
"source_id": "",
"offer_url": null
},
"coupon_code": "brand-affiliate"
}
],
"paging": {
"page": 1,
"page_size": 50,
"total_count": 271
}
}Suggested Fields to Log
When ingesting Conversion Log data into your own systems, we recommend storing at minimum the following fields:
| FIELD | DESCRIPTION |
| conversion_id | Inflektion's globally unique conversion identifier. |
| conversion_unix_timestamp | UNIX timestamp of the conversion event. |
| click_unix_timestamp | UNIX timestamp of the originating click. |
| transaction_id | Inflektion's globally unique click ID. |
| event | Human-readable funnel event name (e.g. Purchase, Add to Cart). |
| sale_amount | Purchase subtotal (excludes tax/shipping, net of discounts). |
| cost | Commission cost for this conversion. Returns 0 for non-conversion events. |
| currency_id | ISO 4217 currency code. |
| relationship.affiliate_id | The affiliate ID credited with the sale. |
| country | Country name of the converting user. |
| session_user_ip | IP address at click time. |
| conversion_user_ip | IP address at conversion time. |
| http_user_agent | The purchaser's user agent string. |
| adv4 | Typically contains the coupon code used (if any). |
| coupon_code | The coupon code applied to the order. |
Edit Conversion
PUT /api/reporting/conversions/{conversion_id}/saleamountUpdates the sale amount on an existing conversion. Revenue and payout are adjusted automatically when applicable.
RECOMMENDED USAGE: Use this endpoint to reconcile conversions whose order totals changed after the initial post (partial refunds, upsells, or post-checkout adjustments). Look up the target conversion_id via the Conversion Log endpoint first.
Query Parameters
| PARAMETER | TYPE | REQUIRED | DESCRIPTION |
| conversion_id | string | Yes | The ID of the conversion. See the Conversion Log section. |
Request Body
| FIELD | TYPE | REQUIRED | DESCRIPTION |
| sale_amount | float | Yes | The new sale amount. |
Example Request
curl --location --request PUT 'https://brand-api.inflektion.io/api/reporting/conversions/{conversion_id}/saleamount' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"sale_amount": 199.00
}'Delete Conversion
DELETE /api/reporting/conversions/{conversion_id}Deletes a conversion from the record.
IMPORTANT: Deletion is permanent. Downstream revenue and payout figures tied to this conversion will be reversed. If you only need to correct a sale amount, use the Edit Conversion endpoint instead.
Query Parameters
| PARAMETER | TYPE | REQUIRED | DESCRIPTION |
| conversion_id | string | Yes | The ID of the conversion. See the Conversion Log section. |
Example Request
curl --location --request DELETE 'https://brand-api.inflektion.io/api/reporting/conversions/{conversion_id}' \
--header 'Authorization: Bearer YOUR_API_KEY'Affiliate Details
GET /api/affiliates?page={page}&page_size={page_size}Returns a paginated list of all active affiliates in your program, including their contract tier, join date, and referral chain.
Query Parameters
| PARAMETER | TYPE | REQUIRED | DESCRIPTION |
| page | integer | No | Page number (1-indexed). Defaults to 1. |
| page_size | integer | No | Results per page. Defaults to 50, max 2000. |
Response Fields
| FIELD | DESCRIPTION |
| network_affiliate_id | The affiliate's unique ID. |
| name | Affiliate display name. |
| time_created | UNIX timestamp of when the affiliate joined the program. |
| referrer_id | Affiliate ID of the referring affiliate. Null if none. |
| contract_name | Current payout contract tier. |
| type | The type of partner that you've categorized this partner as. |
Example Request
curl --request GET 'https://brand-api.inflektion.io/api/affiliates?page=1&page_size=10' \
--header 'Authorization: Bearer YOUR_API_KEY'Example Response
{
"affiliates": [
{
"network_affiliate_id": 1100,
"name": "Sample Affiliate 1",
"time_created": "1597650357",
"referrer_id": 1000,
"contract_name": "Bronze",
"type": "Influencer"
},
{
"network_affiliate_id": 1200,
"name": "Sample Affiliate 2",
"time_created": "1611038247",
"referrer_id": null,
"contract_name": "Gold",
"type": "Brand Ambassador"
}
],
"paging": {
"page": 1,
"page_size": 10,
"total_count": 500
}
}DOWNLINE TRACKING: Use the referrer_id field to reconstruct the referral tree and track sales by recruit. If referrer_id is not null, that affiliate was referred by the affiliate with the matching ID.
Error Handling
The API uses standard HTTP status codes. Errors return a JSON body with a descriptive message.
| STATUS | MEANING |
| 200 | Success. |
| 400 | Bad request — check your payload for missing or invalid fields (e.g. date range exceeds one year). |
| 401 | Unauthorized — missing or invalid API key. |
| 403 | Forbidden — your key does not have access to this resource. |
| 429 | Rate limited — you are sending too many requests. Back off and retry. |
| 500 | Internal server error — retry after a brief delay. If persistent, contact support. |
Rate Limits
API requests are rate-limited per API key. If you receive a 429 response, implement an exponential backoff strategy before retrying. For high-volume integrations or real-time use cases, contact your Inflektion account manager to discuss elevated rate limits.
Need help?
Reach out to your Inflektion account manager.