API contracts

Every API call, feature by feature: what today's app calls, and the App Service v2 operation that replaces it. Each call opens to its use case, request and response bodies, and errors.

Contract filessynthetic example data
Today
112 live endpoints across 14 services, traced from the app’s code and DTOs
App Service v2
39 operations, OpenAPI 2.0.0-draft: download app-service-v2.yaml

Onboarding & setup

Language selection

App Service v2: operationUse
GET /configTyped config bundle (ETag)

Login

Today: callUse
PUT /ctld/api/device/deviceid/v1
Bridge session API (ctld)
Register the phone with Bridge and get its device id before login.
POST /ctld/api/session/v1
Bridge session API (ctld)
Sign the user in and get a session token.
GET /rtld/api/dataset/v1/execute?name=PlusOneTenantUserData
Reporting datasets (rtld)
Load the signed-in user, tenant, roles and assigned work nodes; decides cadre vs Unit In-charge/FMT flow.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneUrviGeoDataForVOs/execute
commons-report-service
Load the work-node (geography) hierarchy for the work-node picker.
App Service v2: operationUse
POST /auth/loginLog in with login, tenant and password
POST /auth/refreshRotate the refresh token

App startup and role detection

Today: callUse
POST /ctld/api/session/v1
Bridge session API (ctld)
Sign the user in and get a session token.
GET /rtld/api/dataset/v1/execute?name=PlusOneTenantUserData
Reporting datasets (rtld)
Load the signed-in user, tenant, roles and assigned work nodes; decides cadre vs Unit In-charge/FMT flow.
SDK Firebase Remote Config
Firebase
Read the show_force_sync flag (show_analytics_tab and current_season_value are fetched but unused).
App Service v2: operationUse
POST /auth/loginLog in with login, tenant and password
POST /auth/refreshRotate the refresh token
GET /session/bootstrapSession bootstrap after login and on cold start
GET /configTyped config bundle (ETag)
PUT /devices/{deviceId}Register or update this device

Village, Habitation and VO selection

Today: callUse
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneUrviGeoDataForVOs/execute
commons-report-service
Load the work-node (geography) hierarchy for the work-node picker.
App Service v2: operationUse
GET /session/bootstrapSession bootstrap after login and on cold start
GET /geo/childrenChildren of a geography node

Device registration and remote actions

Today: callUse
GET /gateway/urvi-app-service/api/v1/user-device-sessions/user
urvi-app-service
Check whether this device is the one bound to the user.
POST /gateway/urvi-app-service/api/v1/user-device-session
urvi-app-service
Bind this device to the user.
PATCH /gateway/urvi-app-service/api/v1/user-device-sessions/users/{userId}?remarks=
urvi-app-service
Expire all device sessions of the user.
GET /gateway/urvi-app-service/api/v1/remote-app-actions/actor
urvi-app-service
Fetch pending remote commands (LOGOUT, CLEAR_APP_DATA) for this user.
PATCH /gateway/urvi-app-service/api/v1/remote-app-actions/{id}/execution
urvi-app-service
Report a remote command as done, optionally attaching a zip of the app databases.
App Service v2: operationUse
POST /auth/logoutLog out and revoke tokens
GET /session/bootstrapSession bootstrap after login and on cold start
GET /configTyped config bundle (ETag)
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload
PUT /devices/{deviceId}Register or update this device
PUT /devices/{deviceId}/push-tokenStore or rotate the FCM push token
POST /devices/{deviceId}/binding/takeover"Login here": move the binding to this device
GET /devices/{deviceId}/actionsPending remote actions for this device
POST /devices/{deviceId}/actions/{actionId}/completeReport a remote action as executed

Data download (Cadre)

Today: callUse
GET /gateway/portfolio-service/api/v1/ref-data/class/CLASS.PORTFOLIO_APP_CONFIG?page&size=100&direction=ASC
portfolio-service
Load app config: feature flags, current season, retry delay, pagination and chunk sizes.
GET /ie-registration/assets/json/inventory/crops-list.json
Platform static files
Load the static crop list.
GET /gateway/portfolio-service/api/v1/practices/active?direction=ASC&page=1&size=100
portfolio-service
Load the active farming practices master.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWiseCount/execute
commons-report-service
Count farmers in the selected geography.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWise/execute
commons-report-service
Download the flattened farmer list, page by page (resumable).
GET /ctld/api/ierolemap/v1?criteria=isActive=true AND iE.id in (...)
Common TLD (ctld)
Download farmer role maps for a chunk of farmers.
GET /gateway/asset-service/api/v1/assets/ownerEntities?ownerEntityIdList=&ownerEntityType=OWNER_ENTITY.IE
asset-service
Download land and cattle assets for a chunk of farmers (or the cadre, with OWNER_ENTITY.BRIDGE_USER).
GET /gateway/asset-service/api/v1/asset/attachment/bulk?assetIds=
asset-service
Download asset attachments (KML geofences, images) in bulk.
GET /gateway/portfolio-service/api/v1/portfolios/ownerEntities?ownerEntityIdList=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download crop plans (portfolios with line items) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/portfolios/line-items/portfoliosForLineItemIds?portfolioLineItemIds=&returnAllMimeType=true
portfolio-service
Download crop line-item attachments (photos, geofences) in bulk.
GET /gateway/portfolio-service/api/v1/farming-model/ownerEntities?ownerEntityIds=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download farming models (ATM/DKG) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/farming-model/attachment/bulk?farmingModelIds=
portfolio-service
Download farming-model attachments in bulk.
GET /ctld/api/inventory/inventoryproduct/v1?inventoryId=0&criteria=isActive=true AND inventory.supervisor.actorId in (...)
Common TLD (ctld)
Download inventory products for farmers (or the cadre).
App Service v2: operationUse
POST /auth/logoutLog out and revoke tokens
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /assessmentsAssessment definitions and past submissions

Data download (Unit / FMT)

Today: callUse
GET /gateway/portfolio-service/api/v1/ref-data/class/CLASS.PORTFOLIO_APP_CONFIG?page&size=100&direction=ASC
portfolio-service
Load app config: feature flags, current season, retry delay, pagination and chunk sizes.
GET /ie-registration/assets/json/inventory/crops-list.json
Platform static files
Load the static crop list.
GET /gateway/portfolio-service/api/v1/practices/active?direction=ASC&page=1&size=100
portfolio-service
Load the active farming practices master.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWiseCountUnit/execute
commons-report-service
Count farmers across VOs for a Unit In-charge / FMT.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWiseUnit/execute
commons-report-service
Download the farmer list for a Unit In-charge / FMT.
GET /gateway/asset-service/api/v1/assets/ownerEntities?ownerEntityIdList=&ownerEntityType=OWNER_ENTITY.IE
asset-service
Download land and cattle assets for a chunk of farmers (or the cadre, with OWNER_ENTITY.BRIDGE_USER).
GET /gateway/portfolio-service/api/v1/portfolios/ownerEntities?ownerEntityIdList=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download crop plans (portfolios with line items) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/portfolios/line-items/portfoliosForLineItemIds?portfolioLineItemIds=&returnAllMimeType=true
portfolio-service
Download crop line-item attachments (photos, geofences) in bulk.
GET /gateway/portfolio-service/api/v1/portfolios/attachment/bulk?portfolioAttachmentIds=
portfolio-service
Download portfolio attachments by id (Unit In-charge setup).
GET /gateway/portfolio-service/api/v1/compact-block/filter?cbmOwningEntityIds=
portfolio-service
Download compact blocks that include the given farmers.
GET /gateway/portfolio-service/api/v1/compact-block?direction=desc&page&size&voIds=
portfolio-service
Download compact blocks for the selected VOs, paged.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /compact-blocksCompact blocks for VOs

Home & navigation

Home and bottom bar

Today: callUse
GET /gateway/portfolio-service/api/v1/ref-data/class/CLASS.PORTFOLIO_APP_CONFIG?page&size=100&direction=ASC
portfolio-service
Load app config: feature flags, current season, retry delay, pagination and chunk sizes.
GET /rtld/api/dataset/v1/execute?name=AAP_REJECT_REASON
Reporting datasets (rtld)
Load the reasons a reviewer can pick when rejecting an annual action plan.
GET /rtld/api/dataset/v1/execute?name=UrviYouTube
Reporting datasets (rtld)
Load help video links.
GET /ctld/api/product/v1 (generated ProductAPI.getProduct)
Common TLD (ctld)
Load the tenant product (crop/input) master.
GET /ie-registration/assets/json/inventory/crops-list.json
Platform static files
Load the static crop list.
GET /gateway/portfolio-service/api/v1/practices/active?direction=ASC&page=1&size=100
portfolio-service
Load the active farming practices master.
GET S3 igx-static-data/asset/ref_data.json
S3 static data
Load asset (land/cattle) reference data.
GET S3 igx-static-data/asset/classification.json
S3 static data
Load asset classification data.
GET /gateway/urvi-app-service/api/v1/user-device-sessions/user
urvi-app-service
Check whether this device is the one bound to the user.
App Service v2: operationUse
GET /session/bootstrapSession bootstrap after login and on cold start
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /endorsementsEndorsement statuses (VO, SHG, farmer)
GET /notificationsMIS and system notifications since a time
POST /telemetryScreen events and sync-health counters (no PII)

Side menu

Today: callUse
PATCH /gateway/urvi-app-service/api/v1/user-device-sessions/users/{userId}?remarks=
urvi-app-service
Expire all device sessions of the user.
GET /gateway/asset-service/api/v1/assets/ownerEntities?ownerEntityIdList=&ownerEntityType=OWNER_ENTITY.IE
asset-service
Download land and cattle assets for a chunk of farmers (or the cadre, with OWNER_ENTITY.BRIDGE_USER).
App Service v2: operationUse
POST /auth/logoutLog out and revoke tokens
GET /session/bootstrapSession bootstrap after login and on cold start

Notifications

Today: callUse
GET /gateway/asset-service/api/v1/endorsementComment/postedby?page&size&postedBy
asset-service
Poll for new comments to show as in-app notifications.
SDK FCM topic subscribe: urvi_endorsement_status, urvi_endorsement_comment, NOTIFICATION
Firebase
Receive endorsement and broadcast push messages.
App Service v2: operationUse
GET /farmers/{farmerId}One hydrated farmer (get-or-create)
GET /notificationsMIS and system notifications since a time
PUT /devices/{deviceId}/push-tokenStore or rotate the FCM push token

Farmer profile

Farmer hub (option tiles)

Today: callUse
GET /gateway/asset-service/api/v1/assets/ownerEntities?ownerEntityIdList=&ownerEntityType=OWNER_ENTITY.IE
asset-service
Download land and cattle assets for a chunk of farmers (or the cadre, with OWNER_ENTITY.BRIDGE_USER).
GET /gateway/asset-service/api/v1/asset/attachment/bulk?assetIds=
asset-service
Download asset attachments (KML geofences, images) in bulk.
GET /gateway/portfolio-service/api/v1/portfolios/ownerEntities?ownerEntityIdList=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download crop plans (portfolios with line items) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/portfolios/line-items/portfoliosForLineItemIds?portfolioLineItemIds=&returnAllMimeType=true
portfolio-service
Download crop line-item attachments (photos, geofences) in bulk.
GET /gateway/portfolio-service/api/v1/farming-model/ownerEntities?ownerEntityIds=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download farming models (ATM/DKG) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/farming-model/attachment/bulk?farmingModelIds=
portfolio-service
Download farming-model attachments in bulk.
POST /ptld/api/customworknode/v1/worknodeietag/urvi
Program TLD (ptld)
Create the full server-side farmer (IE) from the flat record; also used as get-or-create when a farmer is opened.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /farmers/{farmerId}One hydrated farmer (get-or-create)
GET /farmers/{farmerId}/abstractFarmer abstract for a season

Farmer list & search

Today: callUse
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWise/execute
commons-report-service
Download the flattened farmer list, page by page (resumable).
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWiseUnit/execute
commons-report-service
Download the farmer list for a Unit In-charge / FMT.
POST /ptld/api/customworknode/v1/worknodeietag/urvi
Program TLD (ptld)
Create the full server-side farmer (IE) from the flat record; also used as get-or-create when a farmer is opened.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /endorsementsEndorsement statuses (VO, SHG, farmer)

Add/Edit farmer (IE profile)

Today: callUse
GET /ctld/api/ierolemap/v1?criteria=isActive=true AND iE.id in (...)
Common TLD (ctld)
Download farmer role maps for a chunk of farmers.
POST /ptld/api/customworknode/v1/worknodeietag/urvi
Program TLD (ptld)
Create the full server-side farmer (IE) from the flat record; also used as get-or-create when a farmer is opened.
POST /ptld/api/customworknode/v1/worknodeietag/urvi/ie
Program TLD (ptld)
Create a new farmer.
PATCH /ptld/api/customworknode/v1/worknodeietag/urvi/ie
Program TLD (ptld)
Update a farmer profile or farming category / gap start date.
PUT /ctld/api/ie/v1/iconpic
Common TLD (ctld)
Upload a farmer profile photo.
POST /ctld/api/ierolemap/v1
Common TLD (ctld)
Assign a role to a farmer.
DELETE /ctld/api/ierolemap/v1?iERoleMapId=
Common TLD (ctld)
Remove a farmer role.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/{farmerId}One hydrated farmer (get-or-create)
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Farmer category (Farmer/C4/C5)

Today: callUse
GET /gateway/commons-report-service/api/v1/datasets/name/PLUS_ONE_FARMING_CATEGORY_LAST_UPDATE_DATE/execute
commons-report-service
Get each farmer's farming-category last update (gap start) date.
PATCH /ptld/api/customworknode/v1/worknodeietag/urvi/ie
Program TLD (ptld)
Update a farmer profile or farming category / gap start date.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
POST /sync/batchApply an ordered batch of offline mutations

Assets & land

Land assets

Today: callUse
GET S3 igx-static-data/asset/ref_data.json
S3 static data
Load asset (land/cattle) reference data.
GET S3 igx-static-data/asset/classification.json
S3 static data
Load asset classification data.
GET /gateway/asset-service/api/v1/assets/ownerEntities?ownerEntityIdList=&ownerEntityType=OWNER_ENTITY.IE
asset-service
Download land and cattle assets for a chunk of farmers (or the cadre, with OWNER_ENTITY.BRIDGE_USER).
GET /gateway/asset-service/api/v1/asset/attachment/bulk?assetIds=
asset-service
Download asset attachments (KML geofences, images) in bulk.
GET /gateway/commons-report-service/api/v1/datasets/name/DisabledAssetCodeForCadre/execute
commons-report-service
Get land codes that were disabled on the server so the app can mark them disabled.
GET /gateway/asset-service/api/v1/assets/{assetId}
asset-service
Refetch one asset from the server to repair a sync error.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetOwnedLandByIEID/execute
commons-report-service
Get a farmer's owned land, used to validate land entries.
GET /rtld/api/dataset/v1/execute?name=PlusOneGetATMNFUsedAcreageByIEID
Reporting datasets (rtld)
Get acreage already used by ATM/natural farming, used to validate entries.
POST /gateway/asset-service/api/v1/assets/
asset-service
Create a land or cattle asset.
PATCH /gateway/asset-service/api/v1/assets/
asset-service
Update land or cattle assets.
DELETE /gateway/asset-service/api/v1/assets/{id}?reason=
asset-service
Disable (soft-delete) a land asset.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /farmers/{farmerId}/landsA farmer's land parcels
GET /farmers/{farmerId}/metricsOwned, leased, used and available acres
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
GET /files/{fileId}File metadata and signed download URL
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Leased land

Today: callUse
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetOwnedLandByIEID/execute
commons-report-service
Get a farmer's owned land, used to validate land entries.
GET /rtld/api/dataset/v1/execute?name=PlusOneGetATMNFUsedAcreageByIEID
Reporting datasets (rtld)
Get acreage already used by ATM/natural farming, used to validate entries.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllDistricts/execute
commons-report-service
List districts. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllMandalsForDistrict/execute
commons-report-service
List mandals in a district. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllVillagesForMandal/execute
commons-report-service
List villages in a mandal. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllVOForVillage/execute
commons-report-service
List village organisations (VOs) in a village. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllHabitationForVOAliasId/execute
commons-report-service
List habitations under a VO. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneHabitationSHGList/execute
commons-report-service
List self-help groups (SHGs) in a habitation. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerHusbandFatherSHGWise/execute
commons-report-service
List farmers (with husband/father names) in an SHG.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerHusbandFatherVOWiseNonSHG/execute
commons-report-service
List farmers in a VO who are not in any SHG.
POST /gateway/asset-service/api/v1/assets/
asset-service
Create a land or cattle asset.
PATCH /gateway/asset-service/api/v1/assets/
asset-service
Update land or cattle assets.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /geo/childrenChildren of a geography node
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/searchSearch farmers in a geography (online)
GET /farmers/{farmerId}/landsA farmer's land parcels
GET /farmers/{farmerId}/metricsOwned, leased, used and available acres
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Geofencing

Today: callUse
GET /gateway/asset-service/api/v1/asset/attachment/bulk?assetIds=
asset-service
Download asset attachments (KML geofences, images) in bulk.
GET /gateway/portfolio-service/api/v1/portfolios/line-items/portfoliosForLineItemIds?portfolioLineItemIds=&returnAllMimeType=true
portfolio-service
Download crop line-item attachments (photos, geofences) in bulk.
GET /gateway/portfolio-service/api/v1/portfolios/attachment/bulk?portfolioAttachmentIds=
portfolio-service
Download portfolio attachments by id (Unit In-charge setup).
GET /gateway/portfolio-service/api/v1/farming-model/attachment/bulk?farmingModelIds=
portfolio-service
Download farming-model attachments in bulk.
POST /gateway/asset-service/api/v1/asset/attachment
asset-service
Upload a land KML geofence.
POST /gateway/portfolio-service/api/v1/portfolios/line-items/attachment/item/custom
portfolio-service
Upload a crop photo, or (with saveFileContent=true, updatePortfolioLineItemWithGeoFenceAttachment=true) a crop KML geofence.
POST /gateway/portfolio-service/api/v1/farming-model/attachment/custom
portfolio-service
Upload an ATM photo or ATM KML geofence.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/{farmerId}/landsA farmer's land parcels
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
GET /files/{fileId}File metadata and signed download URL
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Livestock

Today: callUse
GET S3 igx-static-data/asset/ref_data.json
S3 static data
Load asset (land/cattle) reference data.
GET S3 igx-static-data/asset/classification.json
S3 static data
Load asset classification data.
GET /gateway/asset-service/api/v1/assets/ownerEntities?ownerEntityIdList=&ownerEntityType=OWNER_ENTITY.IE
asset-service
Download land and cattle assets for a chunk of farmers (or the cadre, with OWNER_ENTITY.BRIDGE_USER).
POST /gateway/asset-service/api/v1/assets/
asset-service
Create a land or cattle asset.
PATCH /gateway/asset-service/api/v1/assets/
asset-service
Update land or cattle assets.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
POST /sync/batchApply an ordered batch of offline mutations

Crop stock (inventory)

Today: callUse
GET /ctld/api/product/v1 (generated ProductAPI.getProduct)
Common TLD (ctld)
Load the tenant product (crop/input) master.
GET /ctld/api/inventory/inventoryproduct/v1?inventoryId=0&criteria=isActive=true AND inventory.supervisor.actorId in (...)
Common TLD (ctld)
Download inventory products for farmers (or the cadre).
POST /ctld/api/inventory/inventoryproduct/custominventoryproduct/v1
Common TLD (ctld)
Add inventory products for a farmer.
PATCH /ctld/api/inventory/inventoryproduct/v1?inventoryId=
Common TLD (ctld)
Update inventory products.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
POST /sync/batchApply an ordered batch of offline mutations

Farming models & harvest

365 DKG kitchen garden

Today: callUse
GET /gateway/portfolio-service/api/v1/farming-model/ownerEntities?ownerEntityIds=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download farming models (ATM/DKG) for a chunk of farmers.
POST /gateway/portfolio-service/api/v1/farming-model
portfolio-service
Create a farming model (ATM / DKG).
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/{farmerId}/farming-modelsA farmer's ATM plots and DKG answers
POST /sync/batchApply an ordered batch of offline mutations

ATM model (Anytime Money plot)

Today: callUse
GET /gateway/portfolio-service/api/v1/farming-model/ownerEntities?ownerEntityIds=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download farming models (ATM/DKG) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/farming-model/attachment/bulk?farmingModelIds=
portfolio-service
Download farming-model attachments in bulk.
GET /gateway/asset-service/api/v1/assets/{assetId}
asset-service
Refetch one asset from the server to repair a sync error.
GET /gateway/portfolio-service/api/v1/farming-model/ownerEntities/actual?ownerEntityId&ownerEntityType&date&appCreatedAt
portfolio-service
Refresh a farmer's current farming model (ATM).
GET /rtld/api/dataset/v1/execute?name=PlusOneGetATMNFUsedAcreageByIEID
Reporting datasets (rtld)
Get acreage already used by ATM/natural farming, used to validate entries.
POST /gateway/portfolio-service/api/v1/farming-model
portfolio-service
Create a farming model (ATM / DKG).
POST /gateway/portfolio-service/api/v1/farming-model/attachment/custom
portfolio-service
Upload an ATM photo or ATM KML geofence.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /farmers/{farmerId}/metricsOwned, leased, used and available acres
GET /farmers/{farmerId}/farming-modelsA farmer's ATM plots and DKG answers
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
GET /files/{fileId}File metadata and signed download URL
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

ATM harvest

App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/{farmerId}/farming-modelsA farmer's ATM plots and DKG answers
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Crop Actual harvest

Today: callUse
POST /gateway/portfolio-service/api/v1/portfolios/harvest/{id}/ENTITY_TYPE.IE
portfolio-service
Record a crop harvest. Sent through the queue or online.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/{farmerId}/crop-blocksA farmer's Crop Actual blocks for a season / month
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Planning & tracking

Analytics dashboard

Today: callUse
GET /rtld/api/dataset/v1/execute?name=PlusOneCadreAnalytics
Reporting datasets (rtld)
Cadre dashboard figures.
GET /rtld/api/dataset/v1/execute?name=PlusOneAnalyticsIEIDCategoryList2
Reporting datasets (rtld)
Farmer ids per analytics category (drill-down).
GET /rtld/api/dataset/v1/execute?name=PlusOneCadreAnalytics9Principles
Reporting datasets (rtld)
Nine-principles adoption figures for the cadre.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneCadreAnalyticsVOWiseSum/execute
commons-report-service
VO-wise totals for a Unit In-charge.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneCadreAnalyticsSHGWiseSum/execute
commons-report-service
SHG-wise totals for a Unit In-charge.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneCadreAnalytics9PrinciplesVOWise/execute
commons-report-service
VO-wise nine-principles figures.
GET /rtld/api/dataset/v1/execute?name=PlusOneCadreAnalyticsVOWise
Reporting datasets (rtld)
VO-wise analytics rows.
GET /rtld/api/dataset/v1/execute?name=PlusOneUnitInchargeInfo
Reporting datasets (rtld)
Load Unit In-charge details for the analytics dashboard filter.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /analytics/dashboardMIS dashboard for cadre or unit

Crop Plan

Today: callUse
GET /ctld/api/product/v1 (generated ProductAPI.getProduct)
Common TLD (ctld)
Load the tenant product (crop/input) master.
GET /ie-registration/assets/json/inventory/crops-list.json
Platform static files
Load the static crop list.
GET /gateway/portfolio-service/api/v1/portfolios/ownerEntities?ownerEntityIdList=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download crop plans (portfolios with line items) for a chunk of farmers.
GET /gateway/asset-service/api/v1/assets/{assetId}
asset-service
Refetch one asset from the server to repair a sync error.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetOwnedLandByIEID/execute
commons-report-service
Get a farmer's owned land, used to validate land entries.
POST /gateway/portfolio-service/api/v1/portfolios/line-items/v2?logCropActivity=true&actorType&actorId
portfolio-service
Create a crop plan entry (portfolio with one line item).
PATCH /gateway/portfolio-service/api/v1/portfolios/
portfolio-service
Update crop plans.
DELETE /gateway/portfolio-service/api/v1/portfolios/portfolioLineItem/?logCropActivity&portfolioId&portfolioLineItemId&portfolioLineItemUUID
portfolio-service
Delete a crop line item.

Crop Actual (portfolio)

Today: callUse
GET /ctld/api/product/v1 (generated ProductAPI.getProduct)
Common TLD (ctld)
Load the tenant product (crop/input) master.
GET /ie-registration/assets/json/inventory/crops-list.json
Platform static files
Load the static crop list.
GET /gateway/portfolio-service/api/v1/practices/active?direction=ASC&page=1&size=100
portfolio-service
Load the active farming practices master.
GET /gateway/portfolio-service/api/v1/portfolios/ownerEntities?ownerEntityIdList=&ownerEntityType=ENTITY_TYPE.IE
portfolio-service
Download crop plans (portfolios with line items) for a chunk of farmers.
GET /gateway/portfolio-service/api/v1/portfolios/line-items/portfoliosForLineItemIds?portfolioLineItemIds=&returnAllMimeType=true
portfolio-service
Download crop line-item attachments (photos, geofences) in bulk.
GET /gateway/portfolio-service/api/v1/portfolios/portfolioLineItems?portfolioLineItems=
portfolio-service
Refetch crop line items from the server (overwrite local after a compact-block edit lock, or pick a harvest target).
GET /gateway/portfolio-service/api/v1/portfolios/line-items/ownerEntities/actual/v2?ownerEntityId&ownerEntityType&date
portfolio-service
Refresh a farmer's current crop plan.
POST /gateway/portfolio-service/api/v1/portfolios/line-items/v2?logCropActivity=true&actorType&actorId
portfolio-service
Create a crop plan entry (portfolio with one line item).
PATCH /gateway/portfolio-service/api/v1/portfolios/
portfolio-service
Update crop plans.
PUT /gateway/portfolio-service/api/v1/portfolios/{pid}/portfolioLineItem/v2/crop-activity
portfolio-service
Edit a crop line item and log the crop activity change.
DELETE /gateway/portfolio-service/api/v1/portfolios/portfolioLineItem/?logCropActivity&portfolioId&portfolioLineItemId&portfolioLineItemUUID
portfolio-service
Delete a crop line item.
POST /gateway/portfolio-service/api/v1/portfolios/line-items/attachment/item/custom
portfolio-service
Upload a crop photo, or (with saveFileContent=true, updatePortfolioLineItemWithGeoFenceAttachment=true) a crop KML geofence.
SDK Firebase Storage userId/farmerId/pliId/pliId.ext
Firebase
Fallback upload for crop photos that keep failing.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /farmers/{farmerId}/metricsOwned, leased, used and available acres
GET /farmers/{farmerId}/crop-blocksA farmer's Crop Actual blocks for a season / month
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
GET /files/{fileId}File metadata and signed download URL
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

PMDS and A Grade crop details

Today: callUse
POST /gateway/portfolio-service/api/v1/portfolios/line-items/v2?logCropActivity=true&actorType&actorId
portfolio-service
Create a crop plan entry (portfolio with one line item).
PUT /gateway/portfolio-service/api/v1/portfolios/{pid}/portfolioLineItem/v2/crop-activity
portfolio-service
Edit a crop line item and log the crop activity change.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/{farmerId}/crop-blocksA farmer's Crop Actual blocks for a season / month
POST /sync/batchApply an ordered batch of offline mutations

Certification survey

Today: callUse
GET /gateway/assessment-service/api/v1/assessmentInstanceAssesses
assessment-service
List assessments for an actor (activity history, certification).
POST /gateway/assessment-service/api/v1/aiadefaultresponses/attachment/uuid
assessment-service
Upload an assessment (AIA) attachment.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /assessmentsAssessment definitions and past submissions
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Compact Block

Today: callUse
GET /gateway/portfolio-service/api/v1/compact-block/filter?cbmOwningEntityIds=
portfolio-service
Download compact blocks that include the given farmers.
GET /gateway/portfolio-service/api/v1/compact-block?direction=desc&page&size&voIds=
portfolio-service
Download compact blocks for the selected VOs, paged.
GET /gateway/portfolio-service/api/v1/portfolios/portfolioLineItems?portfolioLineItems=
portfolio-service
Refetch crop line items from the server (overwrite local after a compact-block edit lock, or pick a harvest target).
POST /gateway/portfolio-service/api/v1/compact-block
portfolio-service
Create a compact block (group of adjacent lands).
PUT /gateway/portfolio-service/api/v1/compact-block
portfolio-service
Update compact blocks.
DELETE /gateway/portfolio-service/api/v1/compact-block?compactBlockId&reason
portfolio-service
Delete a compact block.
DELETE /gateway/portfolio-service/api/v1/compact-block/{cbId}/compact-block-member?reason&compactBlockMemberId
portfolio-service
Remove a member from a compact block.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /farmers/{farmerId}/crop-blocksA farmer's Crop Actual blocks for a season / month
GET /compact-blocksCompact blocks for VOs
GET /compact-blocks/eligible-tilesTiles eligible for a compact block
POST /sync/batchApply an ordered batch of offline mutations

Activity Tracker

Today: callUse
PUT /gateway/portfolio-service/api/v1/portfolios/{pid}/portfolioLineItem/v2/crop-activity
portfolio-service
Edit a crop line item and log the crop activity change.
GET /gateway/assessment-service/api/v1/assessmentInstanceAssesses
assessment-service
List assessments for an actor (activity history, certification).
POST /gateway/assessment-service/api/v1/aiadefaultresponses/attachment/uuid
assessment-service
Upload an assessment (AIA) attachment.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /assessmentsAssessment definitions and past submissions
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

KAP / Annual Action Plan 2025-26

Today: callUse
GET /rtld/api/dataset/v1/execute?name=AAP_REJECT_REASON
Reporting datasets (rtld)
Load the reasons a reviewer can pick when rejecting an annual action plan.
GET /gateway/commons-report-service/api/v1/datasets/name/AAP2025_26/execute
commons-report-service
Download 2025-26 annual action plans for a chunk of farmers.
GET /gateway/asset-service/api/v1/annual-action-plan-extended?ownerEntityIds=&ownerEntityType=ENTITY_TYPE.IE
asset-service
Get 2025-26 annual action plans (extended) for farmers.
GET /rtld/api/dataset/v1/execute?name=PlusOneAAP2526IEIDStatus
Reporting datasets (rtld)
Get the review status of farmers' 2025-26 action plans.
POST /gateway/asset-service/api/v1/annual-action-plan-extended
asset-service
Create a 2025-26 annual action plan.
PUT /gateway/asset-service/api/v1/annual-action-plan-extended
asset-service
Update a 2025-26 annual action plan.
PATCH /gateway/asset-service/api/v1/annual-action-plans
asset-service
Update a 2024-25 (legacy season) annual action plan.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/snapshotCursor-paged hydrated farmer snapshot
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
GET /farmers/{farmerId}/metricsOwned, leased, used and available acres
GET /farmers/{farmerId}/planKAP / annual action plan for a season
POST /sync/batchApply an ordered batch of offline mutations

VO & endorsements

Farmer endorsement details

Today: callUse
GET /gateway/asset-service/api/v1/endorsement/me?page&size
asset-service
Download endorsements (reviews) assigned to or made by the user.
GET /gateway/asset-service/api/v1/endorsementComment?entityID&entityType&page&size
asset-service
Load comments on an endorsed entity.
POST /gateway/asset-service/api/v1/endorsement/bulk/save-all
asset-service
Save one or more endorsements (approve/reject). Sent online or through the offline queue.
GET /rtld/api/dataset/v1/execute?name=PlusOneMasterFarmerIEID2425
Reporting datasets (rtld)
2024-25 farmer abstract by IE id (first try).
GET /rtld/api/dataset/v1/execute?name=PlusOneMasterFarmerIEUUID2425
Reporting datasets (rtld)
2024-25 farmer abstract by UUID (fallback).
POST /gateway/asset-service/api/v1/endorsementComment
asset-service
Post a comment on an endorsement.
App Service v2: operationUse
GET /geo/childrenChildren of a geography node
GET /farmers/{farmerId}One hydrated farmer (get-or-create)
GET /farmers/searchSearch farmers in a geography (online)
GET /farmers/{farmerId}/abstractFarmer abstract for a season
GET /farmers/{farmerId}/planKAP / annual action plan for a season
GET /endorsementsEndorsement statuses (VO, SHG, farmer)
GET /endorsements/{entityType}/{entityId}/commentsComment thread of an endorsed entity
GET /endorsements/{entityType}/{entityId}/eligibilityWhy an endorsement action is allowed or blocked
POST /sync/batchApply an ordered batch of offline mutations

VO / SHG / Farmer endorsement

Today: callUse
GET /gateway/commons-report-service/api/v1/datasets/name/PLUS_ONE_FARMING_CATEGORY_LAST_UPDATE_DATE/execute
commons-report-service
Get each farmer's farming-category last update (gap start) date.
GET /rtld/api/dataset/v1/execute?name=PlusOneAAP2526IEIDStatus
Reporting datasets (rtld)
Get the review status of farmers' 2025-26 action plans.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWiseNoPagination/execute
commons-report-service
List farmers in a geography without paging (endorsement screens).
GET /gateway/asset-service/api/v1/endorsement/me?page&size
asset-service
Download endorsements (reviews) assigned to or made by the user.
GET /rtld/api/dataset/v1/execute?name=PlusOneEndorsementVOHierarchy
Reporting datasets (rtld)
Load endorsements across the VO hierarchy for the VO tab.
GET /gateway/asset-service/api/v1/endorsementComment?entityID&entityType&page&size
asset-service
Load comments on an endorsed entity.
GET /gateway/asset-service/api/v1/endorsements/attachment?endorsementId&attachmentFormat=ATTACHMENT_URL
asset-service
Get the download URL of an endorsement attachment, then download it.
POST /gateway/asset-service/api/v1/endorsement/bulk/save-all
asset-service
Save one or more endorsements (approve/reject). Sent online or through the offline queue.
GET /raw-data-service/report/ryss-abstract/{voId}/vo?adminUser=true
raw-data-service
Download the VO abstract as an Excel file.
GET /raw-data-service/report/ryss-abstract/{id}/shg
raw-data-service
Download the SHG abstract as an Excel file.
POST /gateway/asset-service/api/v1/endorsements/attachment?endorsementID&endorsementUUID
asset-service
Upload the abstract file attached to an endorsement.
POST /gateway/asset-service/api/v1/endorsementComment
asset-service
Post a comment on an endorsement.
SDK FCM topic subscribe: urvi_endorsement_status, urvi_endorsement_comment, NOTIFICATION
Firebase
Receive endorsement and broadcast push messages.
App Service v2: operationUse
GET /configTyped config bundle (ETag)
GET /farmers/searchSearch farmers in a geography (online)
GET /farmers/{farmerId}/planKAP / annual action plan for a season
GET /endorsementsEndorsement statuses (VO, SHG, farmer)
GET /endorsements/{entityType}/{entityId}/commentsComment thread of an endorsed entity
GET /endorsements/{entityType}/{entityId}/eligibilityWhy an endorsement action is allowed or blocked
GET /vo/{voId}/abstractVO abstract download link
GET /shg/{shgId}/abstractSHG abstract download link
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
GET /files/{fileId}File metadata and signed download URL
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

VO geographic filter (FCCC)

Today: callUse
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllDistricts/execute
commons-report-service
List districts. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllMandalsForDistrict/execute
commons-report-service
List mandals in a district. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllVillagesForMandal/execute
commons-report-service
List villages in a mandal. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllVOForVillage/execute
commons-report-service
List village organisations (VOs) in a village. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneGetAllHabitationForVOAliasId/execute
commons-report-service
List habitations under a VO. Same call duplicated in three client classes.
GET /gateway/commons-report-service/api/v1/datasets/name/PlusOneWorkNodeFarmerListGeoWiseNoPagination/execute
commons-report-service
List farmers in a geography without paging (endorsement screens).
App Service v2: operationUse
GET /geo/childrenChildren of a geography node
GET /farmers/searchSearch farmers in a geography (online)

VO / SHG surveys

App Service v2: operationUse
GET /assessmentsAssessment definitions and past submissions
POST /sync/batchApply an ordered batch of offline mutations
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload

Support & admin

Settings

Today: callUse
PATCH /gateway/urvi-app-service/api/v1/user-device-sessions/users/{userId}?remarks=
urvi-app-service
Expire all device sessions of the user.
POST /sync-service/api/v1/data/so
sync-service
Upload a snapshot of the whole offline queue for support.
SDK Firebase Remote Config
Firebase
Read the show_force_sync flag (show_analytics_tab and current_season_value are fetched but unused).
App Service v2: operationUse
POST /auth/logoutLog out and revoke tokens
GET /configTyped config bundle (ETag)
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
POST /sync/batchApply an ordered batch of offline mutations
GET /sync/batches/{batchId}Status of an asynchronously processed batch
POST /telemetryScreen events and sync-health counters (no PII)

Pending sync

App Service v2: operationUse
POST /auth/refreshRotate the refresh token
GET /farmers/changesDelta sync: upserts and tombstones since a cursor
POST /sync/batchApply an ordered batch of offline mutations
GET /sync/batches/{batchId}Status of an asynchronously processed batch
POST /filesCreate a file upload (resumable or single-shot)
PATCH /files/{fileId}Append a chunk to a resumable upload
HEAD /files/{fileId}Current offset of a resumable upload
POST /telemetryScreen events and sync-health counters (no PII)

Sync error log

Today: callUse
PATCH /gateway/urvi-app-service/api/v1/remote-app-actions/{id}/execution
urvi-app-service
Report a remote command as done, optionally attaching a zip of the app databases.
GET /gateway/asset-service/api/v1/assets/{assetId}
asset-service
Refetch one asset from the server to repair a sync error.
GET /gateway/portfolio-service/api/v1/portfolios/portfolioLineItems?portfolioLineItems=
portfolio-service
Refetch crop line items from the server (overwrite local after a compact-block edit lock, or pick a harvest target).
POST /sync-service/api/v1/data/so
sync-service
Upload a snapshot of the whole offline queue for support.
POST /sync-service/api/v1/data/clickstream
sync-service
Upload screen/action analytics.
SDK Firestore SYNC_LOG / PLI_IMAGE / URVI_ATTACHMENT_ISSUE
Firebase
Write sync-failure copies (every 10th attempt), crop-photo fallback metadata and attachment issues.
SDK Firebase Storage userId/farmerId/pliId/pliId.ext
Firebase
Fallback upload for crop photos that keep failing.
SDK Firestore / Storage DB zip dump
Firebase
Upload a zip of the app databases to Firebase Storage (urvi_clear_app_data/) before wiping data.
App Service v2: operationUse
POST /sync/batchApply an ordered batch of offline mutations
POST /telemetryScreen events and sync-health counters (no PII)

Program configuration and instructions

Today: callUse
GET /gateway/portfolio-service/api/v1/ref-data/class/CLASS.PORTFOLIO_APP_CONFIG?page&size=100&direction=ASC
portfolio-service
Load app config: feature flags, current season, retry delay, pagination and chunk sizes.
GET /rtld/api/dataset/v1/execute?name=PlusOnePortfolioAppConfig
Reporting datasets (rtld)
Load program configuration for the program info screen.
GET /rtld/api/dataset/v1/execute?name=PlusOneInstructions
Reporting datasets (rtld)
Load program instructions.
App Service v2: operationUse
GET /configTyped config bundle (ETag)

Login history

Today: callUse
GET /rtld/api/dataset/v1/execute?name=PlusOneCadreLoginHistory
Reporting datasets (rtld)
Cadre login history.
App Service v2: operationUse
GET /me/login-historyThe signed-in user's login history