DevelopersIntegrationsOverview

Integrations

Orchard connects to external services — payments, email, shipping, support — on a per-tenant basis. Each store supplies its own credentials, so each store’s money, mail, and shipping run on its own accounts.

The model

  • Per-tenant credentials. Every integration’s keys belong to one tenant. They are stored encrypted in Orchard’s credential vault, decrypted only at the moment of use, and never logged or returned by the API.
  • Configured in the admin. A store owner adds and manages integrations under the top-level Integrations area of the admin — you (the developer) generally don’t touch these; you build against the behavior they enable.
  • Test vs live. Each integration has test and live credentials, matching the test/live split of your API keys.

Stripe (payments)

Payments run through the tenant’s own Stripe account — Orchard orchestrates checkout and records orders, but funds settle to the tenant, and Orchard never custodies money or touches card data.

  • direct mode is the working path today: the tenant pastes their own Stripe secret/publishable keys. You call POST /api/v1/checkout/sessions and get a hosted Stripe Checkout URL — the same call whether the cart is one-time or a subscription. connect mode exists as a setup option in the admin but isn’t wired to a working checkout path yet — see the Stripe guide before building against it.
  • Stripe → Orchard events arrive at /api/webhooks/stripe/{tenant_slug} and are verified with Stripe’s own signature. This is internal to Orchard — it is not the same as the outbound webhooks Orchard sends to you.
  • You never see card numbers. Card entry happens on Stripe-hosted Checkout (PCI SAQ A — see Security & compliance).
  • Full setup walkthrough: Stripe integration guide.

Email

Transactional and marketing email (order confirmations, shipment notices, etc.) send from the tenant’s own Resend account and domain, so messages come from the store’s brand, not Orchard’s. This is operator-configured; from your side, the relevant signal is the order.paid webhook if you want to trigger your own messaging in parallel. Full setup walkthrough: Resend integration guide.

Shipping

Fulfillment (rates, labels, tracking) is wired to the tenant’s own EasyPost account. Standard parcel shipping is supported out of the box; heavy/freight (LTL) shipping is planned but not available yet — talk to the operator if your catalog needs it. Full setup walkthrough: EasyPost integration guide.

Support and other services

Stores can also connect support tooling — Help Scout has a working customer sidebar today (see the Help Scout guide); other support and marketing/CMS connectors are installable from the marketplace but vary in how deep the integration goes. These are operator-configured and don’t change your /api/v1 integration.

What this means for you

You build against one surface/api/v1 and webhooks — and the per-tenant integrations are resolved behind it automatically based on your API key’s tenant. You don’t pass provider credentials or pick a Stripe mode; Orchard does that from the tenant’s configuration.

Setting them up

If you’re the store owner configuring these, see the User Guides → Settings for the click-by-click.