Build powerful loyalty and engagement integrations with the Wecheer platform. Send events, sync profiles, and receive real-time data.
Wecheer offers a bi-directional integration framework that enables enterprise clients to seamlessly exchange real-time data and events with the Wecheer platform.
┌───────────────────────────────────────────────────────────────────────┐
│ YOUR SYSTEMS │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ CRM │ │ CDP │ │Analytics│ │ E-com │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└──────┬──────────────────────────┬──────────────────────────┬──────────┘
│ Outbound │ Inbound │ Inbound
│ (Wecheer → You) │ (via Segment) │ (via API)
▲ ▼ ▼
┌──────┴──────────┐ ┌──────────┴──────────┐ ┌──────────────────┐
│ SEGMENT │ │ SEGMENT │ │ WECHEER API │
│ (Outbound) │ │ (Inbound) │ │ (Inbound) │
└──────┬──────────┘ └──────────┬──────────┘ └────────┬─────────┘
└──────────────────────────┴──────────────────────┐ │
▼ ▼
┌───────────────────────────────────────────────────────────────────────┐
│ WECHEER PLATFORM │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Campaigns │ │ Rewards │ │ Users │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────────────────┘Wecheer becomes the source of real-time platform events delivered into client systems through Segment.
Send user attributes or behavioral events into Wecheer via Segment or our standard public APIs, enabling Wecheer to reward and recognize user actions.
Wecheer uses Segment as its outbound event delivery middleware. When users interact with your campaign, Wecheer streams real-time events into your Segment workspace.
┌───────────────────────────────────────────────────────────────────────┐
│ WECHEER PLATFORM │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ User Joins │ │ Scans │ │ Redeems │ │
│ │ Campaign │ │ Product │ │ Reward │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ └────────────────┼────────────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Event Stream │ │
│ └────────┬────────┘ │
└──────────────────────────┼───────────────────────────────────────────┘
▼
┌─────────────────────────┐
│ SEGMENT │
└─────────────┬───────────┘
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Your CRM │ │ Your CDP │ │ Analytics │
└───────────────┘ └───────────────┘ └───────────────┘Recommended for most clients. Wecheer sends events directly into your Segment workspace, ready to route to any destination.
For advanced use cases requiring event transformation or routing to systems not in the Segment catalog.
Wecheer emits three categories of events.
Scans, purchases, points earned, stamps received
Registration, profile updates, data sharing
Redemptions, catalog activity
The recommended approach for most clients. Wecheer will be onboarded as a Source in your Segment workspace and will automatically forward all campaign events in real time.
Wecheer Platform
│
│ track() calls
▼
Segment Source (Wecheer)
│
├──► Salesforce CRM
├──► BigQuery / Snowflake
├──► Braze / Iterable
└──► Any Segment DestinationThe full step-by-step setup guide is published and maintained by our team in the official Segment catalog documentation.
View Setup Guide on Segment Docs ↗Once Wecheer is connected as a Segment Source, you can route events to any destination in the Segment Catalog with no additional development.
| Platform | Category | Typical Use Case | Docs |
|---|---|---|---|
| HubSpot | CRM / Marketing | Sync loyalty events into contact timelines, trigger workflows on reward or redemption events | Setup Guide ↗ |
| Salesforce | CRM | Push Wecheer user and consumption events into Salesforce contacts and custom objects | Setup Guide ↗ |
| Braze | Marketing Automation | Trigger CRM campaigns (push, email, SMS) based on Wecheer reward or punchcard events | Setup Guide ↗ |
| Iterable | Marketing Automation | Drive email and push journeys from loyalty milestones | Setup Guide ↗ |
| Google BigQuery | Data Warehouse | Store all Wecheer events in your data warehouse for SQL analysis and BI reporting | Setup Guide ↗ |
| Snowflake | Data Warehouse | Load Wecheer event data alongside your existing Snowflake datasets | Setup Guide ↗ |
| Mixpanel | Product Analytics | Analyze engagement funnels and loyalty behavior alongside product usage data | Setup Guide ↗ |
| Amplitude | Product Analytics | Correlate Wecheer reward events with user retention and feature engagement | Setup Guide ↗ |
HubSpot is available as a native destination in the Segment Catalog. Once Wecheer is set up as a Source, connecting HubSpot takes only a few minutes and requires no code changes.
In your Segment workspace, go to Connections → Destinations → Add Destination and search for HubSpot. Select the Wecheer source as the data source.
Click Connect to HubSpot and log in with your HubSpot account credentials. Segment will store the OAuth connection securely.
Map Wecheer events (e.g. RewardReceived, PunchcardCompleted, UserCreated) to HubSpot contact properties or custom events. Use Segment's mapping UI - no code required.
Check your HubSpot contact timeline and custom event log to confirm events are arriving. Use Segment's Event Debugger to troubleshoot any mapping issues.
Use a Segment Function when you need to transform Wecheer events before forwarding them, or when your destination is not available in the Segment catalog.
A Segment Function is a small JavaScript function that runs in Segment's cloud infrastructure. It receives incoming Wecheer events, applies your custom logic, and forwards the processed data to your endpoint.
Wecheer Platform
│
│ track() calls
▼
Segment Source (Wecheer)
│
▼
Segment Function
(Your transformation logic)
│
▼
Your Custom Endpoint / SystemIn your Segment workspace, go to Connections → Catalog → Functions and create a new Destination Function.
Implement your event handling logic in JavaScript. The function receives a Segment event object and can forward it to any HTTP endpoint.
async function onTrack(event, settings) {
const payload = {
eventName: event.event,
userId: event.userId,
timestamp: event.timestamp,
properties: event.properties
};
const response = await fetch(settings.destinationUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${settings.apiToken}`
},
body: JSON.stringify(payload)
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
}In Segment, connect your newly created Function as a Destination of the Wecheer Source. Configure any required settings (e.g. destination URL, API token).
Use Segment's Function testing tools to send sample Wecheer events through your function and verify the output before going live.
Wecheer emits three categories of Segment events. All events follow the standard Segment track structure with Wecheer-specific properties.
{
"type": "track",
"event": "EventName",
"userId": "user-uuid-12345",
"timestamp": "2026-01-15T12:34:56.789Z",
"properties": { },
"context": { "source": "wecheer", "version": "1.0" }
}Events triggered by product scans, purchases, and reward-earning activities.
| Event | Description |
|---|---|
any_consumption | User scans QR code or receipt validated |
first_consumption | User's first consumption in campaign |
consumption_match_item | Receipt item matched campaign rules |
points_received | Points awarded to user |
PunchcardStampsReceived | Stamps earned on punchcard |
punchcard_step_completed | Punchcard milestone reached |
card_received | User received a campaign card |
CheercoinsUpdated | Coin balance changed |
{
"type": "track",
"event": "points_received",
"userId": "user-uuid-12345",
"timestamp": "2026-01-15T12:34:56.789Z",
"properties": {
"eventId": "evt-uuid-12345",
"campaignId": "camp-12345",
"points": 150,
"reason": "product_scan",
"previousBalance": 1000,
"newBalance": 1150
}
}Events related to user registration, profile updates, and data sharing.
| Event | Description |
|---|---|
user_created | New user registered |
user_updated | Profile information changed |
user_data_shared | User shared data with campaign |
UserChannelSubscriptionChanged | Communication preferences changed |
{
"type": "track",
"event": "user_created",
"userId": "user-uuid-12345",
"properties": {
"email": "user@example.com",
"phone": "+1234567890",
"registrationSource": "campaign_link",
"campaignId": "camp-12345",
"marketingConsent": true
}
}Events for reward catalog and redemption activities.
| Event | Description |
|---|---|
RewardCreated | New reward added to catalog |
CatalogRedeem | User redeemed reward from catalog |
Redeem Reward Started | Redemption process initiated |
Redeem Reward Failed | Redemption failed |
{
"type": "track",
"event": "CatalogRedeem",
"userId": "user-uuid-12345",
"properties": {
"redemptionId": "redeem-uuid-12345",
"rewardId": "reward-uuid-12345",
"rewardName": "Coffee Voucher",
"cost": { "points": 500 },
"voucherCode": "COFFEE-ABC123"
}
}The Webhook integration will allow Wecheer to deliver outbound events directly to an HTTP endpoint of your choice - without requiring a Segment workspace. This is ideal for clients who prefer direct server-to-server communication or have specific infrastructure requirements that make Segment impractical.
The Segment Destination integration will allow you to send events to Wecheer directly from your existing Segment workspace - using your existing Segment tracking infrastructure. Instead of integrating with the Wecheer API directly, you will simply add Wecheer as a Destination in Segment and route the relevant events.
Your Systems (Mobile App, Web, Backend)
│
│ Segment track() / identify()
▼
Your Segment Workspace
│
▼
Wecheer Destination (Segment Catalog)
│
▼
Wecheer Platform (Rewards & Campaigns)Send events directly to Wecheer using the Inbound API. This is the primary integration method for triggering rewards, processing user actions, and syncing data from your systems.
┌─────────────────────────────────────────────────────────────────┐
│ YOUR SYSTEMS │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ E-com │ │ CRM │ │ App │ │ POS │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼──────────────────┘
└────────────┴─────┬──────┴────────────┘
▼
┌─────────────┐
│ Wecheer │
│ Inbound │
│ API │
└─────────────┘User fills out profile → Welcome reward
User submits review → Review points
User answers survey → Survey reward
User reads article or watches video → Engagement points
Before a user can receive rewards through the Wecheer platform, the following conditions must be met.
The user must join a campaign to be eligible for rewards.
https://staging.wecheer.me/loyalty/sb/ee1a6e8d-04e844cc-b3f3597195717ba5The consumption event must not have been previously processed. This is verified using the consumptionId, which must be unique for each consumption.
The user must not be blocked on the Wecheer side.
apiKey and apiSecret are different for different advertisers and different environments. The example values below are for advertiser 1000112586 in the staging environment.| Header Name | Header Value | Required |
|---|---|---|
apiKey | 7f2156c3-d398478b-854632efc7cade1b | Yes |
apiSecret | 3DpcdDQca8p3lZXQ1BoNBiGNlA3ZnCFjZYstElG0WHVMv13E87mrYPXdMj4hgIsM | Yes |
Content-Type | application/json-patch+json | Yes |
| Field | Type | Required | Example | Description |
|---|---|---|---|---|
advertiserId | string | Yes | 1000112586 | Partner/advertiser identifier. Constant. For Staging: 1000112586 |
curl -X 'POST' \
'https://api.wecheer.me/staging-usermanagement/api/advertiser/v1/authorize' \
-H 'accept: text/plain' \
-H 'apiKey: 7f2156c3-d398478b-854632efc7cade1b' \
-H 'apiSecret: 3DpcdDQca8p3lZXQ1BoNBiGNlA3ZnCFjZYstElG0WHVMv13E87mrYPXdMj4hgIsM' \
-H 'Content-Type: application/json-patch+json' \
-d '{
"advertiserId": "1000112586"
}'{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"advertiserId": "1000112586"
}| Status | Description |
|---|---|
200 OK | Returns an AuthorizationResponse object with access token. |
400 Bad Request | Returns an ErrorResponse if the request is invalid. |
401 Unauthorized | Returns an ErrorResponse if the API key is unauthorized. |
Used to process dynamic events based on configured SKUs from the platform, synthetically created to reflect user actions.
| Event Name | SKU | Comment | Rewards |
|---|---|---|---|
| Device Registered | glo_kz_deviceregist | Triggered when user registered device | 990 |
| Read Article | velo_pk_article_thr | Triggered when the user reads a specific article on the e-commerce website | 50 |
| Leave a Review | velo_pk_product_review | Triggered when the user leaves a review on the e-commerce website | 100 |
| Where did you use your velo quirky poll | velo_pk_poll_location | - | 100 |
| Did you make it through the weird to the wonderful quirky poll | velo_pk_poll_experience | - | 100 |
| Layered Awareness quirky poll | velo_pk_poll_strength | - | 100 |
| Header | Value | Required | Comment |
|---|---|---|---|
Authorization | Bearer token | Yes | Use token from response of Authorize Endpoint |
Content-Type | application/json-patch+json | Yes | - |
{
"consumptionId": "I198037776491223",
"consumptionDate": "20250425T12:34:00Z",
"identifiers": [
{
"key": "phoneNumber",
"value": "40720005123"
},
{
"key": "email",
"value": "user@example.com"
}
],
"consumptionLines": [
{
"sku": "velo_pk_poll_strength",
"quantity": 1
}
]
}| Field | Type | Required | Example | Description |
|---|---|---|---|---|
consumptionId | string | Yes | I198037776491223 | Id of the event in the client system. Must be unique. |
consumptionDate | string | Yes | 20250425T12:34:00Z | Datetime of the consumption. ISO 8601 format: YYYYMMDDTHH:MM:SSZ |
identifiers | Array of Identifier | Yes | - | User identifiers. Supports phoneNumber and email. At least one required. |
consumptionLines | Array of Consumption | Yes | - | Details of the dynamic event with quantity. Multiple lines supported. |
| Field | Type | Required | Example | Description |
|---|---|---|---|---|
key | string | Yes | email | Supported keys: phoneNumber, email |
value | string | Yes | user@example.com | The identifier's value |
| Field | Type | Required | Example | Description |
|---|---|---|---|---|
sku | string | Yes | velo_pk_poll_strength | Use SKU name from the dynamic event configuration |
productName | string | No | Device Registration Reward | For Dynamic events is equal to SKU. Optional. |
quantity | number | Yes | 1 | For Dynamic events should be 1 |
curl -X 'POST' \
'https://api.wecheer.me/staging-campaigns/api/advertiser-integration/v1/consumption' \
-H 'accept: text/plain' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-H 'Content-Type: application/json-patch+json' \
-d '{
"consumptionId": "I198037776491223",
"consumptionDate": "20250425T12:34:00Z",
"identifiers": [
{ "key": "phoneNumber", "value": "40720005123" },
{ "key": "email", "value": "user@example.com" }
],
"consumptionLines": [
{ "sku": "velo_pk_poll_strength", "quantity": 1 }
]
}'| Status | Description |
|---|---|
200 OK | Event successfully published |
400 Bad Request | Request is invalid. Possible messages: Missing AdvertiserId or ApiKey / Request body cannot be null / ConsumptionId is required / Identifiers are required |
401 Unauthorized | Client not authorized |
404 Not Found | Account not found (user not registered) / User has no cards (user did not join campaign) |
409 Conflict | Event already registered. Possible message: Consumption already processed |
500 Internal Server Error | Internal server error |
Getting your integration live is a team effort - and we've made our part as lightweight as possible.
We built our integration around a simple idea: your data environment is yours. Whether Wecheer is sending events into your tools or your platform is sending events into ours, you stay in full control - of your credentials, your data schema, and your business logic. No external party needs access to your internal systems.
Our role is to make the setup fast and the testing safe. We provide everything your team needs to move quickly - documentation, schemas, credentials, and a sandbox - so that by the time you go live, there are no surprises.
This covers the outbound flow: Wecheer campaign events (reward earned, stamp received, user registered, etc.) flowing into your CRM, marketing platform, or data warehouse via Segment.
| Step | Handled by |
|---|---|
| Add Wecheer as a Source from the Segment Sources catalog | You |
Name the source and save the settings (e.g. Wecheer_Prod, Wecheer_Staging) | You |
| Copy the Write Key from the Wecheer source settings page in Segment | You |
| Log in to Wecheer and navigate to Advertiser Settings → Outbound Events → Segment, then paste the Write Key | You |
| Select the list of events to subscribe to and save the configuration | You |
| Provide the full event schema, field definitions & sample payloads | Wecheer ✦ |
| Support and troubleshoot any issues with event delivery | Wecheer ✦ |
| Step | Handled by |
|---|---|
| Provide the event schema, payload structure & integration guide | Wecheer ✦ |
| Write the JavaScript function logic in your Segment workspace | You |
| Configure your destination endpoint & API credentials in the function | You |
| Connect the function to the Wecheer Source | You (we'll guide you) |
| Test, validate & deploy to production | You |
This covers the inbound flow: your platform sending purchase, scan, or engagement events into Wecheer via our API to trigger points, stamps, and rewards in real time.
| Step | Handled by |
|---|---|
| Provide API documentation, endpoint specs & event payload definitions | Wecheer ✦ |
| Provision your API credentials (Client ID & Secret) at the advertiser level | Wecheer ✦ |
| Provide a sandbox environment for safe pre-production testing | Wecheer ✦ |
| Configure the Wecheer campaign to accept and process your events | Wecheer ✦ |
| Implement the API calls from your system (authentication, payload construction, error handling) | You |
| Map your internal events to Wecheer's expected event format | You |
| Test your integration against the sandbox and validate event processing | You (we'll review results together) |
| Confirm production readiness & flip to live | Together |
If your team is stretched thin or you'd rather have us handle the heavy lifting, Wecheer offers hands-on implementation support through our paid Professional Services offering. Just let your Wecheer account manager know and we'll put together a proposal that fits your timeline and scope.
Segment Source setup & workspace invitation · Full event schema & documentation · API credentials & sandbox environment · Campaign configuration to receive your events · Enabling your live production stream · Ongoing technical support & Q&A
Segment workspace access & invitation acceptance · Destination setup & credentials (HubSpot, Salesforce, etc.) · Event mapping to your internal schema · Custom Function code, if using that path · API implementation & sandbox testing
HTTP status codes and error responses from the Wecheer API.
| Code | Status | Description |
|---|---|---|
200 | OK | Request succeeded |
400 | Bad Request | Invalid request format |
401 | Unauthorized | Missing or invalid authentication |
404 | Not Found | Resource does not exist |
409 | Conflict | Resource conflict (duplicate) |
429 | Too Many Requests | Rate limit exceeded |
500 | Internal Server Error | Unexpected server error |
| Code | Description | Solution |
|---|---|---|
INVALID_CREDENTIALS | apiKey or apiSecret invalid | Verify credentials |
ACCOUNT_NOT_FOUND | User not registered | User must register first |
USER_HAS_NO_CARDS | User hasn't joined campaign | User must join campaign |
CONSUMPTION_EXISTS | consumptionId already used | Use unique IDs |
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error description",
"details": { }
}
}API throttling policies and best practices for handling limits.
X-RateLimit-Limit: 300 X-RateLimit-Remaining: 295 X-RateLimit-Reset: 1705320000
async function requestWithBackoff(fn, maxRetries = 5) {
for (let i = 0; i < maxRetries; i++) {
const response = await fn();
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 60;
await sleep(retryAfter * 1000);
continue;
}
return response;
}
}Enterprise-grade security practices and certifications.
| Component | Security Features |
|---|---|
| Cloud Platform | AWS with serverless architecture |
| Network | WAF, VPC isolation, TLS 1.2+ |
| Data at Rest | AES-256 encryption |
| Data in Transit | TLS encryption |
| Server | SSL Grade |
|---|---|
| api.wecheer.me | A+ |
| app.wecheer.io | A+ |
| Regulation | Status |
|---|---|
| GDPR | ✅ Compliant |
| PDPA | ✅ Compliant |
Definitions of key terms used throughout the Wecheer platform.
| Term | Definition |
|---|---|
| Advertiser | The brand or company running campaigns on Wecheer |
| Campaign | A promotional program with defined rules, rewards, and duration |
| Card | A user's membership/participation record in a campaign |
| Cheercoins | Wecheer's universal currency across campaigns |
| Consumption | A validated action that earns rewards |
| Dynamic Event | A configurable action type represented by a SKU |
| Points | Campaign-specific currency earned through consumptions |
| Punchcard | Digital stamp card collecting stamps toward rewards |
| Redemption | Exchanging points/coins for a reward |
| SKU | Unique identifier for products or dynamic events |