List the contacts at one partner company
GET https://api.suger.cloud/org/{orgId}/prm/partner/{partnerId}/contacts
List the enrichment-sourced people at one partner company: name, email, job title, LinkedIn URL, seniority, and which one is the primary (highest-seniority) contact. These come from the company-enrichment record for the partner (Apollo), so a partnership Fours has not enriched returns an empty array. An empty result is normal and common; it is not a failure — do not retry it, and do not report it as "this partner has no contacts" without saying where the list comes from. An empty array here does NOT mean nobody is known. This operation does not read the partnership's CRM contacts, its partner-portal users, or the recipients of invitations sent to it. In particular the partner's champion contact is NOT here — it is `info.partnerChampionContact` on GetPrmPartnerDetail. Check there before telling a seller no contact exists, and use ListPrmInvitations for who has actually been written to. With scope=all the operation instead returns the partnership's whole contact list, the one the console's Relationship Hub shows: the linked CRM Account's contacts, the partner's portal users, the Team on the partner's deal registrations, and contacts added in the hub, merged by email. Each row then also carries firstName, lastName, role, source, syncStatus (against the linked CRM Account) and portal (partner-portal access), and can be filtered with q, role, source and syncStatus. People on your own email domain are left out unless includeOwnDomain=true. Without scope=all those parameters are refused with 400. Here "partner" means a company in your own partner program, addressed by its partnership id. Do not confuse it with GetPartnerContacts, which returns cloud-provider representatives (AWS, Azure, GCP) for a customer company addressed by email domain. For the seller-side team on a co-sell opportunity, use the co-sell operations instead.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orgId | path | string | yes | Organization ID |
partnerId | path | string | yes | Partner ID |
scope | query | string | no | enriched (default) or all |
q | query | string | no | scope=all only: match name, email, title or role |
role | query | string | no | scope=all only: PrmContactRole |
source | query | string | no | scope=all only: PrmContactSource |
syncStatus | query | string | no | scope=all only: PrmContactSyncStatus |
includeOwnDomain | query | boolean | no | scope=all only: also return people on your own email domain, flagged ownDomain |
Responses
200 — OK
Content-Type: application/json
PartnerContact fields:
| Field | Type | Required | Description |
|---|---|---|---|
apolloId | string | no | ApolloID is the Apollo.io person ID for re-enrichment. |
crmContactId | string | no | CrmContactID is the person's record under the linked CRM Account. |
email | string | no | Email is the contact's verified email address. |
enrichedAt | string | no | EnrichedAt is the RFC3339 timestamp of the last enrichment. |
firstName | string | no | |
id | string | no | ID is the partnership_contact row id. Empty until someone acted on the person (added, edited, synced, removed); address such a person by email. |
invitationId | string | no | InvitationID and InvitedAt describe the pending invitation when Portal is INVITED. |
invitedAt | string | no | |
isPrimary | boolean | no | IsPrimary indicates this is the highest-seniority partnership contact. |
lastActivityAt | string | no | LastActivityAt is the person's last sign-in to the partner portal. |
lastName | string | no | |
linkedinUrl | string | no | LinkedinURL is the contact's LinkedIn profile URL. |
name | string | no | Name is the contact's full name. |
ownDomain | boolean | no | OwnDomain marks a person on the ISV's own email domain. Such rows are returned only with includeOwnDomain and are never synced, invited or made champion. |
phone | string | no | |
portal | PrmContactPortalStatus | no | |
role | PrmContactRole | no | |
seniority | string | no | Seniority is the contact's seniority level (e.g., "vp", "director", "manager", "ic"). |
source | PrmContactSource | no | |
syncError | string | no | SyncError is the CRM's error from the last failed sync, verbatim. |
syncStatus | PrmContactSyncStatus | no | |
title | string | no | Title is the contact's job title/role (e.g., "VP of Partnerships"). |
400 — Bad request error
Content-Type: application/json
Example
Generated from this operation's schema. Values are placeholders —
substitute your own ids, and set SUGER_TOKEN to a bearer token
from the OAuth client-credentials exchange.
Request
curl -X GET 'https://api.suger.cloud/org/{orgId}/prm/partner/{partnerId}/contacts' \
-H "Authorization: Bearer $SUGER_TOKEN" Response — 200
[
{
"apolloId": "01H0000000000000000000",
"crmContactId": "01H0000000000000000000",
"email": "buyer@example.com",
"enrichedAt": "string",
"firstName": "Acme Corp",
"id": "01H0000000000000000000",
"invitationId": "01H0000000000000000000",
"invitedAt": "2026-01-31T12:00:00Z",
"isPrimary": true,
"lastActivityAt": "2026-01-31T12:00:00Z",
"lastName": "Acme Corp",
"linkedinUrl": "https://example.com"
}
] Error — 400
"string" View as Markdown · API reference overview
Spotted something wrong or out of date on this page? Tell us and we'll correct it.