Upsert Setup Platform Owner Fee
Creates or replaces what the platform owner charges one setup (entity 2, scoped to the setup and stamped with the setup's network). Only the platform owner node's own API key may call this; every other key gets 403. The setup must belong to the node. See Fees Overview.
The row is saved and returned at once. When the setup is deployed and this is its first platform-owner override or the rates changed, the new fee is pushed to that setup's contracts asynchronously: one node transaction of type 12 (UpdateDefaultNodeFeeByPlatformOwner) is started on the platform owner's node, signed by the platform owner's wallet on the setup's chain. Poll Get Node Transactions for it. For a setup that is not deployed yet the row is only saved, and the deploy picks it up. A change to categories alone does not start a push.
Required permission: fee:upsert
Request
PUT /v2/admin/fees/nodes/{node_id}/setups/{setup_id}/platform-owner
Parameters
| Name | Type | In | Description |
|---|---|---|---|
node_id | string | path | Required. Node that owns the setup |
setup_id | string | path | Required. Setup ID |
Headers
| Name | Description |
|---|---|
Authorization | Required. Bearer <access_token> |
Content-Type | Required. application/json |
Body
| Field | Type | Required | Description |
|---|---|---|---|
value | object | Yes | The nine rates. All nine leaves are required: tokenization.asset_tokenization, tokenization.tokenized_asset_sales, tokenization.management, secondary_market.buy_order, secondary_market.sell_order, secondary_market.otc_sale, lending.borrower, lending.lending, lending.liquidation |
value.<group>.<leaf>.value | string | Yes | Rate in percent, "0" to "100", at most one decimal (for example "2.5"). See Amounts and Percentages |
categories | array or null | No | Per-asset-category overrides. An override on a parent category is applied to its leaf categories |
categories[].id | string | Yes | Category ID (24-character hex) |
categories[].value | object | Yes | Rates for this category, same shape as value |
Example
curl --request PUT \
--url '{{baseUrl}}/v2/admin/fees/nodes/6a4bef2b1e781b11c22e9707/setups/6a552db09c6088e126a4be87/platform-owner' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"value": {
"tokenization": {
"asset_tokenization": { "value": "2.1" },
"tokenized_asset_sales": { "value": "1.1" },
"management": { "value": "1.2" }
},
"secondary_market": {
"buy_order": { "value": "1.3" },
"sell_order": { "value": "1.4" },
"otc_sale": { "value": "1.5" }
},
"lending": {
"borrower": { "value": "1.6" },
"lending": { "value": "1.7" },
"liquidation": { "value": "1.8" }
}
},
"categories": null
}'
Response
{
"id": "6a553c449c6088e126a4bea7",
"entity": 2,
"node_id": "6a4bef2b1e781b11c22e9707",
"setup_id": "6a552db09c6088e126a4be87",
"network_id": "6a4bf0a21e781b11c22e9712",
"value": {
"tokenization": {
"asset_tokenization": { "id": 0, "value": "2.1" },
"tokenized_asset_sales": { "id": 0, "value": "1.1" },
"management": { "id": 0, "value": "1.2" }
},
"secondary_market": {
"buy_order": { "id": 0, "value": "1.3" },
"sell_order": { "id": 0, "value": "1.4" },
"otc_sale": { "id": 0, "value": "1.5" }
},
"lending": {
"borrower": { "id": 0, "value": "1.6" },
"lending": { "id": 0, "value": "1.7" },
"liquidation": { "id": 0, "value": "1.8" }
}
},
"categories": null
}
Response Fields
The saved fee row, in the same shape as Get Fee by ID.
| Field | Type | Description |
|---|---|---|
id | string | Fee row ID |
entity | integer | 2 (platform owner) |
node_id | string | The node from the path |
setup_id | string | The setup from the path |
network_id | string | The setup's network |
value | object | The saved rates. Each leaf is { "id": 0, "value": "<percent>" } |
categories | array or null | The saved per-category overrides, expanded to leaf categories (id, int_id, path, value) |
Errors
| Status | Code | Description |
|---|---|---|
| 400 | 10015 | Validation failed — see details. A malformed rate is reported here too |
| 400 | 10016 | node_id or setup_id is not a 24-character hex ID |
| 400 | 10001 (domain 2) | Node not found, or the setup does not belong to the node |
| 400 | 10002 (domain 9) | value does not contain all nine rates |
| 400 | 10001 (domain 4) | A categories[].id does not exist |
| 403 | 10003 (domain 9) | The key is not the platform owner node's |
| 500 | 10000 | Unexpected server error |
See Errors for the error format and common codes.