Manual intake
Operator tools for taking data in by hand: dropping a bank file where the platform picks it up, admitting a bank's quoted prices for an asset, reading the SIX prices there are for an asset, and writing an asset's dividends. Every route needs the ops:manual-intake scope. The writes take ?dry_run=true and an Idempotency-Key header; the price admission and the dividends are logged in the change history, a dropped file is not. The SIX read stores nothing, so it takes neither. To upload a bank file and follow it as an import, use POST /v1/imports.
Ids are v1 ids: asset_id is an asset's id and custodian_id a bank's id. An id that is not a UUID is a 400; an asset or bank you cannot see is a 404. A JSON body with an unknown field is a 400.
Drop a bank file
Lands one bank file (multipart/form-data) in your tenant's intake folder, where the platform picks it up. 201 when the file landed, 200 with "duplicate": true when the same bytes were already there. replaced is true when a different file with the same name, bank and day was replaced. A deployment without an intake folder configured answers 503 service_unavailable. The request body may be at most 100 MiB (413 otherwise), as on POST /v1/imports.
Form fields
custodian_idstringRequired: the bank.
file_typestringRequired:
time_data,balance,holding,transaction,merge,contract,contract_holding,private_asset_holding,custodian_asset_identifierorbond_analytics.file_datedateOptional,
YYYY-MM-DD; today when left out.filefileRequired: one file part with a filename.
{
"duplicate": false,
"replaced": false,
"custodian_id": "5b0c3e2a-1f4d-4a6b-9c8e-7d6f5e4a3b21",
"file_type": "holding",
"file_date": "2026-10-07",
"byte_count": 18234
}
Admit a bank's prices
Lets the bank's quoted prices for the asset count as its custodian prices, for the prices the bank sent in the window: the bank joins the asset's custodian price list. Leave custodian_id out to admit every bank with a quote in the window. 200 with what was admitted and what was turned down. No price is copied, so price_id is always null. v1 has no monthly lock on prices, so rejected is always empty (rejected_count: 0).
Body parameters
asset_idstringRequired.
from_date, to_datedateRequired,
YYYY-MM-DD;to_datenot beforefrom_date.custodian_idstringOptional: one bank.
{
"asset_id": "0b9a8c7d-6e5f-4a3b-2c1d-0e9f8a7b6c5d",
"from_date": "2026-08-01",
"to_date": "2026-08-31",
"custodian_id": "5b0c3e2a-1f4d-4a6b-9c8e-7d6f5e4a3b21",
"result": {
"inserted_count": 1,
"inserted": [
{ "price_id": null, "date": "2026-08-03", "value": "101.5", "currency_code": "DKK", "source": "custodian" }
],
"rejected_count": 0,
"rejected": []
}
}
Read SIX prices
Answers the SIX prices there are for the asset in the window; the platform already reads them where they land, so nothing is stored. A row on a date where the asset already has a manual price in that currency is in rejected with date, value, currency_code, reason already_exists and a detail text; v1 has no monthly lock on prices, so no row is rejected for its date. An asset with no SIX series answers an empty result.
Body parameters
asset_idstringRequired.
from_datedateRequired,
YYYY-MM-DD.to_datedateOptional,
YYYY-MM-DD; today when left out. Not beforefrom_date.
{
"asset_id": "0b9a8c7d-6e5f-4a3b-2c1d-0e9f8a7b6c5d",
"from_date": "2026-09-01",
"to_date": "2026-09-03",
"result": {
"available_count": 1,
"available": [
{ "date": "2026-09-02", "value": "98.12", "currency_code": "CHF", "source": "six" }
],
"rejected_count": 0,
"rejected": []
}
}
Write dividends
Writes the asset's dividend per share on each date; a date that already has a dividend is updated. Only shares and mutual funds carry dividends (400 otherwise). 201 when a dividend was created, 200 when only existing ones were changed or none changed. A date given twice with the same amount counts once; with two amounts it is a 400.
Body parameters
asset_idstringRequired.
dividendsarrayRequired, not empty:
{date, per_share_amount}withdateasYYYY-MM-DDandper_share_amountas a decimal string.
{
"asset_id": "0b9a8c7d-6e5f-4a3b-2c1d-0e9f8a7b6c5d",
"written_count": 1,
"dividends": [
{ "date": "2026-02-18", "per_share_amount": "0.77" }
]
}