Suger

Accept a partnership invitation received by this organization

POST https://api.suger.cloud/org/{orgId}/prm/invitation/{invitationId}/accept

Accept an invitation that another company sent to this organization, establishing the partnership. In one transaction it marks the invitation accepted, marks the sender's copy accepted, and creates or updates the partnership record on both sides, so the two organizations become partners together or not at all. Applies only to invitations this organization received: the invitation must be inbound, belong to this organization, still be in "Sent" state, and not have expired. Anything else is refused, and the cascade never applies partially. Find pending inbound invitations with ListPrmOrgInvitations. This forms a business relationship with another company and is visible to them immediately. DeclinePrmInAppInvitation is the opposite response; CancelPrmInvitation withdraws an invitation this organization sent, which is a different action.

Parameters

NameInTypeRequiredDescription
orgId path string yes Organization ID (recipient org)
invitationId path string yes Inbound invitation ID

Responses

200 — OK

Content-Type: application/json · Schema: partner.InAppInvitationResponseResult

partner.InAppInvitationResponseResult fields:

FieldTypeRequiredDescription
inbound orm.PartnerInvitation no
outbound orm.PartnerInvitation no
recipientPartnership orm.Partnership no
senderPartnership orm.Partnership no

orm.PartnerInvitation fields:

FieldTypeRequiredDescription
createTime string no Creation timestamp
createdBy string no ISV user ID who sent the invitation (outbound), null for inbound
direction string no OUTBOUND (ISV invites partner) or INBOUND (partner applies via public URL)
engagementId string no Shared identifier that pairs an outbound invitation with its inbound counterpart (Case A paired send, Cases B/C accept-synthesized). Null for non-paired rows.
expiresAt string no When the invitation expires. Defaults at the DB to 15 days after insert (CURRENT_TIMESTAMP + 15 days); past this it can no longer be accepted/declined and the daily cron marks it Expired.
id string no ID of the ent. Unique invitation identifier (UUID)
info PartnerInvitationInfo no
lastUpdateTime string no Last update timestamp
organizationId string no The ISV organization that owns this invitation
partnerOrganizationId string no The partner's Suger org ID, set on acceptance after org provisioning
partnershipId string no Target partnership. Nullable for inbound invitations before a partner record exists.
purpose string no Invitation purpose: network, account_overlap, deal_collaboration
respondedAt string no When the recipient responded (accepted or declined)
sentAt string no When the invitation was sent (outbound) or submitted (inbound)
status string no Invitation status: Sent, Accepted, Declined, Expired
trackingToken string no UUID token for accept/decline links (outbound) or form URL (inbound)

orm.Partnership fields:

FieldTypeRequiredDescription
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

PartnerInvitationInfo fields:

FieldTypeRequiredDescription
inbound InboundInvitationInfo no
outbound OutboundInvitationInfo no

PartnershipInfo fields:

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

InboundInvitationInfo fields:

FieldTypeRequiredDescription
formData object no FormData holds the submitted form field values.
formId string no FormID is the ID of the form configuration used for this submission.
senderOrgId string no SenderOrgID is the resolved Suger org of the applicant who submitted this inbound application (the sender / partner side). Optional: set at submit time only when the work-email domain matches exactly ONE production, PRM-enabled-or-PARTNER Suger org; empty when zero or multiple matched. Read at accept time to link the ISV-side partnership to this org and create the reciprocal partnership record on the sender side (PE-10710).
submitterEmail string no SubmitterEmail is the email of the partner who submitted the form.
submitterName string no SubmitterName is the name of the partner who submitted the form.

OutboundInvitationInfo fields:

FieldTypeRequiredDescription
acceptInitiatedAt string no AcceptInitiatedAt (RFC3339) is stamped when the recipient submits the public accept form (records intent + ResponseMessage) BEFORE signing in via Auth0. The authenticated finalize step requires it before verifying the Auth0 email against RecipientEmail and provisioning (PE-11397 two-step accept flow).
aiContext string no AIContext is additional context provided for AI email generation.
ccEmails array<string> no CcEmails is the list of CC email addresses.
contextMessage string no ContextMessage is the user-provided engagement context.
crmObjectId string no CrmObjectID is the CRM account record id (Salesforce Account Id) this invite was created from in the "From your CRM" flow (PE-10264/PE-10431). Threaded to acceptance so the created ISV-side partnership is linked to its CRM account (info.crmAccountInfo.accountId) — which the CRM document sync relies on. Empty for non-CRM invites. Salesforce-only today.
intendedChannels array<string> no IntendedChannels is the marketplace channel classification computed at send time from the recipient email's domain: ["Direct"] for Case B, the matched marketplace(s) for Case C, and the matched org's inferred channels (or ["Direct"]) for Case A. Used at acceptance to populate the ISV-side partnership's info.channels when an ISV-side partnership must be created from the invitation.
messageBody string no MessageBody is the final email body (HTML).
messageSubject string no MessageSubject is the final email subject line.
partnerCompanyName string no PartnerCompanyName is the free-text partner company name entered by the sender in "Invite a new partner" mode. Unset when the invitation is for a pre-existing partnership (Select Recommended Partner mode).
recipientEmail string no RecipientEmail is the partner contact email the invitation was sent to.
recipientName string no RecipientName is the partner contact name.
responseMessage string no ResponseMessage is the partner's response when accepting or declining the invitation. Mandatory for Accepted invitations, optional for Declined.
tone string no Tone is the selected email tone: executive, sales, technical, alliance, tactical.

PartnershipAiOverview fields:

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

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

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

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

FieldTypeRequiredDescription
bannerTagline string no
coverStyle string no
logoFileKey string no
logoSignedUrl string no
primaryColor string no
secondaryColor string no

400 — Bad request

Content-Type: application/json

403 — Forbidden

Content-Type: application/json

404 — Invitation not found

Content-Type: application/json

409 — Invitation already in a terminal state

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.