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

NameInTypeRequiredDescription
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:

FieldTypeRequiredDescription
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.