Skip to content

Attribution Event Detail API Guide

This document is a guide for using the PartnerTap Analytics API for retrieving the Attribution Event Detail report.

The Attribution Event Detail report shows every individual attribution event captured against your accounts. An attribution event is any user action attributable to a partner’s influence — for example, a downloaded action list, a workflow intro, or a CRM update tied to partner activity. Each row in the report represents a single attribution event, including the account, the partner credited with the event, the event type and subtype, and the user who performed the action.

All report endpoints follow the pattern /v1/report-analytics/report/{reportType}/... and support the ReportRequest body for filtering, searching, and column selection.


All API requests require an API key passed in the api-key HTTP header.

  1. Log in to PartnerTap.
  2. Navigate to Admin Center > Data > API Keys.
  3. Click “Generate Key”.
  4. Copy the generated key and store it securely — it will not be shown again.

Include the key in every request via the api-key header:

api-key: <YOUR_API_KEY>

If the api-key header is not provided, the service falls back to the standard authorization header (JWT bearer token). The API key approach is recommended for programmatic/external integrations.

Rate Limiting: Each API key is rate-limited to a maximum of 100 requests per minute. The counter resets on a rolling 1-minute window. If the limit is exceeded, the server responds with HTTP 429 Too Many Requests. The rate limit is tracked per API key — separate keys have independent counters.


Returns paginated report records for the Attribution Event Detail report.

POST /v1/report-analytics/report/ATTRIBUTION_EVENTS/records?page=0&size=20&sort=columnName,asc
Content-Type: application/json
ParameterTypeRequiredDescription
reportTypestringYesMust be ATTRIBUTION_EVENTS
ParameterTypeRequiredDescription
pageintegerNoZero-based page index (default: 0)
sizeintegerNoNumber of records per page (default: 20, max: 2000)
sortstringNoSorting criteria in the format property,asc|desc. Multiple sort criteria are supported.
{
"filters": {},
"search": "",
"context": {
"partnerPublicIds": ["<PARTNER_ORG_UUID_1>", "<PARTNER_ORG_UUID_2>"],
"eventTypeCodes": ["ACTION_LIST", "WORKFLOW"],
"dateRangeDays": 30
}
}

Important: The context object is required. Without partnerPublicIds and eventTypeCodes, the API will return an error. Without a date scope, the report will run unbounded against the event history. See Required Context Parameters below.

The Attribution Event Detail report is scoped via the context object on the ReportRequest body. Use this object to declare which partners’ events you want, which event types to include, and the time window to query.

KeyTypeRequiredDescription
partnerPublicIdsstring[]YesList of partner organization UUIDs to include. Obtain these from the All Partner Organizations report (the companyPartnerPublicId field). The request will fail if this key is missing or empty.
eventTypeCodesstring[]YesList of attribution event type codes to include. Use the /v1/attribution/event-types endpoint to retrieve the valid codes. The request will fail if this key is missing or empty.
dateRangeDaysintegerNoConvenience window — limits results to events that occurred within the last N days from now. Ignored when eventDateStart and eventDateEnd are both set.
eventDateStartstringNoInclusive lower bound of the event date window (epoch seconds, as a string). Must be paired with eventDateEnd. Takes precedence over dateRangeDays.
eventDateEndstringNoInclusive upper bound of the event date window (epoch seconds, as a string). Must be paired with eventDateStart. Takes precedence over dateRangeDays.

Date scoping rules:

  • If both eventDateStart and eventDateEnd are provided, an inclusive range filter is applied.
  • Else if dateRangeDays is provided, results are limited to the last N days from now.
  • Otherwise, no event-date filter is applied. For performance, always include a date scope.

Example with an explicit event-date range:

{
"filters": {},
"search": "",
"context": {
"partnerPublicIds": ["c1727859-692f-499e-8c2a-b1fa50aa1a65"],
"eventTypeCodes": ["ACTION_LIST", "WORKFLOW"],
"eventDateStart": "1722470400",
"eventDateEnd": "1725148800"
}
}

200 OK — Returns a paginated response containing report records (showing only 1 record for this example).

{
"totalElements": 1284,
"totalPages": 65,
"sort": {
"unsorted": true,
"sorted": false,
"empty": true
},
"first": true,
"last": false,
"number": 0,
"pageable": {
"pageNumber": 0,
"pageSize": 20,
"sort": {
"unsorted": true,
"sorted": false,
"empty": true
},
"offset": 0,
"unpaged": false,
"paged": true
},
"numberOfElements": 20,
"size": 20,
"empty": false,
"content": [
{
"account_name": "Example Logistics",
"partner_org_name": "Example Pharma Inc.",
"event_date": 1758921277,
"event_type_display_name": "Action List",
"event_subtype_display_name": "Action List Downloaded",
"event_name": "Q3 Pipeline Push - Logistics",
"event_description": "Action list 'Q3 Pipeline Push - Logistics' was downloaded by Jane Doe.",
"event_source": "PartnerTap",
"event_user_name": "Jane Doe",
"event_user_email": "jane.doe@example.com",
"event_user_title": "Sales Development Rep",
"company_partner_public_id": "c1727859-692f-499e-8c2a-b1fa50aa1a65",
"crm_account_id": "001ABC123",
"top_parent_crm_account_id": "001PARENT456",
"top_parent_crm_account_name": "Example Logistics Group"
}
],
"noDataFoundMessage": null
}
Terminal window
curl -X POST \
"https://reports-analytics.partnertap.com/v1/report-analytics/report/ATTRIBUTION_EVENTS/records?page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"filters": {},
"search": "",
"context": {
"partnerPublicIds": ["c1727859-692f-499e-8c2a-b1fa50aa1a65"],
"eventTypeCodes": ["ACTION_LIST", "WORKFLOW"],
"dateRangeDays": 30
}
}'

Here are all of the standard fields for the Attribution Event Detail report. If you have custom fields they will appear with the prefix “custom_” in the records response.

Note: Columns prefixed with “partner_” populate depending on your partner’s share settings and available data.

API NameDisplay NameTypeDescription
account_nameAccount NamestringName of the account associated with the event
partner_org_namePartner Org NamestringName of the partner organization credited with the event
event_dateAttribution Event DatedateDate the attribution event occurred (epoch seconds)
event_group_display_nameAttribution Event GroupstringTop-level grouping for the event (e.g., Action List, Workflow)
event_type_display_nameAttribution Event TypestringType classification of the event
event_subtype_display_nameAttribution Event SubtypestringMore specific subtype of the event
event_nameAttribution Event NamestringDisplay name of the specific event
event_descriptionAttribution Event DescriptionstringHuman-readable description of what happened
event_sourceAttribution Event SourcestringSystem or source that produced the event (e.g., PartnerTap, CRM)
event_user_nameAttribution Event User NamenameFull name of the user who triggered the event
event_user_emailAttribution Event User EmailemailEmail of the user who triggered the event
event_user_titleAttribution Event User TitletitleJob title of the user who triggered the event
company_partner_public_idPartner Org IDstringUUID of the partner organization
crm_account_idCRM Account IDstringUnique identifier of the account in the source CRM
top_parent_crm_account_idTop Parent Account IDstringCRM ID of the top-level parent account in the account hierarchy
top_parent_crm_account_nameTop Parent Account NamestringName of the top-level parent account in the account hierarchy
event_source_linkAttribution Event Source IDstringIdentifier or link back to the source system record for the event
custom_event_campaign_idCampaign IDstringCampaign ID associated with the event (custom event field)
custom_event_lead_idLead IDstringLead ID associated with the event (custom event field)
custom_event_contact_idContact IDstringContact ID associated with the event (custom event field)
custom_event_opportunity_idOpportunity IDstringOpportunity ID associated with the event (custom event field)
custom_event_detail_1Detail 1stringAdditional custom detail field 1
custom_event_detail_2Detail 2stringAdditional custom detail field 2
custom_event_noteNotestringFree-text note associated with the event
account_typeAccount TypestringAccount classification (e.g., Customer, Prospect)
streetStreetstringAccount street address
cityCitystringAccount city
stateStatestringAccount state or region
zip_codeZip CodestringAccount postal code
countryCountrystringAccount country
websiteWebsitestringAccount website URL
industryIndustrystringIndustry classification of the account
territoryTerritorystringSales territory the account is assigned to
number_of_employeesNumber of EmployeesnumberReported employee count for the account
open_opp_countOpen OppsnumberCount of open opportunities on the account
closed_opp_countClosed OppsnumberCount of closed opportunities on the account
is_customerIs CustomerbooleanWhether the account is flagged as a customer
annual_revenueAnnual RevenuecurrencyReported annual revenue of the account
sic_codeSIC#stringSIC industry classification code
naics_codeNAICS#stringNAICS industry classification code
nces_idNCES IDstringNCES identifier (education sector)
duns_numberDUNS NumberstringDun & Bradstreet DUNS identifier
phone_numberPhone NumberstringAccount phone number
account_acvAccount ACVcurrencyAnnual contract value attributed to the account
open_pipeline_amountOpen Pipeline AmountcurrencyTotal value of open pipeline on the account
closed_won_opp_countClosed Won OppsnumberCount of closed-won opportunities on the account
owner_nameOwner NamenameFull name of the account owner
owner_emailOwner EmailemailEmail of the account owner
owner_titleOwner TitletitleJob title of the account owner
owner_phoneOwner PhonephonePhone of the account owner
owner_divisionOwner DivisionstringDivision the account owner belongs to
partner_streetPartner Org StreetstringPartner organization street address
partner_cityPartner Org CitystringPartner organization city
partner_statePartner Org StatestringPartner organization state or region
partner_countryPartner Org CountrystringPartner organization country
partner_zip_codePartner Org Zip CodestringPartner organization postal code
partner_owner_namePartner Org Manager NamenameName of the internal manager owning the partner relationship
partner_owner_emailPartner Org Manager EmailemailEmail of the internal partner manager
partner_owner_phonePartner Org Manager PhonephonePhone of the internal partner manager
partner_typePartner Org TypestringType of partner (e.g., reseller, ISV, SI)
partner_statusPartner Org StatusstringConnection status of the partner organization
partner_websitePartner Org WebsitestringWebsite of the partner organization
partner_crm_record_idPartner Org CRM Record IDstringPartner organization identifier in the CRM
partner_prm_record_idPartner Org PRM Record IDstringPartner organization identifier in the PRM
partner_average_referral_deal_sizePartner Org Avg Referral Deal SizecurrencyAverage referral deal size for the partner organization

Filters are passed as key-value pairs in the filters object of the ReportRequest body. The key is the column name (as returned in the response content objects), and the value is a string that encodes the filter operation, using special suffixes and delimiters.

OperationSuffixValue FormatDescription
Exact match(none)value1-,-value2-,-value3Matches rows where the field equals any of the values (OR logic).
Not equal-!-value1-,-value2-!-Excludes rows matching any of the values (AND logic). NULLs are preserved.
Contains-?-search1-,-search2-?-Case-insensitive substring match. Row must contain all terms (AND logic).
Does not contain-^-exclude1-,-exclude2-^-Case-insensitive substring exclusion. Row must not contain any of the terms (AND logic).
Range<->min<->maxMatches rows where the field value falls between min and max (inclusive).

Use -,- to separate multiple values within a single filter:

"event_type_display_name": "Action List-,-Workflow"

This matches rows where event_type_display_name is “Action List” OR “Workflow”.

Column TypeExact MatchNot EqualContainsDoes Not ContainRange
StringYYYY
BooleanY
UUIDYYYY
DateY
Number (int)Y
Currency / DoubleY

String / UUID — pass the display value as a string:

{
"partner_org_name": "Example Pharma Inc."
}
{
"partner_org_name": "Example Pharma Inc.-,-Example Networks Inc."
}
{
"event_name": "Pipeline-?-"
}
{
"event_name": "Test-^-"
}
{
"event_type_display_name": "Action List-,-Workflow-!-"
}

Boolean — pass "true" or "false":

{
"is_customer": "true"
}

Date — pass epoch timestamps (seconds) as a range:

{
"event_date": "1700000000<->1760000000"
}

Number / Currency — pass numeric values as a range:

{
"open_opp_count": "1<->10"
}

Before building a filter, you can use the /filterdata endpoint to retrieve the available values for any column. This is a paginated endpoint — pass the column name as the filterField query parameter.

POST /v1/report-analytics/report/ATTRIBUTION_EVENTS/filterdata?filterField={columnName}

For string columns, the response contains the distinct values you can use in an exact-match or contains filter. For numeric/date columns, the response includes filterRangeMin and filterRangeMax to help you build a range filter.

Page size: The default page size is 20. You can request up to 2000 results per page by setting the size query parameter (e.g. size=200).

Example: get available values for event_type_display_name:

Terminal window
curl -X POST \
"https://reports-analytics.partnertap.com/v1/report-analytics/report/ATTRIBUTION_EVENTS/filterdata?filterField=event_type_display_name&page=0&size=10" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{}'

Response:

{
"totalElements": 6,
"totalPages": 1,
"number": 0,
"size": 10,
"content": [
{
"filterData": "Action List",
"filterRangeMin": null,
"filterRangeMax": null,
"filterType": "STRING"
},
{
"filterData": "Workflow",
"filterRangeMin": null,
"filterRangeMax": null,
"filterType": "STRING"
}
]
}

You can then take a filterData value from the response and use it directly in a /records filter:

{
"filters": {
"event_type_display_name": "Action List"
}
}

Example: get range bounds for event_date:

Terminal window
curl -X POST \
"https://reports-analytics.partnertap.com/v1/report-analytics/report/ATTRIBUTION_EVENTS/filterdata?filterField=event_date&page=0&size=1" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{}'

Response:

{
"totalElements": 1,
"content": [
{
"filterData": null,
"filterRangeMin": 1700000000,
"filterRangeMax": 1760000000,
"filterType": "DATE"
}
]
}

Use the min/max to build a range filter:

{
"filters": {
"event_date": "1700000000<->1760000000"
}
}

All filters in the filters object are combined with AND logic:

{
"filters": {
"partner_org_name": "Example Pharma Inc.",
"event_type_display_name": "Action List",
"event_date": "1700000000<->1760000000"
}
}

This returns rows where the partner org is “Example Pharma Inc.” AND the event type is “Action List” AND the event date falls within the given range.

Example: Filtering by Event Type and Partner

Section titled “Example: Filtering by Event Type and Partner”
Terminal window
curl -X POST \
"https://reports-analytics.partnertap.com/v1/report-analytics/report/ATTRIBUTION_EVENTS/records?page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"filters": {
"partner_org_name": "Example Pharma Inc.",
"event_type_display_name": "Action List-,-Workflow"
}
}'

EndpointMethodDescription
/v1/report-analytics/report/ATTRIBUTION_EVENTS/columnsPOSTGet available columns for the report
/v1/report-analytics/report/ATTRIBUTION_EVENTS/filterdataPOSTGet filter values for a column
/v1/attribution/event-typesGETList the valid eventTypeCodes to use in context
/v1/channelecosystem/recordsPOSTList your connected partners; use the companyPartnerPublicId values in context.partnerPublicIds. See All Partner Organizations.