Skip to main content

Upsert Platform Owner Fee

Creates or replaces the platform owner's default fee: the entity 2 row with no node and no setup (see Fees Overview). Only the platform owner node's own API key may call this; every other key gets 403.

The row is saved and returned at once. It is not pushed to setups that are already deployed; setups deployed afterwards resolve it at deploy time. To change what the platform owner charges a node's deployed setups, use Upsert Node Platform Owner Fee or Upsert Setup Platform Owner Fee.

Required permission: fee:upsert

Request​

PUT /v2/admin/fees/platform-owner

Headers​

NameDescription
AuthorizationRequired. Bearer <access_token>
Content-TypeRequired. application/json

Body​

FieldTypeRequiredDescription
valueobjectYesThe 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>.valuestringYesRate in percent, "0" to "100", at most one decimal (for example "2.5"). See Amounts and Percentages
categoriesarray or nullNoPer-asset-category overrides. An override on a parent category is applied to its leaf categories
categories[].idstringYesCategory ID (24-character hex)
categories[].valueobjectYesRates for this category, same shape as value

Scope is taken from the route only: entity, node_id or platform_owner_id in the body are ignored. Any id sent inside a leaf is ignored too.

Example​

curl --request PUT \
--url '{{baseUrl}}/v2/admin/fees/platform-owner' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"value": {
"tokenization": {
"asset_tokenization": { "value": "1" },
"tokenized_asset_sales": { "value": "1" },
"management": { "value": "0.5" }
},
"secondary_market": {
"buy_order": { "value": "0.5" },
"sell_order": { "value": "0.5" },
"otc_sale": { "value": "0.5" }
},
"lending": {
"borrower": { "value": "0" },
"lending": { "value": "0" },
"liquidation": { "value": "0" }
}
},
"categories": null
}'

Response​

{
"id": "680be1f55d63bcee848d38e8",
"entity": 2,
"value": {
"tokenization": {
"asset_tokenization": { "id": 0, "value": "1" },
"tokenized_asset_sales": { "id": 0, "value": "1" },
"management": { "id": 0, "value": "0.5" }
},
"secondary_market": {
"buy_order": { "id": 0, "value": "0.5" },
"sell_order": { "id": 0, "value": "0.5" },
"otc_sale": { "id": 0, "value": "0.5" }
},
"lending": {
"borrower": { "id": 0, "value": "0" },
"lending": { "id": 0, "value": "0" },
"liquidation": { "id": 0, "value": "0" }
}
},
"categories": null
}

Response Fields​

The saved fee row, in the same shape as Get Fee by ID.

FieldTypeDescription
idstringFee row ID
entityinteger2 (platform owner)
valueobjectThe saved rates. Each leaf is { "id": 0, "value": "<percent>" }
categoriesarray or nullThe saved per-category overrides, expanded to leaf categories (id, int_id, path, value)

Errors​

StatusCodeDescription
40010015Validation failed — see details. A malformed rate is reported here too
40010002 (domain 9)value does not contain all nine rates
40010001 (domain 4)A categories[].id does not exist
40310003 (domain 9)The key is not the platform owner node's
50010000Unexpected server error

See Errors for the error format and common codes.