Appearance
OData API - Fetching Promotional Offers
Overview
The OData API allows you to fetch promotional offers to display to customers. This is the primary endpoint for real-time offer retrieval.
Endpoint
GET https://pr-api.falconlabs.us/api/odataAuthentication
Use the publisher’s Public Key:
Authorization: Bearer PUBLIC_KEYNote: This is the only endpoint that uses the public key. All other endpoints use the private key.
Query Parameters
Required Parameters
placementId(string): Placement ID from placement creationsessionId(string): Unique session identifier for the customer (can use email, hashed email, or orderId)at.email(string): Customer email address (plain or SHA-256 hashed)at.orderid(string): Order ID
Note: At minimum, you must provide placementId, sessionId, and either at.email or at.orderid for proper tracking.
Optional Parameters
count(number, default: 4): Number of offers to return
Customer Data Parameters
Pass customer and order data with the at. prefix for better targeting and analytics:
Customer Information:
at.email(string): Customer email address (lowercase, trimmed, or SHA-256 hashed)at.firstnameorat.fname(string): Customer first nameat.lastnameorat.lname(string): Customer last nameat.phoneorat.mobile(string): Phone number (10-15 digits)at.country(string): Country code (ISO format, e.g., “US”, “GB”)at.language(string): Language code (e.g., “en”, “es”)at.address(string): Customer address (max 500 chars)at.zipcode(string): ZIP/postal code (max 20 chars)
Email Hashing: For privacy compliance, you can hash the email using SHA-256 before sending. Pass the hashed value in at.email parameter. Only SHA-256 hashing is supported.
Example:
email@example.com→ SHA-256 →a1b2c3d4e5f6...(64-character hex string)
Order Information:
at.orderidorat.order_id(string): Order ID (max 100 chars)at.amountorat.ordervalue(number): Order amount (0-1,000,000)at.currency(string): Currency code (e.g., “USD”, “EUR”, “GBP”)at.billingaddress1(string): Billing address (max 500 chars)at.billingzipcode(string): Billing ZIP code (max 20 chars)at.paymenttypeorat.payment_type(string): Payment method- Valid values:
creditCard,debitCard,paypal,applePay,googlePay,bankTransfer,crypto,other
Supported Currencies: USD, EUR, GBP, CAD, AUD, JPY, CNY, NZD, CHF, SEK, NOK, DKK, PLN, CZK, HUF, RON, BGN, HRK, RUB, TRY, BRL, MXN, ARS, CLP, COP, PEN, UYU, INR, IDR, MYR, PHP, SGD, THB, VND, KRW, HKD, TWD, SAR, AED, ILS, EGP, ZAR, NGN, KES, GHS
Example Request
bash
curl -X GET "https://pr-api.falconlabs.us/api/odata?placementId=clx4d5e6f7g8h9i0j1k2l3m4n&sessionId=session_abc123&count=4&at.email=customer@example.com&at.firstname=John&at.lastname=Doe&at.orderid=ORDER-12345&at.amount=125.50&at.currency=USD&at.country=US" \
-H "Authorization: Bearer pub_1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"Success Response (200 OK)
json
{
"offers": [
{
"bannerId": "12345",
"title": "15% off your next order",
"header": "Limited-time thank you",
"description": "Save on your next purchase.\nUse code THANKS15",
"ctaText": "REDEEM",
"declineButtonText": "No thanks",
"clickUrl": "https://pr-api.falconlabs.us/click?...",
"beaconUrl": "https://pr-api.falconlabs.us/vdata?...",
"closeUrl": "https://pr-api.falconlabs.us/close?...",
"termsUrl": "https://brand.com/terms",
"icon": {
"url": "https://cdn.example.com/icon.png",
"width": 120,
"height": 120
}
},
{
"bannerId": "12346",
"title": "Get 20% off at Nike",
"header": "Shop athletic wear",
"description": "Premium sportswear at great prices",
"ctaText": "SHOP NOW",
"declineButtonText": "No thanks",
"clickUrl": "https://pr-api.falconlabs.us/click?...",
"beaconUrl": "https://pr-api.falconlabs.us/vdata?...",
"closeUrl": "https://pr-api.falconlabs.us/close?..."
}
],
"adDisplayDelay": 0,
"isTestMode": true,
"siteStatus": "active",
"templateData": {
"brandName": "Fashion Boutique",
"privacyUrl": "https://fashionboutique.com/privacy",
"brandTemplateImageUrl": "https://cdn.example.com/brand-logo.png",
"toggleCloseButtonDelay": 5000,
"showFirstOfferIcon": true,
"showPartnership": true,
"templateConfig": {
"iconConfig": {
"mobilePosition": "below-subtitle-above-description",
"showIcon": true
},
"textConfig": {
"titleSize": "large",
"subtitleSize": "medium",
"descriptionSize": "medium",
"titleTransform": "uppercase"
},
"layoutConfig": {
"gridColumnsDesktop": ["60%", "fill"],
"gridColumnsMobile": "100%",
"gridGap": "large"
},
"buttonConfig": {
"primaryButtonKind": "primary",
"primaryButtonAppearance": "accent",
"buttonLayoutMobile": "vertical"
},
"linksConfig": {
"showTermsLink": true,
"showDisclaimerLink": false
},
"footerConfig": {
"showPartnership": true,
"privacyLinkLabel": "Privacy Policy"
}
}
}
}Response Fields:
offers: Array of promotional offers to displayclickUrl: URL to redirect to when customer clicks the offerbeaconUrl: URL to call when offer is displayed (impression tracking)closeUrl: URL to call when customer closes the ad
isTestMode: Whether the placement is in test modetemplateData: Configuration data for customizing the ad displaytemplateConfig: Display configuration parameters (see Adjustable Template section)
Error Responses
400 Bad Request - Missing Parameters
json
{
"success": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "Missing required parameters",
"details": {
"missingFields": ["placementId", "sessionId"]
}
}
}401 Unauthorized - Invalid Public Key
json
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing public key"
}
}404 Not Found - Invalid Placement
json
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Placement not found",
"details": {
"placementId": "invalid_placement_id"
}
}
}500 Internal Server Error
json
{
"success": false,
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An unexpected error occurred while fetching offers"
}
}