Skip to content

Partner Org Report API Guide

This document is a guide for using the PartnerTap Analytics API for retrieving the Partner Org report.

The Partner Org report shows all accounts that you and a specific partner organization have in common in your overlapping data set. This report helps you understand the scope of overlap with a particular partner. Before pulling the report, you must first retrieve the list of your connected partner organizations to obtain the partner identifier (companyPartnerPublicId) needed to query the matched accounts.

All endpoints follow the pattern /v1/channelecosystem/... and accept a ReportRequestJsonDto body for specifying the report type, filters, and search criteria.


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.


Before you can pull the Partner Org Matched Accounts report, you need the companyPartnerPublicId for the partner you want to query. Use the All Partner Organizations report to retrieve your connected partners.

POST /v1/channelecosystem/records?page=0&size=20&sort=columnName,asc
Content-Type: application/json
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.
{
"search": "",
"filters": {},
"mapByLocations": false,
"channelReportType": "PARTNER_ORG_CONNECTED_PARTNER_ORGS",
"matchingType": "MUTUAL"
}
FieldTypeRequiredDescription
channelReportTypestringYesMust be "PARTNER_ORG_CONNECTED_PARTNER_ORGS"
matchingTypestringNoUse "MUTUAL" to get mutually connected partner orgs
searchstringNoFree-text search across partner org fields (default: "")
filtersobjectNoKey-value pairs for filtering (see Filter Language)
mapByLocationsbooleanNoDefault: false

200 OK — Returns a paginated list of partner organizations.

{
"totalElements": 42,
"totalPages": 3,
"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": [
{
"companyPartnerPublicId": "c1727859-692f-499e-8c2a-b1fa50aa1a65",
"partnerOrgName": "Example Pharma Inc."
}
]
}

Important: Save the companyPartnerPublicId value from each partner org record. You will need it in the next step to query the matched accounts for that specific partner.

Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/records?page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"search": "",
"filters": {},
"mapByLocations": false,
"channelReportType": "PARTNER_ORG_CONNECTED_PARTNER_ORGS",
"matchingType": "MUTUAL"
}'

Returns the paginated list of accounts that overlap between you and a specific partner organization.

POST /v1/channelecosystem/records?page=0&size=20&sort=columnName,asc
Content-Type: application/json
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.
{
"search": "",
"filters": {},
"mapByLocations": false,
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "<PARTNER_ORG_UUID>"
}
FieldTypeRequiredDescription
channelReportTypestringYesMust be "PARTNER_ORG_MATCHED_ACCOUNTS"
matchingTypestringYesUse "MUTUAL" for mutually matched accounts
companyPartnerPublicIdstringYesThe UUID of the partner org, obtained from the Partner Organizations response
searchstringNoFree-text search across account fields (default: "")
filtersobjectNoKey-value pairs for filtering (see Filter Language)
mapByLocationsbooleanNoDefault: false

200 OK — Returns a paginated response containing the matched account records.

{
"totalElements": 1523,
"totalPages": 77,
"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": [
{
"name": "RUD Fleet",
"accountType": "Prospect",
"crmAccountId": "001ABC123",
"city": "Miami",
"state": "Florida",
"country": "US",
"isCustomer": false,
"partnerFields": {
"partneraccountname": "RUD Fleet",
"partneraccounttype": "Prospect",
"partnercrmaccountid": "MANUAL-26505afe-fdd8-4f0a-a2c5-a9a06dd5f3c3",
"partnercountry": "US",
"partnerzipcode": "33177",
"partneriscustomer": false,
"partnerisemployee": true,
"partnerowner": " ",
"partnerowneridname": "Anonymous",
"partnerowneridemail": "Anonymous",
"partnerowneridphone": "Anonymous",
"partnerowneridtitle": "Anonymous",
"partnertype": " ",
"partnerregistrationdate": 1746706810,
"partnerpartnereddate": 1694607610,
"partnertargetorgsize": "Small Business 51 - 250",
"partnerproduct": "",
"partnersystemssold": 89022,
"partnerisactive": "",
"partnerispartnerpaid": false,
"partnerorginternalid": 6
}
}
]
}

Each record in content represents an account that overlaps with the specified partner. Your own account fields appear at the top level of each record. Fields available depend on your partner organization’s share settings and configured columns. Use the Columns endpoint to discover which fields are available.

Partner Fields: All data shared by the partner is returned in the partnerFields object on each record. Every key inside partnerFields is prefixed with partner (e.g., partneraccountname, partnercountry, partnersystemssold). This includes both standard partner fields and any custom fields the partner has chosen to share. The fields that appear depend on the partner’s share settings and available data.

Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/records?page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"search": "",
"filters": {},
"mapByLocations": false,
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "c1727859-692f-499e-8c2a-b1fa50aa1a65"
}'

Retrieve the list of available columns for a report type. This helps you understand which fields will appear in the records response and which fields you can filter on. Columns fall into three categories:

  • Standard — Built-in fields available on every report (e.g., Account Name, City, Country). These have columnClassification: "STANDARD" and isPartnerData: false.
  • Custom — Fields imported from your CRM or spreadsheet uploads. These have columnClassification: "CUSTOM_CRM_FIELD" or "CUSTOM_CRM_OBJECT" and isPartnerData: false.
  • Partner Shared — Fields shared by the partner organization. These have isPartnerData: true and their keys are prefixed with partner (e.g., partneraccountname, partnersystemssold). Partner shared columns have source: null and columnClassification: null. In the records response, these fields appear inside the partnerFields object on each record.
POST /v1/channelecosystem/columns
Content-Type: application/json

For Partner Org Matched Accounts:

{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "<PARTNER_ORG_UUID>"
}
FieldTypeRequiredDescription
channelReportTypestringYesReport type — "PARTNER_ORG_MATCHED_ACCOUNTS" or "PARTNER_ORG_CONNECTED_PARTNER_ORGS"
matchingTypestringNoUse "MUTUAL" for mutually connected orgs / matched accounts
companyPartnerPublicIdstringConditionalRequired when channelReportType is "PARTNER_ORG_MATCHED_ACCOUNTS". The UUID of the partner org, obtained from the Partner Organizations response

200 OK — Returns an array of column metadata objects.

Standard column example:

{
"title": "Account Name",
"key": "name",
"type": "string",
"isFromOtherFields": false,
"isJson": false,
"isHidden": false,
"otherFieldsPrefix": null,
"otherFieldsJsonPrefix": null,
"active": true,
"values": {},
"crmAccountBaseUri": null,
"crmOpportunityBaseUri": null,
"columnIndex": 0,
"isPartnerData": false,
"prefix": null,
"color": null,
"source": "standard",
"columnClassification": "STANDARD"
}

Partner shared custom column example:

{
"title": "Partner Systems Sold",
"key": "partnersystemssold",
"type": "number",
"isFromOtherFields": false,
"isJson": false,
"isHidden": false,
"otherFieldsPrefix": null,
"otherFieldsJsonPrefix": null,
"active": true,
"values": {},
"crmAccountBaseUri": null,
"crmOpportunityBaseUri": null,
"columnIndex": 8,
"isPartnerData": true,
"prefix": null,
"color": null,
"source": null,
"columnClassification": null
}

Note: Partner shared columns always have isPartnerData: true, keys prefixed with partner, and source / columnClassification set to null. Standard and custom columns have isPartnerData: false with non-null source and columnClassification values.

FieldTypeDescription
titlestringHuman-readable column name
keystringThe field key used in records, filters, and sorting. Partner columns are prefixed with partner
typestringData type of the column (e.g., string, number, currency, date, boolean)
activebooleanWhether the column is currently active/visible
isPartnerDatabooleantrue for partner shared columns, false for your own standard/custom columns
isHiddenbooleanWhether the column is hidden by default
columnIndexintegerDisplay order index
sourcestring|nullOrigin of the column ("standard", "custom", etc.). null for partner shared columns
columnClassificationstring|null"STANDARD", "CUSTOM_CRM_FIELD", or "CUSTOM_CRM_OBJECT". null for partner shared columns
isFromOtherFieldsbooleanWhether the column is derived from other fields
isJsonbooleanWhether the column value is stored as JSON
valuesobjectPreset value mappings for the column (typically empty {})
crmAccountBaseUristring|nullBase URI for linking to CRM account records (if applicable)
crmOpportunityBaseUristring|nullBase URI for linking to CRM opportunity records (if applicable)
Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/columns" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "c1727859-692f-499e-8c2a-b1fa50aa1a65"
}'

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/channelecosystem/filterdata?filterField={columnName}&page=0&size=20
Content-Type: application/json
ParameterTypeRequiredDescription
filterFieldstringYesThe column name to retrieve filter values for
pageintegerNoZero-based page index (default: 0)
sizeintegerNoNumber of results per page (default: 20, max: 2000)

For Partner Org Matched Accounts:

{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"mapByLocations": false,
"companyPartnerPublicId": "<PARTNER_ORG_UUID>",
"byOrg": false
}

For All Partner Organizations:

{
"channelReportType": "PARTNER_ORG_CONNECTED_PARTNER_ORGS",
"matchingType": "ALL_PARTNER_ORGS",
"mapByLocations": false,
"byOrg": false
}

200 OK — For string columns, the response contains distinct values. For numeric/date columns, the response includes range bounds.

String column response:

{
"totalElements": 15,
"totalPages": 1,
"number": 0,
"size": 20,
"content": [
{
"filterData": "Customer",
"filterRangeMin": null,
"filterRangeMax": null,
"filterType": "STRING"
},
{
"filterData": "Prospect",
"filterRangeMin": null,
"filterRangeMax": null,
"filterType": "STRING"
}
]
}

Numeric/currency column response:

{
"totalElements": 1,
"content": [
{
"filterData": null,
"filterRangeMin": 0.0,
"filterRangeMax": 500000000.0,
"filterType": "CURRENCY"
}
]
}
Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/filterdata?filterField=accountType&page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"mapByLocations": false,
"companyPartnerPublicId": "c1727859-692f-499e-8c2a-b1fa50aa1a65",
"byOrg": false
}'

Filters are passed as key-value pairs in the filters object of the request body. The key is the column name (as returned by the /columns endpoint), 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:

"accountType": "Customer-,-Prospect"

This matches rows where accountType is “Customer” OR “Prospect”.

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

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

{
"state": "Oklahoma"
}
{
"state": "Oklahoma-,-Texas-,-California"
}
{
"name": "Example-?-"
}
{
"name": "Test-^-"
}
{
"state": "Oklahoma-,-Texas-!-"
}

Boolean — pass "true" or "false":

{
"isCustomer": "true"
}

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

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

Number / Currency — pass numeric values as a range:

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

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

{
"filters": {
"state": "Oklahoma",
"accountType": "Customer",
"name": "Example-?-"
}
}

This returns rows where state is “Oklahoma” AND account type is “Customer” AND account name contains “Example”.

Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/records?page=0&size=20" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"search": "",
"filters": {
"accountType": "Customer",
"state": "Oklahoma-,-Texas"
},
"mapByLocations": false,
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "c1727859-692f-499e-8c2a-b1fa50aa1a65"
}'

Here is the recommended step-by-step workflow for consuming the Partner Org report:

Step 1: Get your list of partner organizations

Section titled “Step 1: Get your list of partner organizations”
Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/records?page=0&size=100" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_CONNECTED_PARTNER_ORGS",
"matchingType": "MUTUAL"
}'

From the response, identify the partner you want and note its companyPartnerPublicId.

Step 2: (Optional) Discover available columns

Section titled “Step 2: (Optional) Discover available columns”
Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/columns" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "<PARTNER_ORG_UUID>"
}'

Step 3: (Optional) Discover filter values for a column

Section titled “Step 3: (Optional) Discover filter values for a column”
Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/filterdata?filterField=accountType" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "<PARTNER_ORG_UUID>",
"byOrg": false
}'

Step 4: Retrieve the Partner Org Matched Accounts report

Section titled “Step 4: Retrieve the Partner Org Matched Accounts report”
Terminal window
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/records?page=0&size=100" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "<PARTNER_ORG_UUID>",
"filters": {
"accountType": "Customer"
}
}'

Increment the page parameter to retrieve subsequent pages until last is true in the response:

Terminal window
# Page 2
curl -X POST \
"https://reports.partnertap.com/v1/channelecosystem/records?page=1&size=100" \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{
"channelReportType": "PARTNER_ORG_MATCHED_ACCOUNTS",
"matchingType": "MUTUAL",
"companyPartnerPublicId": "<PARTNER_ORG_UUID>"
}'

EndpointMethodDescription
/v1/channelecosystem/recordsPOSTGet paginated report records
/v1/channelecosystem/columnsPOSTGet available columns for a report type
/v1/channelecosystem/filterdataPOSTGet filter values for a specific column
/v1/channelecosystem/report-namesGETList available report types with their columns

These are the standard fields returned by the PARTNER_ORG_CONNECTED_PARTNER_ORGS report. Use the key value when filtering or sorting.

KeyDisplay NameType
partnerNamePartner Orgname
partnerWebsitePartner Websitestring
companyPartnerPublicIdPT Partner Org Idstring
partnerTypePartner Typestring
recommendedRecommended Partnerboolean
firstConnectedDateFirst Connected Datedate
mostRecentConnectedDateMost Recent Connected Datedate
activeConnectionsActive Connectionsnumber
lastPartnerSheetUploadDateLast Partner Sheet Upload Datedate
spreadsheetsSharedSpreadsheets Uploadednumber
partnerOwnerPartner Managername
partnerOwnerEmailPartner Manager Emailemail
partnerOwnerPhonePartner Manager Phonestring

Appendix B: Partner Org Matched Accounts Fields

Section titled “Appendix B: Partner Org Matched Accounts Fields”

These are the standard fields returned by the PARTNER_ORG_MATCHED_ACCOUNTS report. If you have custom CRM fields, they will also appear in the response. Use the key value when filtering or sorting.

KeyDisplay NameType
accountNameAccount Namestring
dunsNumberDUNS Numberstring
companyPartnerPublicIdCompany Partner Public Idstring
companyPartnerNamePartner Orgname
crmRecordIdCRM Record Idstring
prmRecordIdPRM Record Idstring
partnerTypePartner Typestring
avgDealSizeAverage Deal Sizecurrency
partnerOwnerPartner Managername
accountTypeAccount Typestring
cityCitystring
countryCountrystring
crmAccountIdAccount Idstring
parent_account_idParent Account Idstring
divisionsDivisionsstring
industryIndustrystring
isCustomerIs Customerboolean
numberOfEmployeesEmployeesnumber
naicsCodeNAICSstring
ncesIdNCES IDstring
sicCodeSICstring
annualRevenueAnnual Revenuecurrency
openOppCountOpen Oppsnumber
closedOppCountClosed Oppsnumber
stateStatestring
streetStreetstring
territoryTerritorystring
websiteWebsitestring
zipCodeZip Codestring