Skip to main content
Part of the packaged integration guide.

Overview

This page builds the container every integration needs before any business event, webhook, or view attaches.

When You Would Build One

Every build path starts here; Integration Categories describes what each adds.

How to Build

Create the Integration Campaign

Create an INTEGRATION campaign with the integration program type. Its tag names the integration component this campaign carries, as library bundles do; the component tags added next are what list it on the Integrations page.
Record the identifier and version. Creation adds a default PROGRAM label equal to the campaign identifier; replace it when the contract defines one:
One active PROGRAM label per campaign; creating one replaces the previous.

Create the Component Model

Create a root component following the Custom Integration Template conventions. Leave internal:type:integration off it; the Integrations page excludes roots.
Record ROOT_COMPONENT_ID, refresh the campaign version, and create the model component with all eight display settings in one request:
Use variables; CampaignComponentCreateRequest has no settings property. Replace PARTNER_PRODUCT_SITE, PARTNER_MARKETPLACE_LISTING, and ASSET_HOST_LOGO_URL with absolute URLs. integration-v10.0 is the long-standing revision, later ones such as integration-v10.1 exist, so keep an installed source’s own type.

Set Integration Display Metadata

The type checks only that all eight are present, not that their values are usable. Tag every one internal:ui-display, exactly that string — the tag marks tile metadata and hides the setting from the settings list.
  • short.description — one tile sentence.
  • about — what the integration receives and sends.
  • documentation.url — the partner-facing page for this integration, not this guide.
  • external.url — the partner’s product site.
  • external.integration.url — the partner’s marketplace or extension listing, or an empty string.
  • categories — one STRING category other integrations already use, such as eCommerce Platform; the admin groups by exact value, so copy it from a working integration.
  • logo — the IMAGE the Integrations page renders, covered below.
  • imageKey — the key the platform resolves to its own stored partner image, read by the older partner detail view rather than the tile; take it from the partner page.

Set a Logo That Resolves

The Integrations page renders the built value of logo:
A resolved logo is an absolute URL on Extole’s asset host, such as an originAssetId path:
  • A registered component for this partner exists — copy its built logo URL from /v1/components/built, never /v1/components, whose source listing returns an unresolved expression naming an asset your component does not own.
  • No registered component has it — take an absolute URL from the partner’s site: the og:image meta tag, the header logo <img>, or a brand-assets download link. Prefer PNG or SVG over a sprite or background image.
  • You have the file — upload it as an asset, then set logo to spel@buildtime:context.getAsset('example').getUrl().
  • The partner has neither — track logo as outstanding until the real file arrives.
Confirm an address answers with the image before storing it. To upload, send multipart form data with the metadata in an asset part and the bytes in a file part:
The expression builds into a hosted URL on the account’s asset domain. A reward integration repeats this with reward-supplier-logo, exposed as rewardSupplierLogo, on every supplier template. logo is IMAGE and required, so "default": "" is rejected:

Add the Partner Settings

Add partner configuration settings separately, each with a display name, description, type, default, importance:basic, and a priority, prefixed with the integration component name — exampleAccountUrl, exampleSetupInstructions.
Never tag a partner configuration setting internal:ui-display, and never place a credential value in a setting the configuration view displays.
Setup instructions carry the event endpoint, the current program label, the event names, the payload fields, the credential rule, and the documentation link, which Send Platform Events to Extole tells implementers to read from this view. Compute them at build time, substituting the campaign’s program label for PROGRAM_LABEL:
The value is interpolated at creation, so replacing the campaign’s PROGRAM label means updating this setting too.

Add Typed Sockets

Add a businessEvents multi-socket:
Add a views multi-socket:
Declare a type on every socket and attach only components that satisfy it. view-v10.0 is the parent of every view type, so one filter accepts the configuration view below plus the report-runner-view-v10.0 and event-stream-view-v10.0 children from Add the Activity and Event Views.

Add a Configuration View

Create a config-view-v10.0 child attached to the integration model component:
component_ids takes the parent model component, which owns the views socket, and settingsToDisplay names parent settings only, including exampleSetupInstructions. Set status from a buildtime expression so the tab reports READY only once the settings Extole can verify are complete.

How to Test

Read the built component with GET /v1/components/built?having_all_tags=internal:type:integration and confirm logo resolved to an absolute URL on Extole’s asset host, every settingsToDisplay name appears with its display name, and the component sits under the root with internal:self-managed and both sockets filled.

Troubleshooting