commercetools integrations
Connecting commercetools to a specific external system: which integration already exists, whether you need one at all, and what the connector for it must actually do. Twelve sub-areas, each owning one integration domain end to end — the decision ladder, the requirements → connect.yaml mapping, the runtime contract, and the verification steps.
This skill is domain-specific. The build side is not here. How a service / event / job application is written, the connect.yaml contract, least-privilege scopes, lifecycle scripts, sync-vs-async idempotency and ack semantics, testing, deployment, and the production-readiness gate are type-agnostic and live in commercetools-connect. Start here to decide what to build for a given vendor; go there for how to build and ship it.
Route to the sub-area first
Do not answer an integration question from this file. Open the matching overview.md — it owns the workflow, the decision ladder, and the traps for that domain.
| Domain |
Sub-area |
| Payment (Stripe, Adyen, Mollie, PayPal, …) |
references/payment/overview.md |
| Tax (Avalara, Vertex, TaxJar, …) |
references/tax/overview.md |
| CRM (Salesforce, HubSpot, Dynamics 365, Zoho, …) |
references/crm/overview.md |
| PIM (Akeneo, inriver, Bluestone, Pimcore, …) |
references/pim/overview.md |
| Order management / OMS (Fluent Commerce, fulfillmenttools, kbrw, OneStock, NewStore, Pipe17) |
references/order-management/overview.md |
| Gift card (Voucherify, in-house store credit, …) |
references/giftcard/overview.md |
| Transactional email (SendGrid, Mailgun, AWS SES, Postmark, …) |
references/email/overview.md |
| Marketplace (Marketplacer, Mirakl, Convictional, channel managers) |
references/marketplace/overview.md |
| Promotion / loyalty (Talon.One, Voucherify, Dovetech, Eagle Eye, …) |
references/promotion/overview.md |
| Analytics — warehouse / CDP / product analytics (BigQuery, Snowflake, Redshift, Databricks, Segment, mParticle) |
references/analytics/overview.md |
| Search / product discovery (Algolia, Constructor, Bloomreach, Coveo, Elasticsearch, Typesense) |
references/search/overview.md |
| Shipping (carriers, rate-shopping engines, label/shipping-execution platforms) |
references/shipping/overview.md |
Not here: the hosted Checkout widget (commercetools-checkout); surface-independent commerce domain logic such as pricing, discount stacking, tax modes, and native shipping modeling (commercetools-commerce-patterns); SDK client setup, auth, and the core data model (commercetools-platform).
The ladder every sub-area walks
The rungs are the same across all twelve; only the rung-0 native capability differs. Stop at the first rung that fits, and present the choice to the user — the rungs are materially different amounts of work.
- Native commercetools capability — does this need an integration at all? Real for promotion (Product Discounts / Cart Discounts / Discount Codes / Discount Groups), search (Product Search), and shipping (Zones, Shipping Methods, tiered rates, predicates). Rule it out explicitly, with the reason stated.
- Use a public connector — one exists and covers the requirements → install and configure. Check live, never from memory; name the connector and version you checked.
- The gap is config, not code — enabled features, credentials, markup, field mappings and fallback behavior are typically
connect.yaml values → back to rung 1.
- Customise / fork — a real gap config can't close, and an open-source connector exists → fork, add only the delta, publish as an Organization connector.
- Build a new one — nothing exists for this vendor → build from the closest application template.
Verify a candidate is actually Connect-deployable before calling it installable. A vendor listing is frequently the vendor's own hosted service plus glue you write — not something Connect deploys. The full rule, with the checks that settle it: Marketplace listings are not all Connect connectors.
Step 0 — Gather context (required, run first)
Every sub-area opens with the same mandatory grounding step: pull the latest verified documentation as context for you (the agent) before designing anything. Do not skip it, and do not replace it with another tool.
node scripts/docs-search.mjs \
--query "<terms from the user's request>" \
--app-name "<current-app ex: claude, copilot, codex>" \
--model "<current-model>" \
--skill-name "commercetools-integrations" \
--limit 10
Run it from this skill's root. scripts/openApi-schemata.mjs and scripts/graphql-schemata.mjs are here too, for confirming request/response shapes from the OAS or GraphQL schema instead of from memory.
What a sub-area contains
Only overview.md and connector-selection.md exist everywhere. The rest is the common shape, not a guarantee — list the sub-area's directory rather than assuming a file exists:
| File |
Owns |
overview.md |
Start here. Present in all twelve. Orientation, the rung-0 gate, requirements extraction, the workflow, and routing to the rest |
connector-selection.md |
Present in all twelve. The decision ladder for this domain: what exists, how to check live, which template to scaffold from |
config-from-requirements.md |
Requirements → connect.yaml: applications, credentials, config keys, least-privilege scopes, worked example |
*-contract.md |
The runtime contract: what each application must do, and the pitfall catalog |
verification.md |
Proving the round trip works end to end, plus the traps that look like bugs |
Sub-areas name their files after what the domain actually needs, so several diverge: pim/ uses build-connector.md + data-mapping.md + testing.md, order-management/ uses build-oms-connector.md + sync-architecture.md, and analytics/ uses pipeline-architecture.md — those last two carry the runtime contract in place of a *-contract.md. Others add provider specifics, test harnesses, or public-connector assessments.
Rules that hold across all twelve
- Ask, don't assume. Requirements come before config, and config before code. Direction, source of truth, and what happens when the external system is down are business decisions — get them from the user and record them.
- Check the registry live. Connector availability changes. One you remember may not exist; one you don't may.
- Vendor facts come from the vendor. Their auth, payloads, field names, limits, and sandbox behavior are theirs to document and change — read their current API docs, and for a public connector its repo's
connect.yaml and README. Do not write vendor field names from memory.
- Present the ladder; let the user choose the rung. Give a recommendation and its reasoning, then record the decision.
- Hand back for the build. Once the rung is chosen and the applications are designed, the lifecycle, testing, and production-readiness gate are commercetools-connect.
1---2name: commercetools-integrations3description: Integrate commercetools with an external system through Connect — payment (Stripe, Adyen, Mollie, PayPal), tax (Avalara, Vertex, TaxJar), PIM (Akeneo), CRM (Salesforce, HubSpot), order management/OMS (Fluent Commerce, fulfillmenttools, NewStore), gift cards (Voucherify), transactional email (SendGrid, Mailgun), marketplace (Mirakl, Marketplacer), promotion and loyalty (Talon.One, Voucherify), analytics export to a warehouse/CDP (BigQuery, Snowflake, Segment), search and product discovery (Algolia, Constructor, Bloomreach), and shipping (carriers, rate engines, label platforms). Each sub-area rules out the native capability first, then picks a rung — use a public connector, close the gap with config, fork, or build. Use when syncing commercetools to or from an external system, or configuring, forking, or debugging a connector. Type-agnostic build contracts live in commercetools-connect.4---56# commercetools integrations78Connecting commercetools to a specific external system: which integration already exists, whether you need one at all, and what the connector for it must actually do. Twelve sub-areas, each owning one integration domain end to end — the decision ladder, the requirements → `connect.yaml` mapping, the runtime contract, and the verification steps.910**This skill is domain-specific. The build side is not here.** How a `service` / `event` / `job` application is written, the `connect.yaml` contract, least-privilege scopes, lifecycle scripts, sync-vs-async idempotency and ack semantics, testing, deployment, and the production-readiness gate are type-agnostic and live in [commercetools-connect](../commercetools-connect/SKILL.md). Start here to decide *what* to build for a given vendor; go there for *how* to build and ship it.1112## Route to the sub-area first1314Do not answer an integration question from this file. Open the matching `overview.md` — it owns the workflow, the decision ladder, and the traps for that domain.1516| Domain | Sub-area |17|---|---|18| **Payment** (Stripe, Adyen, Mollie, PayPal, …) | [references/payment/overview.md](./references/payment/overview.md) |19| **Tax** (Avalara, Vertex, TaxJar, …) | [references/tax/overview.md](./references/tax/overview.md) |20| **CRM** (Salesforce, HubSpot, Dynamics 365, Zoho, …) | [references/crm/overview.md](./references/crm/overview.md) |21| **PIM** (Akeneo, inriver, Bluestone, Pimcore, …) | [references/pim/overview.md](./references/pim/overview.md) |22| **Order management / OMS** (Fluent Commerce, fulfillmenttools, kbrw, OneStock, NewStore, Pipe17) | [references/order-management/overview.md](./references/order-management/overview.md) |23| **Gift card** (Voucherify, in-house store credit, …) | [references/giftcard/overview.md](./references/giftcard/overview.md) |24| **Transactional email** (SendGrid, Mailgun, AWS SES, Postmark, …) | [references/email/overview.md](./references/email/overview.md) |25| **Marketplace** (Marketplacer, Mirakl, Convictional, channel managers) | [references/marketplace/overview.md](./references/marketplace/overview.md) |26| **Promotion / loyalty** (Talon.One, Voucherify, Dovetech, Eagle Eye, …) | [references/promotion/overview.md](./references/promotion/overview.md) |27| **Analytics** — warehouse / CDP / product analytics (BigQuery, Snowflake, Redshift, Databricks, Segment, mParticle) | [references/analytics/overview.md](./references/analytics/overview.md) |28| **Search / product discovery** (Algolia, Constructor, Bloomreach, Coveo, Elasticsearch, Typesense) | [references/search/overview.md](./references/search/overview.md) |29| **Shipping** (carriers, rate-shopping engines, label/shipping-execution platforms) | [references/shipping/overview.md](./references/shipping/overview.md) |3031Not here: the hosted Checkout widget ([commercetools-checkout](../commercetools-checkout/SKILL.md)); surface-independent commerce domain logic such as pricing, discount stacking, tax modes, and native shipping modeling ([commercetools-commerce-patterns](../commercetools-commerce-patterns/SKILL.md)); SDK client setup, auth, and the core data model ([commercetools-platform](../commercetools-platform/SKILL.md)).3233## The ladder every sub-area walks3435The rungs are the same across all twelve; only the rung-0 native capability differs. Stop at the first rung that fits, and **present the choice to the user** — the rungs are materially different amounts of work.36370. **Native commercetools capability** — does this need an integration at all? Real for promotion (Product Discounts / Cart Discounts / Discount Codes / Discount Groups), search (Product Search), and shipping (Zones, Shipping Methods, tiered rates, predicates). Rule it out explicitly, with the reason stated.381. **Use a public connector** — one exists and covers the requirements → install and configure. Check **live**, never from memory; name the connector and version you checked.392. **The gap is config, not code** — enabled features, credentials, markup, field mappings and fallback behavior are typically `connect.yaml` values → back to rung 1.403. **Customise / fork** — a real gap config can't close, and an open-source connector exists → fork, add only the delta, publish as an Organization connector.414. **Build a new one** — nothing exists for this vendor → build from the closest application template.4243**Verify a candidate is actually Connect-deployable before calling it installable.** A vendor listing is frequently the vendor's own hosted service plus glue you write — not something Connect deploys. The full rule, with the checks that settle it: [Marketplace listings are not all Connect connectors](../commercetools-connect/SKILL.md#marketplace-listings-are-not-all-connect-connectors--verify-before-recommending).4445## Step 0 — Gather context (required, run first)4647Every sub-area opens with the same mandatory grounding step: pull the latest verified documentation as context for you (the agent) before designing anything. **Do not skip it, and do not replace it with another tool.**4849```bash50node scripts/docs-search.mjs \51 --query "<terms from the user's request>" \52 --app-name "<current-app ex: claude, copilot, codex>" \53 --model "<current-model>" \54 --skill-name "commercetools-integrations" \55 --limit 1056```5758Run it from this skill's root. `scripts/openApi-schemata.mjs` and `scripts/graphql-schemata.mjs` are here too, for confirming request/response shapes from the OAS or GraphQL schema instead of from memory.5960## What a sub-area contains6162Only `overview.md` and `connector-selection.md` exist everywhere. The rest is the common shape, not a guarantee — **list the sub-area's directory rather than assuming a file exists**:6364| File | Owns |65|---|---|66| `overview.md` | **Start here.** Present in all twelve. Orientation, the rung-0 gate, requirements extraction, the workflow, and routing to the rest |67| `connector-selection.md` | Present in all twelve. The decision ladder for this domain: what exists, how to check live, which template to scaffold from |68| `config-from-requirements.md` | Requirements → `connect.yaml`: applications, credentials, config keys, least-privilege scopes, worked example |69| `*-contract.md` | The runtime contract: what each application must do, and the pitfall catalog |70| `verification.md` | Proving the round trip works end to end, plus the traps that look like bugs |7172Sub-areas name their files after what the domain actually needs, so several diverge: `pim/` uses `build-connector.md` + `data-mapping.md` + `testing.md`, `order-management/` uses `build-oms-connector.md` + `sync-architecture.md`, and `analytics/` uses `pipeline-architecture.md` — those last two carry the runtime contract in place of a `*-contract.md`. Others add provider specifics, test harnesses, or public-connector assessments.7374## Rules that hold across all twelve7576- **Ask, don't assume.** Requirements come before config, and config before code. Direction, source of truth, and what happens when the external system is down are business decisions — get them from the user and record them.77- **Check the registry live.** Connector availability changes. One you remember may not exist; one you don't may.78- **Vendor facts come from the vendor.** Their auth, payloads, field names, limits, and sandbox behavior are theirs to document and change — read their current API docs, and for a public connector its repo's `connect.yaml` and README. Do not write vendor field names from memory.79- **Present the ladder; let the user choose the rung.** Give a recommendation and its reasoning, then record the decision.80- **Hand back for the build.** Once the rung is chosen and the applications are designed, the lifecycle, testing, and production-readiness gate are [commercetools-connect](../commercetools-connect/SKILL.md).