**Version: 202601**

# Deduct points

**POST** `/openapi/2026-01/loyalty/members/points/deduct`

Subtract points from one or more members

## Request

**application/json**

**Body | Example**

**Body (required)**

- `operate_type` string (required)

  Member locator type: member\_id or email
- `operate_values` string[] (required)

  Locator values to deduct. Up to 200 per request
- `points` int64 (required)

  Points to deduct. Must be positive; server records a negative change
- `reason` string

  Business reason stored with the points change record
- `idempotency_key` string

  Batch-level idempotency key
- `send_email` boolean

  Whether to send a points-change notification email to the member

```json
{
  "operate_type": "string",
  "operate_values": [
    "string"
  ],
  "points": 0,
  "reason": "string",
  "idempotency_key": "string",
  "send_email": true
}
```

## Responses

**200**

OK

**application/json**

**Schema | Example**

**Schema**

- `code` string

  error code
- `message` string

  error message
- `data` object

  - `success_count` int32

    Number of successful items
  - `failed_count` int32

    Number of failed items
  - `results` object[]

    Points change results. change\_value is negative

    *   Array \[

    - `member_id` string

      Resolved member ID
    - `transaction_id` string

      Points transaction ID
    - `change_value` int64

      Change amount. Positive for earn, negative for deduct
    - `occurred_at` string

      Effective time, ISO-8601
    *   \]
  - `failed_values` string[]

    Locator values that failed

```json
{
  "code": "string",
  "message": "string",
  "data": {
    "success_count": 0,
    "failed_count": 0,
    "results": [
      {
        "member_id": "string",
        "transaction_id": "string",
        "change_value": 0,
        "occurred_at": "string"
      }
    ],
    "failed_values": [
      "string"
    ]
  }
}
```
