Suger

Resend a pending or expired partner invitation

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

Re-send an invitation this organization sent, refreshing its accept-by date and re-delivering the original email. An expired invitation returns to pending with a new accept-by date; an invitation that is still pending simply gets a longer window. Use it to chase a partner who never responded, or to revive an invitation that timed out, without composing a new one. The partner receives the same message that was originally approved, from the same sender identity. Only invitations that are still pending or have expired can be resent. One that was already accepted, declined or cancelled returns 409 with the current status in info.currentStatus — for an accepted one the partnership is already active, and for a declined one send a fresh invitation with CreatePrmInvitation instead. Reviving an expired invitation also returns 409 when another invitation to the same recipient is already pending, so one recipient never ends up with two live accept links. Delivery is reported separately from the record: emailSent is false when the accept-by window was refreshed but no email left the system, for example a disconnected sender integration. Callers should not report a plain success in that case.

Parameters

NameInTypeRequiredDescription
orgId path string yes Organization ID
invitationId path string yes Invitation ID

Responses

200 — OK

Content-Type: application/json · Schema: ResendInvitationResult

ResendInvitationResult fields:

FieldTypeRequiredDescription
emailError string no EmailError is the delivery failure, present only when EmailSent is false.
emailSent boolean no EmailSent is false when no email left the system — a disconnected sender integration, or a legacy row with no stored outbound message to re-send.
invitation PartnerInvitation no

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)

PartnerInvitationInfo fields:

FieldTypeRequiredDescription
inbound InboundInvitationInfo no
outbound OutboundInvitationInfo no

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.
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 ( 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 (/). 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.
emailProvider string no EmailProvider is the sender integration the original send resolved to: "GOOGLE", "MICROSOFT" or "DNS" (the org's verified custom domain). Empty on legacy rows and when the sender did not pin one. Persisted so a RESEND re-uses the same identity — without it a resend silently falls back to the user-scope Gmail/Outlook path, which changes the From address (and DMARC alignment) for an org that deliberately sent over DNS or org-scope Gmail.
emailScope string no EmailScope is "user" (the sender's own mailbox, the default) or "org" (the org-level Gmail service account). Persisted for the same reason as EmailProvider — see above.
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.

400 — Invitation not found, or not an outbound invitation

Content-Type: application/json · Schema: ServErrorResponse

ServErrorResponse fields:

FieldTypeRequiredDescription
info object no
message string no

409 — Invitation is not resendable

Content-Type: application/json · Schema: ServErrorResponse

ServErrorResponse fields:

FieldTypeRequiredDescription
info object no
message string no

View as Markdown · Interactive API reference

Spotted something wrong or out of date on this page? Tell us and we'll correct it.