# Reject an Operation

Your rejection, signed with one of your approval keys or confirmed with your passkey. One rejection ends the request: nothing is signed or sent.

## Overview

- `signature`: a compact JWS of `payloads.reject` from [Get a Request](https://docs.aureahub.com/docs/approval-get.md) — [Sign a Decision](https://docs.aureahub.com/docs/guide-approvals.md). `reason`: optional, 1 to 500 characters, kept with your decision.
- **Or** `stepUpToken`: a step-up of your passkey for `approval.reject` on this operation ([Passkeys & Step-Up](https://docs.aureahub.com/docs/guide-passkeys.md)). One or the other, as for [Approve](https://docs.aureahub.com/docs/approval-approve.md): both, or neither, `400` `APPROVAL_SIGNATURE_MALFORMED`; a token for another decision — an `approval.approve` one included —, request or approver, `403` `STEP_UP_INVALID`.
- `200` with the request, `status` `rejected`. The operation is `REJECTED`, `failureReason` `APPROVAL_REJECTED`.
- The same checks as [Approve](https://docs.aureahub.com/docs/approval-approve.md), in the same order, and `400` `APPROVAL_REASON_INVALID` (`A reason is 1 to 500 characters`) before them. An approval's payload signed and sent here answers `400` `APPROVAL_SIGNATURE_PAYLOAD_MISMATCH`.
- At most 30 a minute.

## Endpoint

### `POST /v1/approvals/{operationId}/reject`

Authentication: bearer token required.

Rejects an operation held for approval.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `operationId` | string (uuid) | yes | The operation's id |

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `signature` | string | no | The compact JWS of `payloads.reject`, at most 4096 characters — or `stepUpToken` |
| `stepUpToken` | string | no | Instead of `signature`: your passkey's `approval.reject` step-up token for this operation, 1–200 characters |
| `reason` | string | no | 1–500 characters |

**Responses**

`200` Rejected

```json
{
  "id": "c3e1a9f4-6b2d-4e8a-9f17-5d0c2b8e4a63",
  "operationId": "1d7a3c52-8e4b-4f19-a0c6-2b9e7d5f3a18",
  "status": "rejected",
  "origin": "transactions.create",
  "initiatorId": "5d2c1b0a-9e8f-4a7b-8c6d-5e4f3a2b1c0d",
  "ruleId": "e2b6d9f1-7a3c-4c58-8b0e-5f1a4d2c9b73",
  "ruleName": "Large transfers need two approvers",
  "policySetVersion": 2,
  "threshold": 2,
  "approvals": 1,
  "rejections": 1,
  "approverIds": null,
  "excludeInitiator": true,
  "chain": "gnosis",
  "chainId": 100,
  "asset": "0x2a22f9c3b484c3629090feed35f17ff8f88f76f0",
  "amount": "35000000000",
  "amountRef": "32150.75",
  "destination": "0x52908400098527886e0f7030069857d2e4169ee7",
  "expiresAt": null,
  "createdAt": "2026-10-06T12:01:44.120Z",
  "decidedAt": "2026-10-06T12:24:51.302Z"
}
```

`400` Other payload

```json
{
  "statusCode": 400,
  "error": "BadRequestError",
  "message": "The signed payload is not this request's canonical \"reject\" payload (GET /v1/approvals/{operationId}: payloads)",
  "details": { "code": "APPROVAL_SIGNATURE_PAYLOAD_MISMATCH" }
}
```

---

Web version: https://docs.aureahub.com/#approval-reject
