NetworkAccountMergeResult network.account-merge-result@1
Generated at from
openvibe-contracts v0.76.0 and
openvibe-sdk v0.20.1.
- Version
- 1.0.0
- Owner
- network
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Decision
- ADR-029
- Schema
https://openvibe.network/contracts/network/account-merge-result.v1.json
network.account-merge-result@1 (OpenVibe.Network; roadmap WS-B task 5, ADR-029): the answer of a merge, POST /api/v1/account/merge (the person, signed in to the survivor, with a fresh sign-in proof of the other account) or POST /api/admin/account-merges (staff.identity.merge, with a reason). What Network moved in its one transaction, as counts; everything else follows network.subject.merged. A retried merge of the same pair answers the first merge (replayed: true) and moves nothing again.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
merge_id | string | yes |
| |
from | string | yes |
| |
into | string | yes |
| |
merged_at | string | yes |
| |
split_until | string | yes |
| |
moved | object | yes |
| |
moved.providers | integer | yes | Linked sign-in providers now on the survivor. |
|
moved.sessions | integer | yes | Sessions and devices moved; both sets stay valid until they expire. |
|
moved.oauth_grants | integer | yes |
| |
moved.projects | integer | yes | Developer projects, still owned, now by the survivor. |
|
moved.coins | integer | yes | OpenCoins added to the survivor (one ledger entry per side, reason account_merge). |
|
moved.modules | integer | yes | User-module records changed on the survivor (its own fields win). |
|
replayed | boolean | yes |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: merged
{
"merge_id": "mrg_01JAB2C3D4E5F6G7H8J9K0MNPS",
"from": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
"into": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"merged_at": "2026-09-27T21:00:00.000Z",
"split_until": "2026-10-27T21:00:00.000Z",
"moved": {
"providers": 2,
"sessions": 3,
"oauth_grants": 1,
"projects": 0,
"coins": 150,
"modules": 2
},
"replayed": false
}Rejected: negative-coins
{
"merge_id": "mrg_01JAB2C3D4E5F6G7H8J9K0MNPS",
"from": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
"into": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"merged_at": "2026-09-27T21:00:00.000Z",
"split_until": "2026-10-27T21:00:00.000Z",
"moved": {
"providers": 2,
"sessions": 3,
"oauth_grants": 1,
"projects": 0,
"coins": -5,
"modules": 2
},
"replayed": false
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('network.account-merge-result@1', value); // { valid, errors: [{ path, message }] }