V2 Discrepancy Report (Docs vs Actual V2 Contract)
Scope
This report compares:
docs/apideclared endpoint contracts (method + path + described payloads)- Actual V2 OpenAPI + V2 controller/DTO implementation in
services/amm/agent-web-api/src/api/v2/**
It highlights discrepancies that affect integration reliability and migration planning.
Executive Summary
docs/apideclared endpoints: 49- V2 OpenAPI endpoints: 34
- Endpoints in docs but not in V2 OpenAPI: 13
- Endpoints in V2 OpenAPI but not in docs: 3
The highest-risk mismatch is in the Apps domain (approval response payload), plus major missing/overstated coverage in Analytics Apps.
Findings
1) Apps approval contract mismatch (response shape)
What docs say
POST /clients/{client_id}/apps/approvalsPOST /clients/{client_id}/apps/approvals/remove- Response shape with
succeeded[]andfailed[]
Evidence:
docs/api/apps/approval.md:3docs/api/apps/approval-remove.md:3docs/api/apps/approval.md:35
What V2 actually exposes
POST /clients/:client_id/apps/approvalsPOST /clients/:client_id/apps/approvals/remove- Response shape:
{ requested_count, updated_count }
Evidence:
services/amm/agent-web-api/src/api/v2/apps/apps.controller.ts:277services/amm/agent-web-api/src/api/v2/apps/apps.controller.ts:306services/amm/agent-web-api/src/api/v2/apps/apps-dtos.ts:205
Impact
Consumers built from docs will parse the wrong response payload fields.
2) Apps DTO model mismatch (docs describe a different object than V2 returns)
What docs describe
Appincludes embeddedcatalog_appAppincludeslicense_countPATCH /apps/{app_id}supportslicense_count
Evidence:
docs/api/apps/index.md:83docs/api/apps/index.md:120docs/api/apps/update.md:24
What V2 implementation defines
AppDetailDtouses legacy fields likeapp_name,vendor,categories,web_urlsUpdateAppBodyDtoonly hasis_favoriteandis_approved- No
license_countin v2 apps DTOs
Evidence:
services/amm/agent-web-api/src/api/v2/apps/apps-dtos.ts:139services/amm/agent-web-api/src/api/v2/apps/apps-dtos.ts:80
Impact
The documented Apps contract is not the currently shippable V2 contract.
3) App approval audit/history accepted in docs, still missing from V2 contract
Observed gap
V2 docs now include a proposed app history contract, but the V2 implementation/OpenAPI still does not expose it. Frontend workflows still depend on the V1 history endpoints.
Evidence (V1 exists):
services/amm/agent-web-api/src/api/v1/apps/apps.controller.ts:199services/amm/agent-web-api/src/api/v1/apps/apps.controller.ts:243services/amm/agent-web-api/src/api/v1/apps/apps.controller.ts:283
Evidence (frontend still using V1 history):
apps/amm-web/src/features/apps/hooks/useAppApprovalMutations.ts:108apps/amm-web/src/features/apps/hooks/useAppHistoryComment.ts:42apps/amm-web/src/features/apps/queries/app-queries.ts:208
Evidence (proposed V2 docs now exist):
docs/api/app-history-design-review.mddocs/api/apps/history.mddocs/api/apps/history-notes.md
Evidence (V2 OpenAPI/controller still has no history):
services/amm/agent-web-api/src/api/v2/apps/apps.controller.ts
Impact
Migration to pure V2 still cannot fully support approval audit/comment workflows until the proposed history endpoints are implemented and added to the generated contract.
4) Analytics Apps coverage mismatch (documented endpoints not implemented in V2)
Endpoints documented but missing from V2 OpenAPI
/clients/{client_id}/analytics/apps/ai/users/clients/{client_id}/analytics/apps/ai/users/summary/clients/{client_id}/analytics/apps/ai/recent/clients/{client_id}/analytics/apps/ai/recent/summary/clients/{client_id}/analytics/apps/ai/departments/clients/{client_id}/analytics/apps/ai/departments/summary/clients/{client_id}/analytics/apps/utilization/timeseries/clients/{client_id}/analytics/apps/utilization/categories/clients/{client_id}/analytics/apps/utilization/users/clients/{client_id}/analytics/apps/utilization/departments
Evidence (docs claim/describe):
docs/api/analytics/index.md:44docs/api/analytics/index.md:55docs/api/app-usage-dashboard-spec.md:28docs/api/app-usage-dashboard-spec.md:39
Evidence (actual V2 controller routes):
services/amm/agent-web-api/src/api/v2/analytics-apps/app-activity/app-activity.controller.ts:61services/amm/agent-web-api/src/api/v2/analytics-apps/app-utilization/app-utilization.controller.ts:80services/amm/agent-web-api/src/api/v2/analytics-apps/app-utilization/app-utilization.controller.ts:195services/amm/agent-web-api/src/api/v2/analytics-apps/app-utilization/app-utilization.controller.ts:261
Impact
Docs currently overstate available V2 analytics functionality.
5) AI analytics docs must consistently treat the full AI family as deprecated/removal-only
Current direction
All six AI analytics endpoints are deprecated and being removed. The replacement surface is the generic analytics utilization family with AI category filters.
Evidence:
docs/api/analytics/apps-ai-overview.md:8docs/api/app-usage-dashboard-spec.md:507docs/api/analytics/index.md:51
Impact
Any overview or migration note that implies partial AI endpoint support will send consumers toward routes that should be retired instead of migrated away from.
6) Internal contradiction: approved/new vs proposed/future in analytics index
Contradiction
The same analytics overview marks some utilization subroutes as approved/new and later lists them as proposed/future.
Evidence:
docs/api/analytics/index.md:44docs/api/analytics/index.md:176
Impact
Team cannot infer implementation status from docs with confidence.
7) Catalog app path parameter naming mismatch
What docs use
/catalog-apps/{catalog_app_id}/catalog-apps/{catalog_app_id}/desktop-aliases/catalog-apps/{catalog_app_id}/url-patterns
Evidence:
docs/api/catalog-apps/details.md:3docs/api/catalog-apps/desktop-aliases.md:3docs/api/catalog-apps/url-patterns.md:3
What V2 OpenAPI uses
/catalog-apps/{id}/catalog-apps/{id}/desktop-aliases/catalog-apps/{id}/url-patterns
Evidence:
apps/amm-web/src/api/generated/v2-dtos.ts:13
Impact
Path parameter naming divergence can break generated clients and copy-pasted examples.
8) “Generated validators” reference needs regeneration discipline
Docs claim
nestjs-class-validators.md is the generated implementation reference for all request/response shapes.
Evidence:
docs/api/index.md:38
Current status
The app approval route naming is now aligned in validators and docs:
POST /apps/approvalsPOST /apps/approvals/remove
Evidence:
docs/api/nestjs-class-validators.md:693services/amm/agent-web-api/src/api/v2/apps/apps.controller.ts:277
Impact
Without consistent regeneration, this reference can drift again and lose source-of-truth value.
Endpoint-Level Diff (V2 Normalized)
In docs, missing from V2 OpenAPI
/catalog-apps/{catalog_app_id}/catalog-apps/{catalog_app_id}/desktop-aliases/catalog-apps/{catalog_app_id}/url-patterns/clients/{client_id}/analytics/apps/ai/departments/clients/{client_id}/analytics/apps/ai/departments/summary/clients/{client_id}/analytics/apps/ai/recent/clients/{client_id}/analytics/apps/ai/recent/summary/clients/{client_id}/analytics/apps/ai/users/clients/{client_id}/analytics/apps/ai/users/summary/clients/{client_id}/analytics/apps/utilization/categories/clients/{client_id}/analytics/apps/utilization/departments/clients/{client_id}/analytics/apps/utilization/timeseries/clients/{client_id}/analytics/apps/utilization/users
In V2 OpenAPI, missing from docs
/catalog-apps/{id}/catalog-apps/{id}/desktop-aliases/catalog-apps/{id}/url-patterns
Risk Ranking
High
- Apps approval response-shape mismatch
- Apps DTO mismatch (
catalog_app/license_countvs actual v2 shape) - Missing app history/audit trail implementation for v2 migration
- Analytics endpoint availability mismatch
Medium
- AI endpoint removal messaging must stay consistent
- Approved/new vs proposed/future contradictions
- Catalog path parameter naming mismatch
Low
- Potential future staleness of generated validators reference
Recommended Remediation Order
- Lock canonical V2 truth source (OpenAPI generated from code) and align Apps docs first.
- Implement the proposed app history endpoints and add contract coverage.
- Align analytics docs to actual implemented endpoints, or implement missing routes and regenerate OpenAPI.
- Resolve catalog
{catalog_app_id}vs{id}naming consistency. - Keep
nestjs-class-validators.mdgeneration/output in sync with contract changes.
Notes
- This report focuses on V2 discrepancy only (as requested), not full V1 parity gap analysis.
- Evidence pointers are file+line references from current repository state.