Skip to main content

Brands

Once authenticated, explore the brand catalog. Hubble offers 450+ gift card brands across categories like Food, Fashion, Electronics, Travel, and more.


The Brand Object

id string Unique identifier for the brand.

status string Brand status. Values: ACTIVE, INACTIVE

Status values and error handling
StatusMeaningWhat You Should Do
ACTIVEVouchers can be generatedSafe to display to end users and accept orders
INACTIVEVouchers CANNOT be generatedRemove from user-facing catalog immediately
Why Are Inactive Brands Returned?

The API intentionally returns both ACTIVE and INACTIVE brands so you can update your local state. You MUST filter on the status field before displaying brands to users.

Brand Errors

CodeErrorWhat To Do
E100Brand temporarily disabledProvider failure. Wait and retry later.
E101Brand not enabled for youContact Hubble support to enable this brand.
E102Brand not activeBrand is INACTIVE. Do not display to users.

title string Display name of the brand.

brandDescription string nullable Description of the brand.

category string[] List of categories the brand belongs to.

tags string[] List of tags associated with the brand.

denominationType string Type of denomination. Values: FIXED, FLEXIBLE

Denomination type details
TypeHow It WorksWhat to Validate
FIXEDOnly specific denominations in amountRestrictions.denominations are acceptedOrder denomination must exactly match one value in the array
FLEXIBLEAny amount between minVoucherAmount and maxVoucherAmountValue must fall within min/max range

When a brand is FIXED: Read the amountRestrictions.denominations array and only allow users to select from those exact values. For example, if Flipkart has denominations [100, 250, 500, 1000, 2000, 5000], you cannot send 600 or 1500.

When a brand is FLEXIBLE: Allow users to enter any custom amount, but enforce the min/max boundaries.

Denomination Splitting

To order Rs 6,250 for a FIXED brand with denominations [1000, 2000, 5000], you must split: [{denomination:5000,quantity:1},{denomination:1000,quantity:1},{denomination:250,quantity:1}] - but ONLY if 250 is in the denominations list. Always validate against the brand’s current amountRestrictions.

cardType string Type of card. Values: CARD_NUMBER_SECURED, PIN_NO_SECURED, CARD_AND_PIN_NO_SECURED

Card type details
Card TypeWhat Customer NeedsWhat to Display
CARD_NUMBER_SECUREDCard number onlyShow cardNumber. cardPin will be null.
PIN_NO_SECUREDPIN onlyShow cardPin. cardNumber will be null.
CARD_AND_PIN_NO_SECUREDBoth card number AND PINShow BOTH fields.
  • Read cardType from the brand object before placing an order to know what your display UI needs to support.
  • Handle null values gracefully — for CARD_NUMBER_SECURED brands, cardPin will be null.
  • For CARD_AND_PIN_NO_SECURED brands, you MUST display both credentials.

redemptionType string Redemption type. Values: ONLINE, OFFLINE, ONLINE_AND_OFFLINE

Redemption type details
TypeWhere Voucher Can Be UsedDisplay Recommendation
ONLINEOnly on the brand's website or appShow "Online Only" tag
OFFLINEOnly at physical retail storesShow "In-Store Only" tag
ONLINE_AND_OFFLINEBoth online and at physical storesShow "Online & In-Store"
  • Display the redemption channel clearly to end users
  • Use retailModeName for display text (not the retailMode enum)
  • Include howToUseInstructions alongside the voucher to help customers redeem

amountRestrictions object nullable Amount restrictions for the brand.

Show child attributes
  • amountRestrictions.minAmount number deprecated — Use minOrderAmount instead.
  • amountRestrictions.maxAmount number deprecated — Use maxOrderAmount instead.
  • amountRestrictions.minOrderAmount number — Minimum order amount allowed.
  • amountRestrictions.maxOrderAmount number — Maximum order amount allowed.
  • amountRestrictions.minVoucherAmount number — Minimum voucher amount.
  • amountRestrictions.maxVoucherAmount number — Maximum voucher amount.
  • amountRestrictions.maxVouchersPerOrder integer — Maximum number of vouchers per order.
  • amountRestrictions.maxVouchersPerDenomination integer nullable — Maximum vouchers per denomination.
  • amountRestrictions.maxDenominationsPerOrder integer nullable — Maximum denominations per order.
  • amountRestrictions.denominations number[] nullable — Available denominations. null for flexible denomination brands.

Additional Amount Restrictions

  • maxVouchersPerOrder — Max total vouchers in a single order
  • maxVouchersPerDenomination — Max vouchers of same denomination in one order
  • maxDenominationsPerOrder — Max distinct denomination values in one order
  • minOrderAmount / maxOrderAmount — Total order amount boundaries

thumbnailUrl string URL of the brand thumbnail image.

logoUrl string URL of the brand logo image.

iconImageUrl string deprecated Brand image/logo URL. Use thumbnailUrl instead.

tncUrl string URL to the terms and conditions page.

termsAndConditions string[] nullable List of terms and conditions.

howToUseInstructions object[] nullable Instructions for using the voucher.

Show child attributes
  • howToUseInstructions[].retailMode string — Retail mode enum. Values: ONLINE, OFFLINE
  • howToUseInstructions[].retailModeName string — Display name for the retail mode.
  • howToUseInstructions[].instructions string[] — List of step-by-step instructions.

canBalanceBeFetched boolean Whether balance can be fetched for this brand's vouchers.

voucherExpiryInMonths integer nullable Voucher validity period in months.

variantDetails object[] nullable List of variant details for the brand.


Get Brands

GET/v1/partners/products

Returns all brands (SKUs) that are enabled for the partner and matching the filter criteria.

Query Parameters

All parameters are optional and work as filters:

ParameterTypeDescription
qstringText search on brand titles and descriptions
categorystringCategory filter (e.g., FOOD, FASHION, ELECTRONICS)
pageNointegerPage number for pagination (starts from 1). Omit to get all brands.
limitintegerSize of the page

Example Request

curl "https://api.dev.myhubble.money/v1/partners/products?category=FOOD&pageNo=1&limit=20" \
-H "Authorization: Bearer <access_token>" \
-H "X-REQUEST-ID: $(uuidgen)"

Response Body

{
"data": [
{
"id": "01GMAW822RPDJ5C50XK24QC2C4",
"status": "ACTIVE",
"title": "Zomato",
"brandDescription": "Zomato connects you with a wide range of restaurants...",
"category": ["POPULAR_BRANDS", "TOP_BRANDS", "FOOD"],
"tags": ["Food", "Food Delivery", "Restaurants"],
"denominationType": "FLEXIBLE",
"cardType": "CARD_AND_PIN_NO_SECURED",
"redemptionType": "ONLINE",
"amountRestrictions": {
"minAmount": 250,
"maxAmount": 10000,
"minOrderAmount": 250,
"maxOrderAmount": 10000,
"minVoucherAmount": 250,
"maxVoucherAmount": 10000,
"maxVouchersPerOrder": 4,
"maxVouchersPerDenomination": null,
"maxDenominationsPerOrder": null,
"denominations": null
},
"thumbnailUrl": "https://assets.myhubble.money/...",
"logoUrl": "https://assets.myhubble.money/...",
"tncUrl": "https://flow.myhubble.money/brands-v6s/zomato-gift-card",
"termsAndConditions": [
"Comes with 1 year validity.",
"The gift card can be used multiple times"
],
"howToUseInstructions": [
{
"retailMode": "ONLINE",
"retailModeName": "Online",
"instructions": [
"Open the Zomato app and click on \"Profile\"",
"In the money section, click on \"Claim gift card\""
]
}
],
"canBalanceBeFetched": false,
"voucherExpiryInMonths": 12,
"variantDetails": []
}
],
"nextCursor": {
"pageNo": 1,
"limit": 20
}
}
note
  • The fields minAmount and maxAmount are deprecated. Use minOrderAmount and maxOrderAmount instead.
  • If denominations is null, it's a flexible denomination brand. If it contains values, only those specific denominations are accepted.
  • Use retailModeName for display purposes instead of the retailMode enum.
  • usageInstructions is deprecated. Use howToUseInstructions instead.

Get a Brand

GET/v1/partners/products/:productId

Returns the full brand object for a specific product. Use this to fetch up-to-date details before placing an order.

Example Request

curl "https://api.dev.myhubble.money/v1/partners/products/01GMMNJECTDZAG2YS61K58HVG8" \
-H "Authorization: Bearer <token>" \
-H "X-REQUEST-ID: $(uuidgen)"

Response Body

{
"id": "brand_id",
"status": "ACTIVE/INACTIVE",
"title": "Brand Title",
"categories": ["Brand Category"],
"tags": ["tag1", "tag2"],
"denominationType": "FIXED/FLEXIBLE",
"cardType": "CARD_NUMBER_SECURED/PIN_NO_SECURED/CARD_AND_PIN_NO_SECURED",
"redemptionType": "OFFLINE/ONLINE/ONLINE_AND_OFFLINE",
"amountRestrictions": {
"minOrderAmount": 100,
"maxOrderAmount": 5000,
"minVoucherAmount": 100,
"maxVoucherAmount": 1000,
"maxVouchersPerOrder": 5,
"maxVouchersPerDenomination": 1,
"maxDenominationsPerOrder": 1,
"denominations": [100, 1000, 5000]
},
"thumbnailUrl": "https://assets.myhubble.money/brand-assets/tile-images-sq-wp/499-swiggy-w024zl.webp",
"termsAndConditions": [
"Comes with 1 year validity",
"Max. ₹10000 per month can be loaded in Swiggy Wallet for users with minimum KYC",
"Max. 1 lac INR per month can be loaded in Swiggy Wallet for users with full KYC"
],
"howToUseInstructions": [
{
"retailMode": "ONLINE",
"retailModeName": "Offline",
"instructions": [
"Visit the outlet near you.",
"At the billing counter inform cashier that you want to use Gift Card.",
"Show your Gift Card details & pay any balance amount by cash or card."
]
},
{
"retailMode": "OFFLINE",
"retailModeName": "Online",
"instructions": [
"On www.ikea.com add products to you cart",
"Before purchasing GC, please ensure that IKEA delivers to your location",
"Proceed to checkout, in the payment section, select Redeem an IKEA gift card",
"Enter the gift card details, complete checkout."
]
}
]
}
Brand Availability Behavior

If a brand is returned in the catalog, it will also be retrievable via this endpoint. This applies regardless of the brand's current operational status, including when:

  • The brand is temporarily disabled
  • The brand is disabled due to provider failures
  • The brand is not enabled for your account
  • The brand is marked as INACTIVE

Catalog Sync Best Practices

  • Refresh your full catalog at least once per week (daily recommended)
  • Subscribe to the Brand Updated webhook for real-time changes
  • Categories are NOT communicated via webhooks — rely on periodic sync
  • Filter out INACTIVE brands from your user-facing catalog immediately
  • Cache brand data locally but always validate denominations before placing orders
Stale Catalog Causes Order Failures

If your sync is infrequent, orders will fail with E150 (denomination not available).