# Approve an Address Book Entry

There is no approval step: this starts the cooling of an entry still pending, which is active when it ends.

## Overview

- **An entry cools from its request** ([No Approval Step](https://docs.aureahub.com/docs/guide-address-book.md)): a cooling or active entry has nothing left to approve — `409` `ADDRESS_BOOK_ENTRY_NOT_PENDING` with `details.approvalStep` `none`.
- **An entry still in `pending_approval`** — asked for while entries were approved, or an external address waiting for the proof your settings require — moves to `cooling` until `activeAt` (`approval.approvedAt` + your cooling period), or to `active` at once when the period is 0: `200` with the entry, `approval.approvedBy` you, `approval.requiredApprovals` `0`. No body. Any of your administrators may do it, who asked included.
- Checked in this order: the entry is yours (`404` `ADDRESS_BOOK_ENTRY_NOT_FOUND`), not rejected or removed (`409` `ADDRESS_BOOK_ENTRY_FINAL`), pending (`409` `ADDRESS_BOOK_ENTRY_NOT_PENDING`); where your settings require it, an external entry is proven (`409` `ADDRESS_BOOK_PROOF_REQUIRED`) — once proven, its proof has started its cooling already.
- For `owner`, `tenantadmin` and `non_signing_admin`.

## Endpoint

### `POST /v1/address-book/entries/{entryId}/approve`

Authentication: bearer token required.

Starts the cooling of an entry still pending.

**Path parameters**

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

**Responses**

`200` Cooling

```json
{
  "id": "8f3c2a71-5d4e-4b9a-a6c1-2e7f9d0b3c58",
  "accountId": null,
  "kind": "external",
  "family": "evm",
  "network": "mainnet",
  "chain": "base",
  "chainId": null,
  "address": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
  "walletId": null,
  "label": "Supplier payouts",
  "tags": ["suppliers"],
  "customerRefId": "SUP-0042",
  "status": "cooling",
  "version": 1,
  "requestedBy": "0d2f6b8a-4c1e-4a93-b7d5-2e9f1c3a8b60",
  "requestedScope": "tenant",
  "requestedAt": "2026-10-08T08:00:12.000Z",
  "approval": {
    "approvedBy": "6a1c9e3f-2b7d-4f50-8e4a-0c5d3b9f7e12",
    "approvedScope": "tenant",
    "approvedAt": "2026-10-08T08:30:00.000Z",
    "requiredApprovals": 0
  },
  "coolingPeriodSeconds": 86400,
  "activeAt": "2026-10-09T08:30:00.000Z",
  "coolingSecondsLeft": 86400,
  "proof": { "proven": true, "method": "eip191", "provenAt": "2026-10-08T08:10:41.000Z" },
  "rejectedBy": null,
  "rejectedAt": null,
  "removedBy": null,
  "removedAt": null,
  "createdAt": "2026-10-08T08:00:12.000Z",
  "updatedAt": "2026-10-08T08:30:00.000Z"
}
```

`409` Not pending

```json
{
  "statusCode": 409,
  "error": "ConflictError",
  "message": "There is no approval step: an entry cools from its request, nothing is left to approve",
  "details": { "code": "ADDRESS_BOOK_ENTRY_NOT_PENDING", "status": "cooling", "approvalStep": "none" }
}
```

`409` Proof required

```json
{
  "statusCode": 409,
  "error": "ConflictError",
  "message": "The tenant requires an external address to be proven before it is approved",
  "details": { "code": "ADDRESS_BOOK_PROOF_REQUIRED" }
}
```

**Example request**

```bash
curl -X POST https://api.aureahub.com/v1/address-book/entries/$ENTRY_ID/approve \
  -H "Authorization: Bearer $ADMIN_TOKEN"
```

---

Web version: https://docs.aureahub.com/#address-book-entry-approve
