Poll Batch Status
curl --request GET \
--url https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus \
--header 'Authorization: Bearer <token>'import requests
url = "https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"results": {
"IsSucessful": true,
"ErrorCode": "000",
"ExceptionMessage": "Success",
"ReturnObject": {
"batch_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"summary": {
"total": 5,
"success": 3,
"failed": 1,
"pending": 0,
"on_hold": 1,
"partial_hold": 0
},
"results": [
{
"request_id": "req-001",
"status": "SUCCESS",
"points": 150,
"message": "Points awarded"
},
{
"request_id": "req-002",
"status": "FAILED",
"error": "Invalid product code"
},
{
"request_id": "req-003",
"status": "ON HOLD",
"message": "Points hold enabled — pending review"
}
]
},
"Count": 0
}
}Transactions
Poll Batch Status
Check the processing status of a transaction batch submitted via the Insert Transaction V2 API.
GET
/
lbms-ingress
/
transaction-lm
/
API
/
Transaction
/
PollTransactionBatchStatus
Poll Batch Status
curl --request GET \
--url https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus \
--header 'Authorization: Bearer <token>'import requests
url = "https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://loyalife-api.xoxoday.in/lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"results": {
"IsSucessful": true,
"ErrorCode": "000",
"ExceptionMessage": "Success",
"ReturnObject": {
"batch_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"summary": {
"total": 5,
"success": 3,
"failed": 1,
"pending": 0,
"on_hold": 1,
"partial_hold": 0
},
"results": [
{
"request_id": "req-001",
"status": "SUCCESS",
"points": 150,
"message": "Points awarded"
},
{
"request_id": "req-002",
"status": "FAILED",
"error": "Invalid product code"
},
{
"request_id": "req-003",
"status": "ON HOLD",
"message": "Points hold enabled — pending review"
}
]
},
"Count": 0
}
}Checks the processing status of a transaction batch submitted via Insert Transaction V2. Since V2 processing is asynchronous, your system must poll this endpoint until
summary.pending reaches 0 to confirm all transactions have been evaluated. The response includes per-item outcomes so you can identify and handle any failures or holds individually. Use exponential backoff when polling to avoid rate limits.
Responses
200 — Success
200 — Success
| Path | Type | Description |
|---|---|---|
results.IsSucessful | boolean | true |
results.ReturnObject.batch_id | string | The batch UUID |
results.ReturnObject.summary.total | integer | Total transactions in batch |
results.ReturnObject.summary.success | integer | Successfully processed |
results.ReturnObject.summary.failed | integer | Failed count |
results.ReturnObject.summary.pending | integer | Still processing — keep polling while > 0 |
results.ReturnObject.summary.on_hold | integer | Held for review |
results.ReturnObject.summary.partial_hold | integer | Partially awarded, remainder on hold |
results.ReturnObject.results[].request_id | string | Per-transaction reference |
results.ReturnObject.results[].status | string | SUCCESS | FAILED | ON HOLD | PARTIAL HOLD | PENDING |
results.ReturnObject.results[].points | integer | Points awarded — present for SUCCESS and PARTIAL HOLD |
results.ReturnObject.results[].message | string | Human-readable status message |
results.ReturnObject.results[].error | string | Error reason — present for FAILED only |
Per-Item Status Values
| Status | Fields Present | Meaning |
|---|---|---|
SUCCESS | points, message | Fully processed. points reflects the awarded amount. |
FAILED | error | Processing failed. error contains the reason — check program logs for the request_id. |
ON HOLD | message | The Points Hold feature or an Anomaly Detection threshold is configured for your program. No points are awarded until the hold is reviewed and released in Loyalife Admin. |
PARTIAL HOLD | points, message | A transaction generated multiple reward events. Some were awarded immediately (points reflects those); the remainder are held because Points Hold or Anomaly Detection is active. Held rewards release after admin review. |
PENDING | message | Still processing. Poll again — use exponential backoff until no items remain in PENDING. |
Keep polling until
summary.pending === 0. Items in PENDING state are not yet finalized.Authorizations
JWT obtained from Generate Auth Token. Pass as Authorization: bearer {token}.
Query Parameters
Your loyalty program ID
Example:
19
UUID returned by InsertTransactionDataV2
Example:
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Response
200 - application/json
Batch status
Show child attributes
Show child attributes
⌘I