Выдать и отозвать доступ
Открыть доступ к адресу или папке ролью, изменить или отозвать грант и проверить, кто и откуда имеет доступ.
Доступ к адресам выдаётся точечно — на адрес — или целиком на папку, ролью viewer или contributor. Субъектом может быть пользователь или группа, а грант на папку покрывает и будущие адреса. Здесь — как выдать, изменить и отозвать доступ и как проверить, у кого он есть. Про модель — на странице Адреса, папки и доступ.
Шаг 1. Выдайте доступ к адресу
POST /api/v1/vaults/{code}/addresses/{id}/shares выдаёт грант на конкретный адрес. Субъект полиморфен (subjectType: user|group), права задаются ролью.
curl -X POST "[BASE_URL]/api/v1/vaults/acme-otc/addresses/ADDRESS_ID/shares" \
-H "Authorization: Bearer $V3_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "subjectType": "user", "subjectId": "USER_ID", "role": "viewer" }'
await fetch("[BASE_URL]/api/v1/vaults/acme-otc/addresses/ADDRESS_ID/shares", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.V3_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ subjectType: "user", subjectId: "USER_ID", role: "viewer" }),
});
requests.post(
"[BASE_URL]/api/v1/vaults/acme-otc/addresses/ADDRESS_ID/shares",
headers={"Authorization": f"Bearer {os.environ['V3_TOKEN']}"},
json={"subjectType": "user", "subjectId": "USER_ID", "role": "viewer"},
)
Грант на адрес идемпотентен: повторная выдача тому же субъекту обновляет права и реактивирует отозванный грант — отдельного «изменить» не нужно. Пакетная форма — через subjects[]. Право canCreateAddress в роль не входит и выдаётся отдельно. Точную схему — в Справочнике API.
Шаг 2. Выдайте доступ к папке
Грант на папку даёт права на все её адреса, включая добавленные позже:
curl -X POST "[BASE_URL]/api/v1/vaults/acme-otc/address-folders/FOLDER_ID/grants" \
-H "Authorization: Bearer $V3_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "subjectType": "group", "subjectId": "USER_GROUP_ID", "role": "contributor" }'
await fetch("[BASE_URL]/api/v1/vaults/acme-otc/address-folders/FOLDER_ID/grants", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.V3_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ subjectType: "group", subjectId: "USER_GROUP_ID", role: "contributor" }),
});
requests.post(
"[BASE_URL]/api/v1/vaults/acme-otc/address-folders/FOLDER_ID/grants",
headers={"Authorization": f"Bearer {os.environ['V3_TOKEN']}"},
json={"subjectType": "group", "subjectId": "USER_GROUP_ID", "role": "contributor"},
)
Шаг 3. Измените или отозовите грант
Для папки есть явные эндпоинты на изменение и отзыв гранта:
PATCH /api/v1/vaults/{code}/address-folders/{id}/grants/{grantId}— изменить роль (viewer|contributor); ответ содержитrole.DELETE /api/v1/vaults/{code}/address-folders/{id}/grants/{grantId}— отозвать грант.
curl -X PATCH "[BASE_URL]/api/v1/vaults/acme-otc/address-folders/FOLDER_ID/grants/GRANT_ID" \
-H "Authorization: Bearer $V3_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "role": "viewer" }'
await fetch("[BASE_URL]/api/v1/vaults/acme-otc/address-folders/FOLDER_ID/grants/GRANT_ID", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.V3_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ role: "viewer" }),
});
requests.patch(
"[BASE_URL]/api/v1/vaults/acme-otc/address-folders/FOLDER_ID/grants/GRANT_ID",
headers={"Authorization": f"Bearer {os.environ['V3_TOKEN']}"},
json={"role": "viewer"},
)
Для адресного гранта отдельное «изменить» не нужно — повторный POST /shares обновляет права; отзыв делается DELETE на шер (точный путь — в Справочнике API).
Отзыв гранта на группу снимает доступ у всех её участников; личный грант отзывается точечно.
Шаг 4. Проверьте, кто и откуда имеет доступ
curl "[BASE_URL]/api/v1/vaults/acme-otc/addresses/ADDRESS_ID/participants" \
-H "Authorization: Bearer $V3_TOKEN"
const res = await fetch(
"[BASE_URL]/api/v1/vaults/acme-otc/addresses/ADDRESS_ID/participants",
{ headers: { Authorization: `Bearer ${process.env.V3_TOKEN}` } },
);
console.log(await res.json());
requests.get(
"[BASE_URL]/api/v1/vaults/acme-otc/addresses/ADDRESS_ID/participants",
headers={"Authorization": f"Bearer {os.environ['V3_TOKEN']}"},
).json()
participants показывает людей (владелец отдан отдельно, группы раскрыты), а поле via — источник доступа (direct / user_group / папка) и тем самым способ его убрать. Смежные списки: GET /vaults/{code}/shared-with-me (только прямые гранты), GET /vaults/{code}/shared-by-me (что вы открыли) и GET /vaults/{code}/addresses?access=shared (всё доступное вам).