Why this endpoint exists
Partner programs stall in the gap between knowing a partner should act and getting them to act. The signal usually lives in a system that is not Introw: a stage-age query, a churn model, a certification expiry, a finance run, an agent working the pipeline. The nudge has to happen in a place the partner actually reads.- Nudge at scale, on a real signal. Run your own rules - deal age, missing next step, unsigned order form, lapsed certification, dormant partner - and post one comment per hit. Ten thousand partners is ten thousand calls, not ten thousand emails somebody wrote.
- Let an agent do the chasing. An agent that reviews your pipeline can post the follow-up itself, as a named person, with a human reading the same thread. This is the AI-native path: the judgment is automated, the accountability is not.
- Close the loop from your own systems. Your billing system comments on a payout when it is scheduled. Your provisioning system comments on the deal when the account goes live. The partner hears it from the record, not from a separate status email.
- Acknowledge intake instantly. Right after submitting a form, comment on the submission with what happens next and by when. Partners stop asking whether it arrived.
- Annotate for your own team. Set
isInternaland the comment stays on the record for your team, invisible to the partner and silent on every partner-facing surface.
Choose a target
Every comment lands on a partner’s timeline. What you additionally target decides which record it hangs off. Pass at least one:
Two rules the API enforces for you:
crmObjectIdandcrmObjectTypemust be sent together, and the object must already be attributed to a partner - otherwise passpartnerIdexplicitly.- The collaboration space the comment lands in is resolved server-side. You never pass a room, and you never have to know one exists.
Name the object type however your CRM does
crmObjectType takes your CRM’s own word for the object, case-insensitively. Introw translates it, so you never map types on your side:
Introw’s own names (
DEAL, COMPANY, TICKET, CONTACT, LEAD) and HubSpot object type ids (0-3, 0-2, and so on) resolve to the same objects.
Custom objects are the one case where the exact name matters. Pass the API name as your CRM shows it, for example Partner_Program__c in Salesforce or p_partner_application in HubSpot. A custom type has no standard equivalent, so it is used verbatim rather than translated.
Post as a real person
authorEmail decides who the comment appears to be from, and it must match a real person: either one of your team members, or a portal member of the partner the comment lands on. Comments are attributed, not posted by “the system”, so a partner sees their partner manager following up rather than an unsigned automation.
This is also what governs internal comments: isInternal is only allowed when authorEmail is one of your team members. A partner-authored comment can never be internal.
A comment on a commission payout that is not yet visible to the partner is kept internal
automatically, whatever you send. Payout figures never leak ahead of the payout being released.
Write the comment
comment takes plain text or Markdown, and formatting survives onto the partner portal timeline:
- / 1. lists all render. HTML fragments are accepted too and converted to the same format, so you can forward content you already have. Comments are capped at 20,000 characters, and the endpoint does not take attachments.
What comes back
threadId if you intend to follow up - passing it back as threadId puts the next comment in the same thread instead of starting a new one. Check isInternal on the response rather than assuming: it tells you what the comment actually became after the payout rule above was applied.
Notifications
A comment that is not internal notifies the partner through the channels you have configured for your program - email, Slack, Microsoft Teams - following the same notification rules and preferences as a comment your team posts in the app. An internal comment notifies nobody on the partner side. That is what makes this a nudge API rather than a logging API: you are not writing a record, you are reaching a person. Treat volume accordingly - see Control who gets notified.Errors
Authentication
Use a secret API key with thecollaborate:write scope - see Authentication.
API reference
Create a comment
POST /api/v1/comments
Related
Nudge partners at scale via the API
The step-by-step guide, with the patterns worth copying.
Form submissions
Create the submission you are commenting on.
Collaborate on a shared deal
The same thread, worked by hand in the app.
Nudge stalled deals
The no-code version, configured on a pipeline.