Get Setup Contract History
Lists every deployment record of a setup, newest first: the initial deployment (create) and each later upgrade (update), with its status and, per contract, the versions, addresses and transaction hash. Get Setup Contracts folds these records into the current view; this endpoint returns them unfolded.
The response is a JSON array, not paginated.
Required permission: contract:deploy
Request
GET /v2/admin/nodes/{node_id}/setups/{setup_id}/contracts/history
Parameters
| Name | Type | In | Description |
|---|---|---|---|
node_id | string | path | Required. The node's id |
setup_id | string | path | Required. The setup's id |
Headers
| Name | Description |
|---|---|
Authorization | Required. Bearer <access_token> |
Example
curl --request GET \
--url '{{baseUrl}}/v2/admin/nodes/6a4bef2b1e781b11c22e9707/setups/6a552db09c6088e126a4be87/contracts/history' \
--header 'Authorization: Bearer <access_token>'
Response
[
{
"id": "6a7d01e4b2c3d40012f0aa10",
"type": "update",
"status": 2,
"kyc_token_address": "0x1C0777276B13c56d416c41D4186744b9ba0a0D3a",
"contracts": [
{
"type": "fee",
"previous_address": "0x1bD038546274fbE5656711d4E5371EE1bABCd126",
"previous_version": "2.2.0",
"new_version": "2.3.0",
"started_at": "2026-10-30T09:12:01.5Z"
}
],
"created_at": "2026-10-30T09:12:01.5Z",
"updated_at": "2026-10-30T09:12:01.5Z"
},
{
"id": "6a552db29c6088e126a4be88",
"type": "create",
"status": 3,
"kyc_token_address": "0x1C0777276B13c56d416c41D4186744b9ba0a0D3a",
"contracts": [
{
"type": "burn",
"address": "0x222CB82947be52A91a88B1A2E116abf4D9bA6eed",
"previous_version": "1.0.0",
"new_version": "1.0.0",
"tx_hash": "0x5e1c0f7f3a2b4d9c8e7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e",
"started_at": "2026-10-28T22:10:36.1Z",
"completed_at": "2026-10-28T22:16:03.4Z"
}
],
"activated_at": "2026-10-28T23:20:11.8Z",
"created_at": "2026-10-28T22:10:36.1Z",
"updated_at": "2026-10-28T23:20:11.8Z"
}
]
Response Fields
| Field | Type | Description |
|---|---|---|
[].id | string | Deployment record id (the node_contract_id other responses refer to) |
[].type | string | create (initial deployment) or update (upgrade) |
[].status | integer | 1 Started, 2 InProgress, 3 Done, 4 Error |
[].kyc_token_address | string | KYC token the diamond is wired to. Omitted when not recorded |
[].contracts | array | The contracts this record deploys, sorted by type |
[].contracts[].type | string | Contract type: diamond_cut, diamond, diamond_loupe, ownership, fee, burn, rent, otc, secondary, listing, kyc_token, kyc_token_impl |
[].contracts[].address | string | Deployed address. Omitted until deployed |
[].contracts[].previous_address | string | Address being replaced (upgrades). Omitted when none |
[].contracts[].previous_version | string | Version before this deployment. For an initial deployment it equals new_version |
[].contracts[].new_version | string | Version this deployment installs |
[].contracts[].tx_hash | string | Deployment transaction hash. Omitted until sent |
[].contracts[].started_at | string | When this contract's deployment started (ISO 8601) |
[].contracts[].completed_at | string | When it completed. Omitted until then |
[].activated_at | string | When the record's diamond cut was confirmed on chain, making it live. Omitted until then |
[].created_at | string | Record creation time (ISO 8601) |
[].updated_at | string | Last update time (ISO 8601) |
Errors
Every refusal from this endpoint is answered with HTTP 409, whatever its code.
| Status | Code | Description |
|---|---|---|
| 409 | 10016 | node_id or setup_id is not a valid id |
| 409 | 10001 | Node not found, or the setup does not exist or belongs to another node (node domain 2) |
| 409 | 10005 | The node is outside your part of the hierarchy (node domain 2) |
| 409 | 10000 | Unexpected server-side failure |
See Errors for the error format and common codes.