Update one partner relationship
PATCH https://api.suger.cloud/org/{orgId}/prm/partner/{partnerId}
Update the editable fields of one partner relationship: the assigned partner manager, the relationship status, the partner types, and the profile fields under `info` (company details, cloud account identifiers, CRM account link, champion contact, relationship and engagement type, tier, portal template, commission plan, Slack channel). Every field is optional and merges independently — send only what changes; omitted fields keep their stored value. Set `partnerManager` to "__unassigned" to clear it. `partnerTier` must name a tier defined in this organization's partnership config, and `engagementType` must be a standard engagement type; either one being unknown fails the request. Revenue, deal counts, recommendation scores and AI summaries are computed by Suger and cannot be set here. Use GetPrmPartnerDetail to read a partner's current values before updating.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orgId | path | string | yes | Organization ID |
partnerId | path | string | yes | Partner ID |
Request Body
Required. Content-Type: application/json · Schema: PrmPartnerUpdate
PrmPartnerUpdate fields:
| Field | Type | Required | Description |
|---|---|---|---|
info | PrmPartnerUpdateInfo | no | |
partnerManager | string | no | PartnerManager is the assigned manager's identifier. Send "__unassigned" to clear it; omit to leave it unchanged. |
partnerTypes | array<string> | no | |
status | partnership.Status | no |
PrmPartnerUpdateInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
buyerIds | array<string> | no | BuyerIDs / SellerIDs are the partner's cloud account identifiers, edited from the partner profile's Cloud Account IDs card. |
channels | array<string> | no | |
crmAccountInfo | CrmAccountInfo | no | |
customCommissionPlanId | string | no | CustomCommissionPlanID assigns a custom commission plan to this partner. |
employees | string | no | |
engagementType | EngagementType | no | |
founded | string | no | |
location | string | no | |
name | string | no | |
partnerChampionContact | PartnerChampionContact | no | |
partnerTier | string | no | PartnerTier must reference a tier defined in this org's partnership config. |
partnerViewTemplateId | string | no | PartnerViewTemplateID assigns a partner-portal Overview template. |
relationshipType | RelationshipType | no | |
sellerIds | object | no | |
slackChannelId | string | no | |
slackChannelName | string | no | |
website | string | no |
CrmAccountInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
accountId | string | no | AccountID is the CRM account/company record ID. |
accountName | string | no | AccountName is the display name of the CRM account. |
provider | string | no | Provider identifies which CRM the account belongs to ("SALESFORCE" or "HUBSPOT"). |
PartnerChampionContact fields:
| Field | Type | Required | Description |
|---|---|---|---|
contactId | string | no | ContactID is the CRM contact record ID. |
email | string | no | Email is the contact's email address. |
name | string | no | Name is the contact's full name. |
title | string | no | Title is the contact's job title. |
Responses
200 — OK
Content-Type: application/json · Schema: orm.Partnership
orm.Partnership fields:
| Field | Type | Required | Description |
|---|---|---|---|
companyId | string | no | The partner's company ID from identity.buyer.company_id, used to group buyers across channels |
createTime | string | no | Creation timestamp |
domain | string | no | Lowercased email domain of the partner (the OTHER side of the relationship). Used for dedup/lookup when provisioning partnerships from inbound flows where the partner has no Suger org and no engagement_id pairing exists. |
globalCompanyId | string | no | FK to workload.global_company.id — links partnership to canonical company record for firmographic data |
id | string | no | ID of the ent. Unique partnership identifier (UUID) |
info | PartnershipInfo | no | |
lastActivityTime | string | no | Most recent activity timestamp (e.g., latest CPPO transaction), updated by sync job |
lastUpdateTime | string | no | Last update timestamp |
organizationId | string | no | The org that owns this partnership record (seller) |
partnerManager | string | no | Suger user ID of the internal partner manager/owner (FK to identity.user, ON DELETE SET NULL) |
partnerOrgId | string | no | The partner's own Suger org ID (nullable if partner is not a Suger org) |
partnerTypes | array<string> | no | Types of partner: RESELLER, SI (System Integrator), ISV, OTHER |
partnershipSince | string | no | When the partnership was established (e.g., first CPPO transaction date) |
status | partnership.Status | no |
PartnershipInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
aiOverview | PartnershipAiOverview | no | |
allowedRelationshipType | RelationshipType | no | |
buyerIds | array<string> | no | BuyerIDs lists the Suger internal buyer IDs grouped under this partnership. Used by frontend to query CPPO offers via the existing offer API. |
channels | array<string> | no | Channels lists the cloud marketplaces this partner operates on (e.g., ["AWS", "AZURE"]). |
crmAccountInfo | CrmAccountInfo | no | |
customCommissionPlanId | string | no | CustomCommissionPlanID points at one of the org's custom commission plans (partnership_config.info.customCommissionSettings[].id). Empty/unset means "use Standard Defaults". The share-cosell flow uses this to prepopulate Revenue Share fields per commission type at deal-create time. |
description | string | no | Description is a brief partner summary |
employees | string | no | Employees is the partner's employee count as a string, derived from enriched company info. |
engagementType | EngagementType | no | |
founded | string | no | Founded is the partner's founding year, derived from enriched company info. |
globalCompanyContactIds | array<string> | no | GlobalCompanyContactIds holds IDs of global_company_contact records linked to this partnership. Contacts are read from global_company_contact table using these IDs. |
location | string | no | Location is the partner's location (e.g., "Dover, Delaware"), derived from buyer company info. |
matchingAccounts | array<MatchingCrmAccount> | no | MatchingAccounts lists the CRM accounts whose domain matches the partner's managed accounts. Only populated for partnerships with SUGGESTED status. |
name | string | no | Name is the partner's display name, derived from the buyer with the most complete data. |
ourTier | PartnerTier | no | |
partnerBrand | PartnerBrand | no | |
partnerChampionContact | PartnerChampionContact | no | |
partnerTier | string | no | PartnerTier is the ID of the tier this partner is assigned in the owning org's ISV-defined tier hierarchy (PE-10176). References a PartnerTier.ID in the org's PartnershipConfigInfo.Tiers. Set to the default tier when the partnership is created. Empty means "fall back to the org's default tier" at read time (e.g. a tier was deleted). |
partnerViewTemplateId | string | no | PartnerViewTemplateID is the ID of the partner-portal Overview template (partnership_config.info.partnerViews.templates[].id) applied to THIS partner (design/partner-portal-customization). Empty/unset means "fall back to the org's Default Template" at render time. |
potentialRevenue | number | no | PotentialRevenue is the total opportunity amount from matching CRM accounts. Only populated for partnerships with SUGGESTED status. |
recommendationReason | string | no | RecommendationReason is an AI-generated human-readable explanation of why this partner is recommended. Only populated for partnerships with SUGGESTED status. |
recommendationScore | number | no | RecommendationScore is a normalized score (0.0–1.0) indicating how good a match this partner is for the ISV. Only populated for partnerships with SUGGESTED status. |
relationshipType | RelationshipType | no | |
revenueByChannel | object | no | RevenueByChannel is revenue broken down by cloud channel and YYYY-MM period. Example: {"AWS": {"2026-01": 50000}, "AZURE": {"2026-02": 30000}}. |
scoreBreakdown | RecommendationScoreBreakdown | no | |
sellerIds | object | no | SellerIDs maps cloud partner to the partner's cloud-specific account ID. AWS -> AWS Account ID (12-digit), AZURE -> Azure MPO Seller ID. Used by frontend to pre-populate the reseller account field when creating CPPOs. |
slackChannelId | string | no | SlackChannelID is the Slack channel this partner's broadcasts / co-sell activity post to. Empty/unset ⇒ no channel configured (PE-10527). |
slackChannelName | string | no | SlackChannelName caches the channel's display name (e.g. "partner-cloudsync-suger"). |
sugerCosellMetrics | PartnershipSugerCosellMetrics | no | |
suggestedRelationshipType | RelationshipType | no | |
totalDeals | integer | no | TotalDeals is the total count of CPPO-related offers for this partner. |
totalRevenue | number | no | TotalRevenue is the sum of disbursed CPPO-attributed revenue for this partner. |
upcomingRevenue | number | no | UpcomingRevenue is the total CommitAmount from active CPPO_OUT offers minus disbursed revenue. |
website | string | no | Website is the partner's domain, derived from enriched company info. |
PartnershipAiOverview fields:
| Field | Type | Required | Description |
|---|---|---|---|
cloudTier | string | no | CloudTier is the partner's cloud marketplace tier level. |
description | string | no | Description is a brief AI-generated summary of the partner company. |
employeeRange | string | no | EmployeeRange is the approximate employee count range (e.g., "100-500"). |
error | string | no | Error holds the error message if generation failed. |
foundedYear | string | no | FoundedYear is the year the company was founded. |
headquarters | string | no | Headquarters is the company's headquarters location (e.g., "San Francisco, CA, USA"). |
keyProducts | array<string> | no | KeyProducts lists the partner's key products or services. |
knownCustomers | array<string> | no | KnownCustomers lists notable customers of the partner. |
lastScraped | string | no | LastScraped is the timestamp of the last AI overview generation (RFC3339). |
retryCount | integer | no | RetryCount is the number of consecutive failed generation attempts for this partnership. The daily Sync Partnerships workflow caps retries at 3 and only retries after a 14-day backoff (see PE-9551). |
specializations | array<string> | no | Specializations lists the partner's technical specializations. |
status | string | no | Status indicates the generation result: empty for success, "failed" or "empty" on error. |
targetIndustries | array<string> | no | TargetIndustries lists the industries the partner focuses on. |
website | string | no | Website is the partner's website URL as reported by AI. |
CrmAccountInfo fields:
| Field | Type | Required | Description |
|---|---|---|---|
accountId | string | no | AccountID is the CRM account/company record ID. |
accountName | string | no | AccountName is the display name of the CRM account. |
provider | string | no | Provider identifies which CRM the account belongs to ("SALESFORCE" or "HUBSPOT"). |
MatchingCrmAccount fields:
| Field | Type | Required | Description |
|---|---|---|---|
accountId | string | no | AccountID is the CRM account record ID. |
accountName | string | no | AccountName is the display name of the CRM account. |
domain | string | no | Domain is the normalized domain of the CRM account's website. |
opportunityAmount | number | no | OpportunityAmount is the total opportunity revenue from this account. |
opportunityCount | integer | no | OpportunityCount is the number of opportunities on this account. |
PartnerTier fields:
| Field | Type | Required | Description |
|---|---|---|---|
benefits | string | no | Benefits is a freeform benefits line shown to partners. |
color | string | no | Color is the badge color as a hex string, e.g. "#d4a017". |
description | string | no | Description is shown to partners in the portal. |
id | string | no | ID is a stable identifier referenced by PartnershipInfo.PartnerTier. Assignments survive tier renames/recolors because they key on ID. |
name | string | no | Name is the display label, e.g. "Gold". |
PartnerBrand fields:
| Field | Type | Required | Description |
|---|---|---|---|
bannerTagline | string | no | |
coverStyle | string | no | |
logoFileKey | string | no | |
logoSignedUrl | string | no | |
primaryColor | string | no | |
secondaryColor | string | no |
PartnerChampionContact fields:
| Field | Type | Required | Description |
|---|---|---|---|
contactId | string | no | ContactID is the CRM contact record ID. |
email | string | no | Email is the contact's email address. |
name | string | no | Name is the contact's full name. |
title | string | no | Title is the contact's job title. |
RecommendationScoreBreakdown fields:
| Field | Type | Required | Description |
|---|---|---|---|
accountScores | array<AccountMatchScore> | no | AccountScores holds per-matched-account scoring details. |
isSugerUser | boolean | no | IsSugerUser is true if the partner is a Suger customer. |
matchCount | integer | no | MatchCount is the number of CRM accounts that matched. |
rawScore | number | no | RawScore is the unnormalized sum of account scores. |
sugerUserBonus | number | no | SugerUserBonus is the additive bonus for being a Suger user. |
totalIsvAccounts | integer | no | TotalISVAccounts is the total number of ISV CRM accounts (used for normalization). |
PartnershipSugerCosellMetrics fields:
| Field | Type | Required | Description |
|---|---|---|---|
activeDeals | integer | no | |
avgDealSize | number | no | |
dealsOverTime | array<PartnershipDealPeriod> | no | DealsOverTime holds quarterly deal counts for the Deals Over Time chart. |
lostDeals | integer | no | |
totalDealValue | number | no | |
totalDeals | integer | no | |
winRate | number | no | Percentage (0-100) |
wonDeals | integer | no |
AccountMatchScore fields:
| Field | Type | Required | Description |
|---|---|---|---|
accountName | string | no | AccountName is the CRM account name. |
baseConfidence | number | no | BaseConfidence is the managed account's confidence mapped to a float (HIGH=0.9, MEDIUM=0.6, LOW=0.3). |
domain | string | no | Domain is the matched domain. |
industryBonus | number | no | IndustryBonus is +0.05 if the CRM account industry matches the managed account industry. |
locationBonus | number | no | LocationBonus is +0.05 if the CRM account location overlaps with the managed account location. |
score | number | no | Score is the total score for this account match (base + bonuses, max 1.0). |
PartnershipDealPeriod fields:
| Field | Type | Required | Description |
|---|---|---|---|
count | integer | no | |
period | string | no | e.g., "2025-Q1" |
400 — Bad request error
Content-Type: application/json
View as Markdown · Interactive API reference
Spotted something wrong or out of date on this page? Tell us and we'll correct it.