{ "opencollection": "1.0.0", "info": { "name": "Certifyos Roster Record API", "version": "1.0.0" }, "items": [ { "info": { "name": "RosterRecord", "type": "folder" }, "items": [ { "info": { "name": "Get all roster records", "type": "http" }, "http": { "method": "GET", "url": "http://localhost:9000/roster-records", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "endAtId", "value": "", "type": "query" }, { "name": "filter", "value": "", "type": "query" }, { "name": "page", "value": "", "type": "query" }, { "name": "size", "value": "", "type": "query" }, { "name": "startAfterId", "value": "", "type": "query" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Returns a list of all roster records for the tenant" }, { "info": { "name": "Find many roster records", "type": "http" }, "http": { "method": "GET", "url": "http://localhost:9000/roster-records/find-many", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "filter", "value": "", "type": "query" }, { "name": "page", "value": "", "type": "query" }, { "name": "size", "value": "", "type": "query" }, { "name": "startAfterId", "value": "", "type": "query" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Returns a list of roster records for the tenant" }, { "info": { "name": "Get paginated roster rows from Spanner", "type": "http" }, "http": { "method": "GET", "url": "http://localhost:9000/roster-records/:rosterId", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "rosterId", "value": "", "type": "path", "description": "Roster ID to fetch rows for" }, { "name": "cursor", "value": "", "type": "query", "description": "Cursor (row_id) from previous page's nextCursor" }, { "name": "size", "value": "", "type": "query", "description": "Number of rows per page (default 50, max 1000)" }, { "name": "statuses", "value": "", "type": "query", "description": "Comma-separated status filter (e.g. FAILED,COMPLETED)" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Returns a cursor-based paginated list of roster rows. Use the nextCursor value from the response as the cursor parameter for the next page." }, { "info": { "name": "Bulk save edits to failed roster rows", "type": "http" }, "http": { "method": "PATCH", "url": "http://localhost:9000/roster-records/:rosterId/draft", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "rosterId", "value": "", "type": "path", "description": "Roster ID" } ], "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Updates Spanner roster_rows in place for rows in VALIDATION_FAILED status. Each entry's rowData is merged into the stored row (partial patch of top-level keys); the same partial payload is appended to draftRows history. Marks the row as isDrafted and keeps status as VALIDATION_FAILED; recordKey must be the existing row_id." }, { "info": { "name": "Get offset-paginated roster rows from Spanner", "type": "http" }, "http": { "method": "GET", "url": "http://localhost:9000/roster-records/:rosterId/paged", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "rosterId", "value": "", "type": "path", "description": "Roster ID to fetch rows for" }, { "name": "page", "value": "", "type": "query", "description": "Zero-based page number (default 0)" }, { "name": "size", "value": "", "type": "query", "description": "Number of rows per page (default 50, max 1000)" }, { "name": "statuses", "value": "", "type": "query", "description": "Comma-separated status filter (e.g. FAILED,COMPLETED)" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Returns an offset-based paginated list of roster rows with totalCount and totalPages." }, { "info": { "name": "Request revalidation of draft roster rows (dispatch or pre-processing queue)", "type": "http" }, "http": { "method": "POST", "url": "http://localhost:9000/roster-records/:rosterId/revalidate", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "rosterId", "value": "", "type": "path", "description": "Roster ID" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "If the user is an internal provider data admin, sets roster status to REVALIDATE and dispatches validation asynchronously (Pub/Sub or Cloud Run Job) so FAILED rows are re-run. Otherwise sets status to PRE_PROCESSING without validation dispatch. Disabled when roster.rows.draft-revalidation.enabled=false." }, { "info": { "name": "Trigger AI-powered Smart Fix for validation errors", "type": "http" }, "http": { "method": "POST", "url": "http://localhost:9000/roster-records/:rosterId/smartfix", "headers": [ { "name": "tenant-id", "value": "" } ], "params": [ { "name": "rosterId", "value": "", "type": "path", "description": "Roster ID" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Fetches all VALIDATION_FAILED rows (max 2000), extracts eligible validation errors, and calls the Smart Fix service to suggest corrections. Returns suggestions for the frontend to review and apply. Disabled when roster.smart-fix.enabled=false." } ] } ], "bundled": true }