> ## Documentation Index
> Fetch the complete documentation index at: https://help-loyalife.xoxoday.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Poll Batch Status

> Check the processing status of a transaction batch submitted via Insert Transaction V2.

Checks the processing status of a transaction batch submitted via [Insert Transaction V2](/api-reference/transactions/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

<AccordionGroup>
  <Accordion title="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                          |
  </Accordion>
</AccordionGroup>

## 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`.                                                                                                                                   |

<Warning>
  Keep polling until `summary.pending === 0`. Items in `PENDING` state are not yet finalized.
</Warning>


## OpenAPI

````yaml GET /lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus
openapi: 3.1.0
info:
  title: Loyalife LBMS API
  description: >-
    REST API for Loyalife's Loyalty Management System. Covers member management,
    OTP authentication, loyalty transactions, and points redemption.
  version: 1.0.0
  contact:
    name: Xoxoday Support
    email: support@xoxoday.com
servers:
  - url: https://loyalife-api.xoxoday.in
    description: Production
security:
  - bearerAuth: []
paths:
  /lbms-ingress/transaction-lm/API/Transaction/PollTransactionBatchStatus:
    get:
      tags:
        - Transactions
      summary: Poll Batch Status
      description: >-
        Check processing status of a batch submitted via Insert Transaction V2.
        Poll until `summary.pending === 0`.
      operationId: pollTransactionBatchStatus
      parameters:
        - $ref: '#/components/parameters/pintProgramId'
        - name: batch_id
          in: query
          required: true
          description: UUID returned by InsertTransactionDataV2
          schema:
            type: string
            format: uuid
            example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
      responses:
        '200':
          description: Batch status
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: object
                    properties:
                      IsSucessful:
                        type: boolean
                      ErrorCode:
                        type: string
                      ExceptionMessage:
                        type: string
                      ReturnObject:
                        type: object
                        properties:
                          batch_id:
                            type: string
                            format: uuid
                          summary:
                            type: object
                            properties:
                              total:
                                type: integer
                              success:
                                type: integer
                              failed:
                                type: integer
                              pending:
                                type: integer
                              on_hold:
                                type: integer
                              partial_hold:
                                type: integer
                          results:
                            type: array
                            items:
                              type: object
                              properties:
                                request_id:
                                  type: string
                                status:
                                  type: string
                                  enum:
                                    - SUCCESS
                                    - FAILED
                                    - ON HOLD
                                    - PARTIAL HOLD
                                    - PENDING
                                points:
                                  type: integer
                                message:
                                  type: string
                                error:
                                  type: string
                      Count:
                        type: integer
              example:
                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
components:
  parameters:
    pintProgramId:
      name: pintProgramId
      in: query
      required: true
      description: Your loyalty program ID
      schema:
        type: integer
        example: 19
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        JWT obtained from Generate Auth Token. Pass as `Authorization: bearer
        {token}`.

````