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

# receipts/manual_approval_required

This webhook is triggered when a customer uploads a receipt that requires manual
review before it can be approved or declined.

To subscribe to this webhook, your access token needs to contain the
`read_customers` scope.

## Payload

<ResponseField name="customer" type="object" required>
  Customer object with the same shape as the [Customers
  API](/api-reference/v2/resources/customers/list-customers#response-customers)
  response
</ResponseField>

<ResponseField name="receipt" type="object" required>
  <Expandable defaultOpen>
    <ResponseField name="id" type="number" required>
      The LoyaltyLion ID of the receipt
    </ResponseField>

    <ResponseField name="status" type="string" required>
      The status of the receipt. Will be `awaiting_manual_review` for this event
    </ResponseField>

    <ResponseField name="retailer_name" type="string | null" required>
      The name of the retailer on the receipt
    </ResponseField>

    <ResponseField name="total_paid" type="number | null" required>
      The total amount paid, in the receipt's currency
    </ResponseField>

    <ResponseField name="tax_paid" type="number | null" required>
      The tax amount paid, in the receipt's currency
    </ResponseField>

    <ResponseField name="currency" type="string | null" required>
      The ISO 4217 currency code of the receipt
    </ResponseField>

    <ResponseField name="fraud_score" type="number | null" required>
      The fraud score of the receipt, from 0 to 100
    </ResponseField>

    <ResponseField name="duplicate" type="boolean | null" required>
      Whether the receipt was detected as a duplicate
    </ResponseField>

    <ResponseField name="retailer_receipt_date" type="string | null" required>
      The date on the receipt, as an ISO 8601 timestamp
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      When the receipt was uploaded, as an ISO 8601 timestamp
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="rule" type="object" required>
  <Expandable defaultOpen>
    <ResponseField name="id" type="number" required>
      The LoyaltyLion ID of the retail purchase rule
    </ResponseField>

    <ResponseField name="name" type="string" required>
      The name of the rule
    </ResponseField>
  </Expandable>
</ResponseField>

## Example

```json Example theme={null}
{
  "id": "bff1bddb-6cd8-4c2c-9619-18744657053c",
  "topic": "receipts/manual_approval_required",
  "created_at": "2025-03-15T10:30:00.000Z",
  "payload": {
    "customer": {
      "id": 6932,
      "merchant_id": "2134606599",
      "email": "jessica@example.com",
      "points_approved": 200,
      "points_pending": 0,
      "points_spent": 500,
      "rewards_claimed": 5,
      "rewards_used": 0,
      "properties": {
        "name": "Jessica White"
      },
      "metadata": {},
      "birthday": "1990-01-29",
      "blocked": false,
      "guest": false,
      "enrolled": true,
      "enrolled_at": "2015-12-10T03:00:00.000Z",
      "referral_id": null,
      "referred_by": null,
      "loyalty_tier_membership": null,
      "tier_eligibility": null,
      "insights_segment": "Loyal",
      "referral_url": null,
      "created_at": "2016-12-10T03:00:00.000Z",
      "updated_at": "2025-03-15T10:30:00.000Z"
    },
    "receipt": {
      "id": 42,
      "status": "awaiting_manual_review",
      "retailer_name": "Walmart",
      "total_paid": 85.5,
      "tax_paid": 7.5,
      "currency": "USD",
      "fraud_score": 55,
      "duplicate": false,
      "retailer_receipt_date": "2025-03-14T00:00:00.000Z",
      "created_at": "2025-03-14T18:22:00.000Z"
    },
    "rule": {
      "id": 1234,
      "name": "$retail_purchase"
    }
  }
}
```
