curl https://api.thanxsandbox.com/partner/points_experience/issue \
-X POST \
-H 'X-ClientId: {client_id}' \
-H 'Accept-Version: v4.0' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {access_token}' \
-H 'X-Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
-d '{
"merchant_id": "k2lye10h32l5wzo",
"points": 250,
"reason": "Service recovery",
"identifiers": [
{
"type": "email",
"value": "jane.smith@example.com"
},
{
"type": "phone",
"value": "+14155551234"
}
]
}'
{
"issuance_job": {
"id": "job_xyz789",
"points": 250,
"state": "pending",
"total_count": 2,
"processed_count": 0,
"success_count": 0,
"failure_count": 0,
"progress_percent": 0,
"created_at": "2026-10-16T10:30:00Z",
"started_at": null,
"completed_at": null
}
}
Points Experience
Issue Points
Issue bonus points to users in a points experience
POST
/
partner
/
points_experience
/
issue
curl https://api.thanxsandbox.com/partner/points_experience/issue \
-X POST \
-H 'X-ClientId: {client_id}' \
-H 'Accept-Version: v4.0' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {access_token}' \
-H 'X-Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
-d '{
"merchant_id": "k2lye10h32l5wzo",
"points": 250,
"reason": "Service recovery",
"identifiers": [
{
"type": "email",
"value": "jane.smith@example.com"
},
{
"type": "phone",
"value": "+14155551234"
}
]
}'
{
"issuance_job": {
"id": "job_xyz789",
"points": 250,
"state": "pending",
"total_count": 2,
"processed_count": 0,
"success_count": 0,
"failure_count": 0,
"progress_percent": 0,
"created_at": "2026-10-16T10:30:00Z",
"started_at": null,
"completed_at": null
}
}
Scope required:
points.issue202 Accepted response containing the issuance job details. Use the
Get Issuance Job endpoint to poll
for completion status.
Points issued through this endpoint are bonus points: they are added to the
user’s balance directly and do not require the user to activate a reward. See
the Points guide for how points are earned and
redeemed.
Best Practices for Event-Driven Workflows
We recommend batching identifiers into a single request whenever possible. Sending individual requests per user is significantly less efficient and may result in rate limiting under the global rate limits. Collect identifiers and submit them in batches of up to 10,000 per request for optimal throughput.Idempotency
This endpoint supports idempotent requests via theX-Idempotency-Key
header. When provided, duplicate requests with the same key return the
cached response from the original request. If the request body differs
from the original, a 422 Unprocessable Entity error is returned.
Always send an idempotency key when issuing points. Retrying a request
without one can credit users more than once.
Parameters
string
required
Merchant ID
integer
required
Number of bonus points to issue to each user. Must be a positive integer.
array
required
string
Optional note describing why the points were issued. Stored with the points
transaction for auditing.
string
Optional idempotency key to prevent duplicate issuance jobs.
Response
Returns202 Accepted with the issuance job object.
string
Issuance job ID
integer
Number of points issued to each user
string
Job state:
pending, processing, completed, or failedinteger
Total number of identifiers submitted
integer
Number of identifiers processed so far
integer
Number of users successfully issued points
integer
Number of failed issuances
integer
Completion percentage (0-100)
datetime
Job creation timestamp (ISO8601)
datetime
Processing start timestamp (ISO8601), null if not started
datetime
Processing completion timestamp (ISO8601), null if not completed
curl https://api.thanxsandbox.com/partner/points_experience/issue \
-X POST \
-H 'X-ClientId: {client_id}' \
-H 'Accept-Version: v4.0' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {access_token}' \
-H 'X-Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
-d '{
"merchant_id": "k2lye10h32l5wzo",
"points": 250,
"reason": "Service recovery",
"identifiers": [
{
"type": "email",
"value": "jane.smith@example.com"
},
{
"type": "phone",
"value": "+14155551234"
}
]
}'
{
"issuance_job": {
"id": "job_xyz789",
"points": 250,
"state": "pending",
"total_count": 2,
"processed_count": 0,
"success_count": 0,
"failure_count": 0,
"progress_percent": 0,
"created_at": "2026-10-16T10:30:00Z",
"started_at": null,
"completed_at": null
}
}