Overview
An outbound integration forwards Extole program activity to a partner platform. Extole maintains a library source for most outbound partners, so the build is an install and a reshape rather than a construction. Substitute the component name, endpoints, and tag namespace from the partner page throughout. Build a Packaged Integration with the Management API covers the constraints and shared mechanics every build follows.When You Would Build One
Do not add inbound business-event scaffolding to an outbound install. A partner that orders gift cards, prepaid cards, points, or payouts uses the distinct reward fulfillment model.
Before You Start
Read the partner page first — it names the finished tree, the endpoints, and the tag namespace — and confirm the duplicatable listing holds a maintained integration component whose name matches the partner. Without one, build from Create the Integration Campaign and Component Model instead.
How to Build
Confirm the Finished Shape
The partner page’s product description specifies the finished tree. Each statement it makes maps to something the install must carry:
Read that mapping as exhaustive rather than as a minimum, and apply it to an integration already in the account as much as to a fresh install. A library source ships the union of what every account might want, so it commonly installs children the page does not list and only one of the webhooks it names.
A library source may not ship the report-runner and event-stream views every integration carries. Read the installed
views socket and add whichever is missing from Add the Activity and Event Views.
Create Missing Component Types
A typed child needs its component type first, and a partner page can require a type the account has never used:parent. An empty types array leaves an untyped component, which satisfies no socket filter and no template lookup.
Install the Library Source
A library install isPOST /v1/components/{SOURCE_COMPONENT_ID}/duplicate without target_campaign_id: omitting the target campaign creates a new root integration campaign that copies the library tree, including its webhooks and child controllers. Send a body carrying at least one property, such as component_display_name.
List the candidates before duplicating anything:
Reshape the Install
The reshape uses these calls, each needing a campaign version read immediately beforehand:
Bring the installed tree to the partner page’s shape in one pass:
- Delete the library children the partner page does not keep.
- Create the children it adds, including any typed data template.
- Remove parent settings that belonged to a deleted child, such as a trigger-event-name setting whose controller is gone.
- Set one
WEBHOOK_IDsetting per partner endpoint, resolved by webhook tag rather than by identifier, so the setting survives a rebuild:
internal:partner:message-trigger, matching the webhook below. Never use a shared tag such as internal:partner, which matches every webhook the integration owns.
A partner data template is a typed child of the integration component, created through component_ids with no socket. Its install expression anchors the source component’s unanchored step data onto the target event:
Publish, Then Attach Component-Scoped Webhooks
Publish the campaign once before creating any webhook whose name or URL expression callscontext.getComponent(), and create those webhooks with component_ids naming the integration component. The reshape cannot complete without that publish, so get any release approval first.
Publishing validates every webhook the campaign already owns, so keep a valid placeholder host in any account-URL setting that feeds a webhook URL. The library’s own default is one. Set enabled to false while a webhook points at that placeholder — enabled, it sends live program data to a host that should never receive it, unsigned when the client key is also missing. Enabling it is the step that puts the outbound path into service.
POST /v6/webhooks:
internal:partner tag for listing every webhook the integration owns. Where the account URL setting may lack a scheme, build the URL expression to add https://.
Attach the Credential
Create the webhook client key once you have the partner’s API secret, then set the credential setting on the integration component. A missing credential does not block the build: leave the setting null and track it as outstanding.Error Handling
How to Test
A2xx on the duplicate call means the library tree was copied, not that the install matches the partner page. Read the campaign and its /v6/webhooks entries back, then confirm:
- The tree matches the partner page: one child per activity the page lists, and no child forwarding activity it does not.
- Every typed child carries its type.
- Each webhook exists with its tags and its resolved URL.
- Each
WEBHOOK_IDsetting resolves to a webhook identifier rather thannull. enabledistrueon every webhook whose real URL and credential are both configured, andfalseon the rest.
