Skip to content

Pipeline Attribution Detail API Guide

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

The Pipeline Attribution Detail report links individual attribution events to the new opportunities that resulted from partner-influenced activity. Each row represents an attribution event tied to a new opportunity (a “NEW Opp”), including the opportunity’s name, amount, created date, the number of days from the event to the new opp, the partner credited with the event, and the event’s type, subtype, source, and description. Use this report to trace which partner events drove pipeline.

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 Pipeline Attribution Detail report.

POST /v1/report-analytics/report/PIPELINE_ATTRIBUTION_DETAIL/records?page=0&size=20&sort=columnName,asc
Content-Type: application/json
ParameterTypeRequiredDescription
reportTypestringYesMust be PIPELINE_ATTRIBUTION_DETAIL
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,
"oppCreatedDateDays": 90
}
}

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 and opportunity history. See Required Context Parameters below.

The Pipeline Attribution 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 windows for the attribution event and the new opportunity.

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.
oppCreatedDateDaysintegerNoConvenience window — limits results to opportunities created within the last N days from now. Ignored when oppCreatedDateStart and oppCreatedDateEnd are both set.
oppCreatedDateStartstringNoInclusive lower bound of the opportunity-created window (epoch seconds, as a string). Must be paired with oppCreatedDateEnd. Takes precedence over oppCreatedDateDays.
oppCreatedDateEndstringNoInclusive upper bound of the opportunity-created window (epoch seconds, as a string). Must be paired with oppCreatedDateStart. Takes precedence over oppCreatedDateDays.

Date scoping rules (apply independently to the event date and the opportunity-created date):

  • If both *Start and *End are provided, an inclusive range filter is applied.
  • Else if *Days is provided, results are limited to the last N days from now.
  • Otherwise, no filter is applied on that date. For performance, always include a date scope on both.

Example with explicit ranges for both event date and opp-created date:

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

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

{
"totalElements": 312,
"totalPages": 16,
"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",
"opp_name": "Example Logistics — Q4 Expansion",
"opp_amount": 125000.00,
"opp_created_date": 1722705610,
"number_days_to_new_opp": 14,
"partner_org_name": "Example Pharma Inc.",
"event_date": 1721472810,
"event_type_display_name": "Action List",
"event_subtype_display_name": "Action List Downloaded",
"event_source": "PartnerTap",
"event_name": "Q3 Pipeline Push - Logistics",
"event_description": "Action list 'Q3 Pipeline Push - Logistics' was downloaded by Jane Doe.",
"company_partner_public_id": "c1727859-692f-499e-8c2a-b1fa50aa1a65",
"top_parent_crm_account_name": "Example Logistics Group",
"opp_crm_opportunity_id": "006XYZ789"
}
],
"noDataFoundMessage": null
}
Terminal window
curl -X POST \
"https://reports-analytics.partnertap.com/v1/report-analytics/report/PIPELINE_ATTRIBUTION_DETAIL/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,
"oppCreatedDateDays": 90
}
}'

Here are all of the standard fields for the Pipeline Attribution 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. Columns prefixed with “opp_” describe the new opportunity (“NEW Opp”) that the attribution event is linked to.

API NameDisplay NameTypeDescription
account_nameAccount NamestringName of the account associated with the new opportunity
opp_nameNEW Opp NamestringName of the new opportunity influenced by the partner activity
opp_amountNEW Opp AmountcurrencyAmount of the new opportunity
opp_created_dateNEW Opp Created DatedateDate the new opportunity was created (epoch seconds)
number_days_to_new_oppNumber Days to New OppnumberNumber of days between the attribution event and the new opportunity
partner_org_namePartner Org NamestringName of the partner organization credited with the event
event_dateAttribution Event DatedateDate the attribution event occurred (epoch seconds)
event_type_display_nameAttribution Event TypestringType classification of the event
event_subtype_display_nameAttribution Event SubtypestringMore specific subtype of the event
event_sourceAttribution Event SourcestringSystem or source that produced the event (e.g., PartnerTap, CRM)
event_nameAttribution Event NamestringDisplay name of the specific event
event_descriptionAttribution Event DescriptionstringHuman-readable description of what happened
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
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
opp_crm_opportunity_idNEW Opp IDstringUnique identifier of the new opportunity in the source CRM
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 NumberphoneAccount 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
opp_crm_account_idNEW Opp Linked Account IDstringCRM account ID the new opportunity is linked to
opp_stage_nameNEW Opp StagestringStage of the new opportunity
opp_close_dateNEW Opp Close DatedateClose date of the new opportunity (epoch seconds)
opp_is_wonNEW Opp Is WonbooleanWhether the new opportunity is marked as won
opp_opportunity_typeNEW Opp TypestringType of the new opportunity
opp_is_closedNEW Opp Is ClosedbooleanWhether the new opportunity is closed
opp_opportunity_owner_nameNEW Opp Owner NamenameFull name of the new opportunity’s owner
opp_opportunity_owner_emailNEW Opp Owner EmailemailEmail of the new opportunity’s owner
opp_opportunity_owner_titleNEW Opp Owner TitletitleJob title of the new opportunity’s owner
opp_opportunity_owner_phoneNEW Opp Owner PhonephonePhone of the new opportunity’s owner
opp_last_modified_dateNEW Opp Last Modified DatedateLast modified date of the new opportunity (epoch seconds)
opp_account_nameNEW Opp Account NamestringAccount name on the new opportunity
opp_probabilityNEW Opp ProbabilitynumberWin probability percent for the new opportunity
opp_expected_revenueNEW Opp Expected RevenuecurrencyExpected revenue for the new opportunity
opp_pt_statusNEW Opp PT StatusstringPartnerTap status of the new opportunity

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:

"partner_org_name": "Example Pharma Inc.-,-Example Networks Inc."

This matches rows where partner_org_name is “Example Pharma Inc.” OR “Example Networks Inc.”.

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."
}
{
"opp_name": "Expansion-?-"
}
{
"opp_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:

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

Number / Currency — pass numeric values as a range:

{
"opp_amount": "50000<->250000"
}
{
"number_days_to_new_opp": "0<->30"
}

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/PIPELINE_ATTRIBUTION_DETAIL/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 partner_org_name:

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

Response:

{
"totalElements": 12,
"totalPages": 2,
"number": 0,
"size": 10,
"content": [
{
"filterData": "Example Pharma Inc.",
"filterRangeMin": null,
"filterRangeMax": null,
"filterType": "STRING"
},
{
"filterData": "Example Networks Inc.",
"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": {
"partner_org_name": "Example Pharma Inc."
}
}

Example: get range bounds for opp_amount:

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

Response:

{
"totalElements": 1,
"content": [
{
"filterData": null,
"filterRangeMin": 0.0,
"filterRangeMax": 500000000.0,
"filterType": "CURRENCY"
}
]
}

Use the min/max to build a range filter:

{
"filters": {
"opp_amount": "100000<->500000"
}
}

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

{
"filters": {
"partner_org_name": "Example Pharma Inc.",
"opp_amount": "100000<->500000",
"opp_created_date": "1700000000<->1760000000"
}
}

This returns rows where the partner org is “Example Pharma Inc.” AND the new opp amount is between $100K-$500K AND the new opp was created within the given date range.

Example: Filtering New Opps Created in a Window

Section titled “Example: Filtering New Opps Created in a Window”
Terminal window
curl -X POST \
"https://reports-analytics.partnertap.com/v1/report-analytics/report/PIPELINE_ATTRIBUTION_DETAIL/records?page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"filters": {
"partner_org_name": "Example Pharma Inc.",
"opp_created_date": "1722470400<->1725148800",
"event_type_display_name": "Action List-,-Workflow"
}
}'

EndpointMethodDescription
/v1/report-analytics/report/PIPELINE_ATTRIBUTION_DETAIL/columnsPOSTGet available columns for the report
/v1/report-analytics/report/PIPELINE_ATTRIBUTION_DETAIL/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.