OctoWiki
Vendor Adapters

Vendor Adapters

Per-vendor implementation notes — one page per adapter, grouped by product line, documenting each vendor's auth, catalog, order, webhook, delivery, and unique quirks.

This section documents every vendor adapter individually. For the architecture (factory routing, the DirectTopUpVendor/VoucherVendor/EsimVendor interfaces, vendor_attributes config), see Vendors & Integrations. For how the orchestrator drives all of them, see Order Lifecycle.

Each adapter is keyed by a short vendor.code its factory switches on. Credentials live in the vendor_attributes DB table, never env.

Voucher Vendors

VendorCodeModelDeliveryHeadline quirk
The Reward StoreTRSasync, pollcode/pin/linkno tests/mock; cancel is a no-op
RunaRUNAasync, linkclaim URLSvix webhook; singular endpoints; decimal strings
EpinForceEPINasync, poll-onlyXLSX/ZIP filesstateful shared cart + per-token mutex
iRewardifyIRWasync, pollcard or claim linkcustom unsigned webhook; memory-only token
NeoCurrencyNEOsync inlineactivation link24h JWT; heavy spec drift
WupexWPXsync/asyncserial code+pinCloudflare 429 backoff; currency from name
GrasshopperGHinvertedcode+pin+claimOctopus mints; only hashes sent to GH
Octopus (federated)OCTOasync + webhookcode/pin/linkconsumes another Octopus; self-loop guard

Top-up Vendors

VendorCodeModelHeadline quirk
SEAGMSEAGMasync + signed webhookHMAC in the query string; par_value ≠ money
DT OneDTONEasync, pollreference min/max/discount impl; no default webhook
WupexWPXsyncserver/zone lookup; webhook unsupported
Octopus (federated)OCTO_TOPUPasync + webhookcomposite productID:variantID; mobile lookup

eSIM Vendors

VendorCodeModelHeadline quirk
DT One eSIMDTONE_ESIMasync PIN purchaseURL path-token webhook; install/activation poll
Octopus (federated)OCTO_ESIMasync, webhook nudgedelivered=PROCESSING nudge → cron poll completes

Several codes are declared in types/common.go but not implemented (LC, BNC, RZP, WOGI, NCTV, DIGC, VCHG, AQP, GLT, FLZ, WC, TRF) — reserved/planned, no adapter. Wupex and Octopus each appear on multiple lines as separate adapters sharing one DB row.

Cross-cutting patterns

  • Auth ranges from static keys (EPIN, WPX), HTTP Basic (TRS, DT One), HMAC query-signing (SEAGM), lazy OAuth (NEO, IRW), to login-tokens (OCTO family).
  • Delivery is code/pin, claim link, file (EPIN), account credit (topup), or activation_code/ICCID (eSIM).
  • Webhooks are Svix (Runa), HMAC (OCTO, SEAGM), unsigned (IRW, DT One), path-token (eSIM), or none (NEO, EPIN, WPX).
  • ErrShouldReCreate (vendor lost the order → clear id, re-CREATE) and ErrOrderNotFound / ErrDuplicateMerchantRef are the shared orchestration sentinels — see Order Lifecycle → recreate protocol.
  • Most adapters have a mocky-balboa route + contract test; the OCTO family instead uses the in-process test/octopusfake/ upstream.

On this page