Перейти к основному содержимому

API агрегата клиента

Management API предоставляет customer-first профиль и сводку лицензий для сценариев Vendor Console. Tenant определяется только authenticated session или service account. Не передавайте Tenant ID в path, query или body.

Чтение профиля и лицензий

GET /api/v1/customers/organizations/{organizationId}/aggregate?licenseOffset=0&licenseLimit=50
Permission: customers.read

licenseOffset по умолчанию равен 0. licenseLimit по умолчанию равен 50 и принимает 1..200. Лицензии отсортированы от новых к старым со стабильным tie-break по License ID. Archived, revoked, deprecated и migration-required строки остаются видимыми.

Для каждой лицензии состояние Product разрешается явно:

  • Resolved содержит display name из каталога того же Tenant;
  • MissingIdentity означает отсутствие Product ID в строке BC-LIC;
  • CatalogNotFound означает, что Product ID отсутствует в каталоге того же Tenant.

Ключ никогда не раскрывается. maskedKey присутствует только при keyMaskStatus = Available; отсутствующие или неполные legacy metadata дают null и явный статус.

Замена изменяемого профиля

PUT /api/v1/customers/organizations/{organizationId}/aggregate
Permission: customers.manage
Content-Type: application/json

{
"expectedRevision": 3,
"displayName": "Example Ltd",
"notes": "Заметки оператора",
"primaryContact": {
"contactId": null,
"displayName": "Jane Doe",
"email": "jane@example.test",
"phone": "+1 555 0100"
}
}

Успешный ответ содержит только committed profile. Отличающийся stale revision возвращает customer_profile_revision_conflict; точный lost-result replay сходится к committed state. После commit сервер не выполняет чтение License или Product.

Ошибки и безопасность

Стабильные ошибки: customer_aggregate_invalid_request, customer_aggregate_not_found, customer_primary_contact_not_found, customer_profile_revision_conflict, customer_profile_not_editable и customer_aggregate_dependency_unavailable. Ресурс другого Tenant неотличим от отсутствующего. Plaintext keys, hashes, provider references и внутренние License/Product codes в контракт не входят.