Maia-analytics enrichment API

The enrichment API from Maia-analytics — 17 operation(s) for enrichment.

Operations 17

GET /api/v1/enrichment/limits Get Enrichment Limits #
GET /api/v1/enrichment/all Get All Enrichments #
POST /api/v1/enrichment/create Create Enrichment #
POST /api/v1/enrichment/enrich_async/status_batch Get Enrichment Status Batch #
POST /api/v1/enrichment/enrich_async/{enrichment_id} Enrich Row Async #
PUT /api/v1/enrichment/{enrichment_id} Update Enrichment #
POST /api/v1/enrichment/delete Delete Enrichment #
GET /api/v1/enrichment/workflow/status/{workflow_id} Get Enrichment Status #
GET /api/v1/enrichment/agent_workflow/status/{workflow_id} Get Enrichment Agent Task Status #
GET /api/v1/enrichment/all_user Get All User Enrichments #
POST /api/v1/enrichment/add_to_layer Add Enrichment To Layer #
POST /api/v1/enrichment/delete_from_library Delete Enrichment From Library #
GET /api/v1/enrichment/credits Get Enrichment Credits #
GET /api/v1/enrichment/in-flight/{project_id} Get In Flight Tasks #
GET /api/v1/enrichment/in-flight Get All In Flight Tasks #
POST /api/v1/enrichment/cancel/bulk Cancel Enrichment Workflows Bulk #
POST /api/v1/enrichment/cancel/{workflow_id} Cancel Enrichment Workflow #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/maia-analytics-enrichment-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

maia-analytics-enrichment-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: MAIA Ah Enrichment API
  description: API for MAIA application (migrated from Firebase)
  version: 0.1.0
servers:
- url: https://api.maia-analytics.com
  description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: enrichment
paths:
  /api/v1/enrichment/limits:
    get:
      tags:
      - enrichment
      summary: Get Enrichment Limits
      description: 'Per-batch limits for column-wide bulk enrichment.


        Returns the canonical server values backing the column-header Enrich

        submenu''s clamps and confirm gates. The FE should fetch these once and

        cache; never carry its own copy of these constants.'
      operationId: get_enrichment_limits_api_v1_enrichment_limits_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentLimitsResponse'
  /api/v1/enrichment/all:
    get:
      tags:
      - enrichment
      summary: Get All Enrichments
      description: "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"
      operationId: get_all_enrichments_api_v1_enrichment_all_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentListResponse'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/create:
    post:
      tags:
      - enrichment
      summary: Create Enrichment
      description: "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"
      operationId: create_enrichment_api_v1_enrichment_create_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEnrichmentRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/enrich_async/status_batch:
    post:
      tags:
      - enrichment
      summary: Get Enrichment Status Batch
      description: Get the status of multiple enrichment workflows.
      operationId: get_enrichment_status_batch_api_v1_enrichment_enrich_async_status_batch_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrichmentStatusBatchRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentStatusListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/enrich_async/{enrichment_id}:
    post:
      tags:
      - enrichment
      summary: Enrich Row Async
      description: "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."
      operationId: enrich_row_async_api_v1_enrichment_enrich_async__enrichment_id__post
      security:
      - FirebaseAuthMiddleware: []
      parameters:
      - name: token
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Firebase ID token for MVT authentication
          title: Token
        description: Firebase ID token for MVT authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrichRowRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentBatchStartResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/enrichment/{enrichment_id}:
    put:
      tags:
      - enrichment
      summary: Update Enrichment
      description: "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"
      operationId: update_enrichment_api_v1_enrichment__enrichment_id__put
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEnrichmentRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/delete:
    post:
      tags:
      - enrichment
      summary: Delete Enrichment
      description: "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"
      operationId: delete_enrichment_api_v1_enrichment_delete_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrichmentDelete'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentDeleteResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/workflow/status/{workflow_id}:
    get:
      tags:
      - enrichment
      summary: Get Enrichment Status
      description: Get the status of a single enrichment workflow.
      operationId: get_enrichment_status_api_v1_enrichment_workflow_status__workflow_id__get
      security:
      - FirebaseAuthMiddleware: []
      parameters:
      - name: workflow_id
        in: path
        required: true
        schema:
          type: string
          title: Workflow Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentStatusResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/enrichment/agent_workflow/status/{workflow_id}:
    get:
      tags:
      - enrichment
      summary: Get Enrichment Agent Task Status
      description: Get the status of an enrichment agent (creation/update) workflow.
      operationId: get_enrichment_agent_task_status_api_v1_enrichment_agent_workflow_status__workflow_id__get
      security:
      - FirebaseAuthMiddleware: []
      parameters:
      - name: workflow_id
        in: path
        required: true
        schema:
          type: string
          title: Workflow Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentAgentStatusResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/enrichment/all_user:
    get:
      tags:
      - enrichment
      summary: Get All User Enrichments
      description: 'Get all enrichments.

        Requires authentication.'
      operationId: get_all_user_enrichments_api_v1_enrichment_all_user_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllUserEnrichmentsResponse'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/add_to_layer:
    post:
      tags:
      - enrichment
      summary: Add Enrichment To Layer
      description: "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"
      operationId: add_enrichment_to_layer_api_v1_enrichment_add_to_layer_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEnrichmentToLayerRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddEnrichmentToLayerResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/delete_from_library:
    post:
      tags:
      - enrichment
      summary: Delete Enrichment From Library
      description: "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"
      operationId: delete_enrichment_from_library_api_v1_enrichment_delete_from_library_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrichmentDeleteFromLibraryRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentDeleteFromLibraryResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/credits:
    get:
      tags:
      - enrichment
      summary: Get Enrichment Credits
      description: Get the number of enrichments credits available for this user.
      operationId: get_enrichment_credits_api_v1_enrichment_credits_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichmentCreditsResponse'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/in-flight/{project_id}:
    get:
      tags:
      - enrichment
      summary: Get In Flight Tasks
      description: 'Get all in-flight enrichment workflows for a project.


        Queries DBOS workflow status filtered to non-terminal row-enrichment

        workflows and aggregates per-field for the polling UI.'
      operationId: get_in_flight_tasks_api_v1_enrichment_in_flight__project_id__get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InFlightTasksResponse'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/in-flight:
    get:
      tags:
      - enrichment
      summary: Get All In Flight Tasks
      description: Get all in-flight enrichment workflows across the user's projects.
      operationId: get_all_in_flight_tasks_api_v1_enrichment_in_flight_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllInFlightTasksResponse'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/cancel/bulk:
    post:
      tags:
      - enrichment
      summary: Cancel Enrichment Workflows Bulk
      description: 'Bulk-cancel in-flight DBOS enrichment workflows.


        Best-effort + idempotent, matching the single-cancel contract. Returns

        204 unconditionally — workflows the caller doesn''t own, workflows

        without a reservation row, and workflows already in a terminal state

        are silently skipped. The FE''s column-level cancel sends every

        workflow_id it tracked and relies on polling to converge each one to

        REVOKED.'
      operationId: cancel_enrichment_workflows_bulk_api_v1_enrichment_cancel_bulk_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkCancelEnrichmentRequest'
        required: true
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - FirebaseAuthMiddleware: []
  /api/v1/enrichment/cancel/{workflow_id}:
    post:
      tags:
      - enrichment
      summary: Cancel Enrichment Workflow
      description: 'Cancel an in-flight DBOS enrichment workflow + refund any unsettled credits [MAIA-1468].


        Returns 204 on success (idempotent on terminal states). 404 if the

        workflow has no reservation row (Celery-routed enrichment or unknown ID)

        or if the user doesn''t own the workspace it belongs to. Cross-workspace

        access is 404 not 403 to avoid leaking workflow existence.


        The ``_current_user`` Depends enforces authn; workspace authz is resolved

        inside the service via the request-scoped ``UserService`` (already bound

        to the current user via DI).'
      operationId: cancel_enrichment_workflow_api_v1_enrichment_cancel__workflow_id__post
      security:
      - FirebaseAuthMiddleware: []
      parameters:
      - name: workflow_id
        in: path
        required: true
        schema:
          type: string
          title: Workflow Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    EnrichmentStatusBatchRequest:
      properties:
        workflow_ids:
          items:
            type: string
          type: array
          title: Workflow Ids
      type: object
      required:
      - workflow_ids
      title: EnrichmentStatusBatchRequest
      description: Request model for getting the status of multiple enrichment workflows.
    InFlightTaskResponse:
      properties:
        workflow_id:
          type: string
          title: Workflow Id
          description: The DBOS workflow ID
        enrichment_id:
          type: string
          format: uuid
          title: Enrichment Id
          description: The enrichment being executed
        feature_id:
          type: string
          title: Feature Id
          description: The feature being enriched
        field_name:
          type: string
          title: Field Name
          description: The enrichment field name
        started_at:
          type: string
          format: date-time
          title: Started At
          description: When the workflow was enqueued
        phase:
          type: string
          enum:
          - queued
          - active
          title: Phase
          description: 'Per-cell lifecycle phase: ''queued'' = ENQUEUED/DELAYED (waiting for a concurrency slot), ''active'' = PENDING (dispatched and executing). Lets a cell distinguish a long queue wait from a run.'
        coordinator_workflow_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Coordinator Workflow Id
          description: The run/batch this task belongs to, so the FE can group resumed tasks per action (MAIA-2116). None for pre-2111 rows.
        task_type:
          type: string
          enum:
          - individual
          - column
          title: Task Type
          description: Type of enrichment task
          default: column
      type: object
      required:
      - workflow_id
      - enrichment_id
      - feature_id
      - field_name
      - started_at
      - phase
      title: InFlightTaskResponse
      description: Response schema for a single in-flight enrichment workflow.
    PDLSchool:
      properties:
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
        type:
          anyOf:
          - type: string
          - type: 'null'
          title: Type
        id:
          anyOf:
          - type: string
          - type: 'null'
          title: Id
        location:
          anyOf:
          - $ref: '#/components/schemas/PDLLocation'
          - type: 'null'
        linkedin_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Linkedin Url
        linkedin_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Linkedin Id
        website:
          anyOf:
          - type: string
          - type: 'null'
          title: Website
        domain:
          anyOf:
          - type: string
          - type: 'null'
          title: Domain
      type: object
      title: PDLSchool
      description: School information from PDL.
    ExpenseStructure:
      type: string
      enum:
      - nnn
      - modified_gross
      - full_service_gross
      - industrial_gross
      - other
      title: ExpenseStructure
    FilterSelectionRequest:
      properties:
        filter_spec:
          $ref: '#/components/schemas/SSRTableQueryParams'
        enrichment_state:
          anyOf:
          - type: string
          - type: 'null'
          title: Enrichment State
        enrichment_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Enrichment Name
        fingerprint:
          type: string
          title: Fingerprint
        expected_count:
          type: integer
          minimum: 1.0
          title: Expected Count
      type: object
      required:
      - filter_spec
      - fingerprint
      - expected_count
      title: FilterSelectionRequest
      description: 'Snapshot-consumer payload.


        Caller asserts: "when I called ``/filtered-count`` with this spec I

        saw ``expected_count`` rows and the server returned this

        ``fingerprint``; act on that selection." The server recomputes both

        and rejects with ``SelectionDriftResponse`` on mismatch.'
    OccupancyStatus:
      type: string
      enum:
      - leased
      - vacant
      - owner_occupied
      - partially_leased
      - unknown
      title: OccupancyStatus
    AllUserEnrichmentsResponse:
      properties:
        enrichments:
          items:
            $ref: '#/components/schemas/EnrichmentModel'
          type: array
          title: Enrichments
        available_enrichment_names:
          items:
            $ref: '#/components/schemas/EnrichmentNameConstants'
          type: array
          title: Available Enrichment Names
          description: Available enrichment names from constants
      type: object
      required:
      - enrichments
      title: AllUserEnrichmentsResponse
      description: Response model for returning a list of all user enrichments.
    ProjectInFlightTasks:
      properties:
        project_id:
          type: string
          format: uuid
          title: Project Id
          description: The project ID
        tasks:
          items:
            $ref: '#/components/schemas/InFlightTaskResponse'
          type: array
          title: Tasks
          description: List of in-flight tasks for this project
        count:
          type: integer
          title: Count
          description: Number of in-flight tasks for this project
        batches:
          items:
            $ref: '#/components/schemas/BatchEnrichmentInfo'
          type: array
          title: Batches
          description: Run-scoped progress per enrichment action (MAIA-2116)
        totals_by_field:
          additionalProperties:
            type: integer
          type: object
          title: Totals By Field
          description: 'DEPRECATED (MAIA-2116): rolling per-field totals; use `batches`'
        field_info:
          additionalProperties:
            $ref: '#/components/schemas/FieldEnrichmentInfo'
          type: object
          title: Field Info
          description: 'DEPRECATED (MAIA-2116): rolling per-field info; use `batches`'
      type: object
      required:
      - project_id
      - tasks
      - count
      title: ProjectInFlightTasks
      description: In-flight tasks for a single project.
    EnrichmentModel:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        layer_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Layer Id
        name:
          type: string
          title: Name
          default: Unconfigured enrichment
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
          default: This enrichment is not configured with a tool.
        tool:
          type: string
          title: Tool
          default: unconfigured
        params:
          additionalProperties: true
          type: object
          title: Params
        dtype:
          type: string
          title: Dtype
          description: Must be one of string, boolean, list[str], jsonb, int, float, categorical, url
          default: string
        created_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Created At
        updated_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated At
        credits_per_row:
          type: integer
          title: Credits Per Row
          description: Return the number of credits per row for this tool.
          readOnly: true
        is_configured:
          type: boolean
          title: Is Configured
          description: "Check if the enrichment is configured with a valid tool.\n\nReturns:\n    bool: True if tool is configured, False otherwise"
          readOnly: true
        is_configuration_failed:
          type: boolean
          title: Is Configuration Failed
          description: "Check if the enrichment's configuration failed.\n\nReturns:\n    bool: True if configuration was attempted but failed"
          readOnly: true
        is_data_source:
          type: boolean
          title: Is Data Source
          description: "Check if the enrichment is a data source.\n\nReturns:\n    bool: True if the enrichment is a data source, False otherwise"
          readOnly: true
      type: object
      required:
      - credits_per_row
      - is_configured
      - is_configuration_failed
      - is_data_source
      title: EnrichmentModel
      description: 'Enrichment model that combines both properties and chat history.


        This unified model simplifies the domain representation and aligns more closely

        with how data is stored in the database, reducing unnecessary abstractions.'
    TenantLeaseConcise:
      properties:
        tenant_legal_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Tenant Legal Name
          description: Tenant legal name or primary occupant name.
        lease_start_date:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Lease Start Date
          description: Lease commencement / tenant move-in date (if known).
        lease_end_date:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Lease End Date
          description: Lease expiration date for the current in-place term.
        in_place_rent_psf_yr:
          anyOf:
          - type: string
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          - type: 'null'
          title: In Place Rent Psf Yr
          description: $ / SF / Year current in-place base rent (net of abatements if possible).
        expense_structure:
          anyOf:
          - $ref: '#/components/schemas/ExpenseStructure'
          - type: 'null'
          description: Expense pass-through structure (NNN, modified gross, etc.).
        escalation_type:
          anyOf:
          - $ref: '#/components/schemas/LeaseEscalationType'
          - type: 'null'
          description: How base rent escalates (fixed %, CPI, hybrid, none).
        occupancy_status:
          anyOf:
          - $ref: '#/components/schemas/OccupancyStatus'
          - type: 'null'
          description: Leased / Vacant / Owner-occupied / Partial / Unknown — good single filter.
        num_tenants:
          anyOf:
          - type: integer
          - type: 'null'
          title: Num Tenants
          description: Number of distinct tenants in the building (1 = single-tenant).
        delinquency_status:
          anyOf:
          - type: string
          - type: 'null'
          title: Delinquency Status
          description: Description of the tenant's delinquency status.
        as_of:
          type: string
          format: date-time
          title: As Of
          description: UTC timestamp when this record was compiled/last updated.
      type: object
      title: TenantLeaseConcise
      description: 'Concise tenant / lease model optimized for REIT screens.

        Includes a small set of critical fields and computed helpers

        (lease duration, months remaining, rent delta). Use `to_dict()`

        to include derived values in output.'
    EnrichmentDelete:
      properties:
        enrichment_id:
          type: string
          format: uuid
          title: Enrichment Id
          examples:
          - 00000000-0000-0000-0000-000000000001
        project_id:
          type: string
          format: uuid
          title: Project Id
          examples:
          - 00000000-0000-0000-0000-000000000001
      type: object
      required:
      - enrichment_id
      - project_id
      title: EnrichmentDelete
      description: "Request schema for deleting an enrichment.\n\nAttributes:\n    enrichment_id: Unique identifier for the enrichment to delete"
    EnrichmentBatchStartResponse:
      properties:
        workflow_ids:
          items:
            type: string
          type: array
          title: Workflow Ids
        feature_ids:
          items:
            type: string
          type: array
          title: Feature Ids
        coordinator_workflow_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Coordinator Workflow Id
      type: object
      required:
      - workflow_ids
      - feature_ids
      title: EnrichmentBatchStartResponse
      description: 'Response from POST /enrichment/enrich_async/{enrichment_id}.


        Enqueue-only; clients drive cell freshness via the polling endpoint.

        ``feature_ids[i]`` corresponds to ``workflow_ids[i]`` — clients use this

        parallel mapping to attribute polled workflow results back to rows when

        they didn''t materialize the id list themselves (selection path).'
    EnrichmentAgentTaskPayload:
      properties:
        status:
          type: string
          title: Status
        output_type:
          type: string
          title: Output Type
        message:
          anyOf:
          - type: string
          - type: 'null'
          title: Message
        resources:
          anyOf:
          - items:
              $ref: '#/components/schemas/ResourceReference'
            type: array
          - type: 'null'
          title: Resources
        reason:
          anyOf:
          - type: string
          - type: 'null'
          title: Reason
        output:
          anyOf:
          - {}
          - type: 'null'
          title: Output
        deep_research_timed_out:
          type: boolean
          title: Deep Research Timed Out
          default: false
      type: object
      required:
      - status
      - output_type
      title: EnrichmentAgentTaskPayload
      description: Payload returned by the enrichment agent background task.
    EnrichmentLimitsResponse:
      properties:
        filtered_ids_default_limit:
          type: integer
          title: Filtered Ids Default Limit
          description: Default page size on /features/filtered-ids when `limit` is omitted from the query string.
        filtered_ids_max_limit:
          type: integer
          title: Filtered Ids Max Limit
          description: Hard upper bound on /features/filtered-ids `limit`. Requests above this return 422.
      type: object
      required:
      - filtered_ids_default_limit
      - filtered_ids_max_limit
      title: EnrichmentLimitsResponse
      description: 'Per-batch limits for column-wide enrichment.


        Backs the FE column-header Enrich submenu''s ''All in list'' clamp and

        its >100k confirm gate. Both values are the canonical server limits;

        the FE should never carry its own copy.'
    EnrichRowRequest:
      properties:
        feature_ids:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Feature Ids
          examples:
          - - 00000000-0000-0000-0000-000000000001
        selection:
          anyOf:
          - $ref: '#/components/schemas/FilterSelectionRequest'
          - type: 'null'
        high_priority:
          type: boolean
          title: High Priority
          description: Execute with high priority if True
          default: false
        point_action:
          type: boolean
          title: Point Action
          description: True for a deliberate single-cell enrichment. Only a point action skips the coordinator; column kickoffs stay coordinator-keyed even when they resolve to a single row.
          default: false
      type: object
      title: EnrichRowRequest
      description: "Request sche

# --- truncated at 32 KB (77 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/maia-analytics/refs/heads/main/openapi/maia-analytics-enrichment-api-openapi.yml