{ "opencollection": "1.0.0", "info": { "name": "MAIA Ah enrichment API", "version": "0.1.0" }, "items": [ { "info": { "name": "enrichment", "type": "folder" }, "items": [ { "info": { "name": "Get Enrichment Limits", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/limits" }, "docs": "Per-batch limits for column-wide bulk enrichment.\n\nReturns the canonical server values backing the column-header Enrich\nsubmenu's clamps and confirm gates. The FE should fetch these once and\ncache; never carry its own copy of these constants." }, { "info": { "name": "Get All Enrichments", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/all", "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get all custom enrichments.\nRequires authentication. Allows read access to owned or example projects.\n\nArgs:\n request: The request object containing project_id (pre-validated)\n enrichment_service: Service for handling enrichment operations\n\nReturns:\n List of all enrichments" }, { "info": { "name": "Create Enrichment", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/create", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Create a new enrichment with default values. Requires layer ownership.\n\nArgs:\n request: The request object containing layer_id (pre-validated)\n enrichment_service: Service for handling enrichment operations\n\nReturns:\n Dictionary containing enrichment data" }, { "info": { "name": "Get Enrichment Status Batch", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/enrich_async/status_batch", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get the status of multiple enrichment workflows." }, { "info": { "name": "Enrich Row Async", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/enrich_async/:enrichment_id", "params": [ { "name": "token", "value": "", "type": "query", "description": "Firebase ID token for MVT authentication" } ], "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Enrich rows in the dataset asynchronously.\n\nSupports two selection modes (exactly one per request, enforced by\n``EnrichRowRequest`` validator):\n\n- ``feature_ids`` — explicit ids; legacy path, unchanged.\n- ``selection`` — filter spec + fingerprint + expected count. The\n server validates the fingerprint (400 on mismatch), recomputes the\n live count (409 on drift), and resolves the matching ids\n server-side before enqueueing — no wire-payload of large id\n arrays." }, { "info": { "name": "Update Enrichment", "type": "http" }, "http": { "method": "PUT", "url": "{{baseUrl}}/api/v1/enrichment/:enrichment_id", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Update an enrichment. Requires ownership of the project containing the enrichment.\n\nThe mortgage entitlement check fetches the user profile lazily — only a\nretarget onto the mortgage tool pays the profile DB round-trip.\n\nArgs:\n enrichment_id: The ID of the enrichment to update (pre-validated)\n request: The request object containing updated fields\n enrichment_service: Service for handling enrichment operations\n\nReturns:\n Dictionary containing enrichment data" }, { "info": { "name": "Delete Enrichment", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/delete", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Delete an enrichment. Requires ownership of the project containing the enrichment.\n\nArgs:\n request: The request object containing enrichment_id and project_id (pre-validated)\n enrichment_service: Service for handling enrichment operations\n\nReturns:\n Dict with success status and message" }, { "info": { "name": "Get Enrichment Status", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/workflow/status/:workflow_id", "params": [ { "name": "workflow_id", "value": "", "type": "path" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get the status of a single enrichment workflow." }, { "info": { "name": "Get Enrichment Agent Task Status", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/agent_workflow/status/:workflow_id", "params": [ { "name": "workflow_id", "value": "", "type": "path" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get the status of an enrichment agent (creation/update) workflow." }, { "info": { "name": "Get All User Enrichments", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/all_user", "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get all enrichments.\nRequires authentication." }, { "info": { "name": "Add Enrichment To Layer", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/add_to_layer", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Add an enrichment to a layer. Requires ownership of the project containing the layer.\n\nArgs:\n request: The request object containing enrichment_id and layer_id (pre-validated)\n enrichment_service: Service for handling enrichment operations\n\nReturns:\n message with success status" }, { "info": { "name": "Delete Enrichment From Library", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/delete_from_library", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Delete an enrichment.\nRequires authentication.\n\nArgs:\n request: The request object containing enrichment_id\n enrichment_service: Service for handling enrichment operations\n\nReturns:\n Dict with success status and message" }, { "info": { "name": "Get Enrichment Credits", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/credits", "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get the number of enrichments credits available for this user." }, { "info": { "name": "Get In Flight Tasks", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/in-flight/:project_id", "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get all in-flight enrichment workflows for a project.\n\nQueries DBOS workflow status filtered to non-terminal row-enrichment\nworkflows and aggregates per-field for the polling UI." }, { "info": { "name": "Get All In Flight Tasks", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/enrichment/in-flight", "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Get all in-flight enrichment workflows across the user's projects." }, { "info": { "name": "Cancel Enrichment Workflows Bulk", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/cancel/bulk", "body": { "type": "json", "data": "{}" }, "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Bulk-cancel in-flight DBOS enrichment workflows.\n\nBest-effort + idempotent, matching the single-cancel contract. Returns\n204 unconditionally — workflows the caller doesn't own, workflows\nwithout a reservation row, and workflows already in a terminal state\nare silently skipped. The FE's column-level cancel sends every\nworkflow_id it tracked and relies on polling to converge each one to\nREVOKED." }, { "info": { "name": "Cancel Enrichment Workflow", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/enrichment/cancel/:workflow_id", "params": [ { "name": "workflow_id", "value": "", "type": "path" } ], "auth": { "type": "bearer", "token": "{{bearerToken}}" } }, "docs": "Cancel an in-flight DBOS enrichment workflow + refund any unsettled credits [MAIA-1468].\n\nReturns 204 on success (idempotent on terminal states). 404 if the\nworkflow has no reservation row (Celery-routed enrichment or unknown ID)\nor if the user doesn't own the workspace it belongs to. Cross-workspace\naccess is 404 not 403 to avoid leaking workflow existence.\n\nThe ``_current_user`` Depends enforces authn; workspace authz is resolved\ninside the service via the request-scoped ``UserService`` (alrea" } ] } ], "bundled": true }