Skip to main content

Get Bundles (Purchase Offer)

Resolve a transactable offer for the supplied context. Returns the bundles, calculated prices, applied campaigns, and the offerIdentifier to pass to checkout.

URL

POST /api/c2a/offer/bundles

Request Parameters

Body: GetOfferRequest.

NameTypeDescription
contextobject (GetBundlesContext)Required. Offer resolution context.

GetBundlesContext

NameTypeDescription
customerUrn (alias CU)stringWhen set, the engine personalizes pricing, eligibility, and campaign matching.
promotionCode (alias PC)stringOptional code; engine attempts to resolve a matching CalculatedCampaign.
stepIndex (alias SF)integerZero-based step for multi-step funnels. Default 0.
interactionType (alias IT)string (EnOfferIntentType)Required. NewAcquisition, Replace, or RetentionWinback. Drives offer set.
channel (alias CH)string (EnSubscriptionChannelProviderFamily)Force a specific channel (Azotte, InappPlayStore, InappAppStore, ExternalPartner). Auto-resolved when null.
interactionDate (alias ID)string (date-time)For time-sensitive offers / audit.
interactionMeans (alias IM)stringSource channel hint (web / mobile / agent).
customTags (alias CTG)object (string → string)Tenant-defined metadata for routing logic.
storefrontUrn (alias SFU)stringConditional. Storefront context. Required for multi-storefront tenants.
originalSubscriptionIdentifier (alias OSI)stringConditional. For Replace / Winback flows — the subscription being replaced.
clientPlatformType (alias PLT)string (EnClientPlatformType)Web (default), Mobile, etc.

Request Example

{
"context": {
"customerUrn": "cu.00.482",
"promotionCode": "CMP1WKWAFY",
"stepIndex": 0,
"interactionType": "NewAcquisition",
"channel": "Azotte",
"storefrontUrn": "st.00.001",
"clientPlatformType": "Web"
}
}

Response Parameters

GetOfferResponse.

NameTypeDescription
statusobject (AzotteStatus)SUCCESS on hit.
offerobject (PurchaseOffer)Resolved offer; null on failure.
offer.offerIdentifierstringPass back to checkout as Order.OfferIdentifier.
offer.expiresAtstring (date-time)Offer validity window. Expired offers rejected at checkout.
offer.productGroupTypestring (EnProductGroupType)RecurringSubscription, OneTime, etc.
offer.channelstring (EnSubscriptionChannelProviderFamily)Resolved channel.
offer.interactionTypestring (EnOfferIntentType)Echo of input intent.
offer.storefrontUrnstringStorefront in scope.
offer.campaignobject (CalculatedCampaign)Applied campaign + impacts (discount, free period, etc.).
offer.artifactGroupsarray (CalculatedArtifactGroup[])Bundles + their calculated prices and add-ons.
offer.optionsobject (OfferOptions)Caller-facing rules (e.g. payment methods allowed).
offer.stepInfoobject (OfferStepInfo)Multi-step funnel position.
offer.presentationTypestring (EnOfferPresentationType)Offer by default.
offer.presentationstringOptional rendering payload.
diagnosticsobject (OfferDiagnostics)Why this offer was returned: matched rules, applied campaigns, eligibility checks.

Sample Response

{
"status": { "messageCode": "SUCCESS" },
"offer": {
"offerIdentifier": "of_8z2k1q",
"expiresAt": "2026-05-25T12:30:00Z",
"productGroupType": "RecurringSubscription",
"channel": "Azotte",
"interactionType": "NewAcquisition",
"storefrontUrn": "st.00.001",
"campaign": { "code": "CMP1WKWAFY", "name": "May Promo", "discountPercent": 20 },
"artifactGroups": [
{
"bundleUrn": "bn.00.42",
"name": "Pro Monthly",
"price": { "amountMilpieces": 1499, "currency": "EUR" },
"items": [ { "itemIdentifier": "it_ab1", "sku": "PRO-M-1", "quantity": 1 } ]
}
],
"options": { "allowedPaymentMethods": ["CARD", "SEPA"] }
},
"diagnostics": { "matchedRules": ["new-customer-de"], "appliedCampaigns": ["CMP1WKWAFY"] }
}

Sample Codes

curl --location 'https://acme.sandbox.azotte.com/api/v1/c2a/offer/bundles' \
--header 'Content-Type: application/json' \
--header 'x-tn: e2a1c7b2-4f3a-4b8e-9c2d-1a2b3c4d5e6f' \
--header 'x-api-key: sk_dev_acme_sample_123456789' \
--data '{
"context": {
"customerUrn": "cu.00.482",
"promotionCode": "CMP1WKWAFY",
"interactionType": "NewAcquisition",
"channel": "Azotte",
"storefrontUrn": "st.00.001"
}
}'