---
title: "Get Enrichment Status"
method: GET
path: "/api/v1/enrichment/workflow/status/{workflow_id}"
tags: ["enrichment"]
---

# Get Enrichment Status

`GET /api/v1/enrichment/workflow/status/{workflow_id}`

Get the status of a single enrichment workflow.

## Path parameters

- `workflow_id` string, required

## Response `200`

Successful Response

- EnrichmentStatusResponse — Response schema for enrichment status endpoint. Attributes: workflow_id: The ID of the DBOS workflow status: Status of the enrichment workflow (PENDING, SUCCESS, FAILURE, etc.) result: Response data containing enrichment value and reasoning (if successful) of type EnrichRowResponse
  - `workflow_id` string, required — The ID of the DBOS workflow (or legacy Celery task).
  - `status` string, required — The current status of the workflow (PENDING, SUCCESS, FAILURE, etc.).
  - `result` EnrichRowResponse — Response schema for enriching a specific row. Attributes: value: The enriched value (result of the enrichment) reasoning: Explanation or rationale for the enrichment value citations: List of web search sources that support the enrichment value state: The final state of the enrichment for this row
    - `value` union, required
      - string
      - number
      - boolean
      - string[]
      - object[]
      - object
      - integer
      - ContactModel[]
        - `id` string, nullable — Unique identifier for the contact. Required for PDL contacts, auto-generated for web search contacts.
        - `full_name` string, nullable
        - `first_name` string, nullable
        - `middle_name` string, nullable
        - `middle_initial` string, nullable
        - `last_name` string, nullable
        - `last_initial` string, nullable
        - `job_title` string, nullable
        - `job_title_role` string, nullable
        - `job_title_sub_role` string, nullable
        - `job_title_levels` string[]
        - `job_title_class` string, nullable
        - `job_company_name` string, nullable
        - `job_company_id` string, nullable
        - `job_company_website` string, nullable
        - `job_company_size` string, nullable
        - `job_company_industry` string, nullable
        - `job_company_location_name` string, nullable
        - `job_company_location_locality` string, nullable
        - `job_company_location_region` string, nullable
        - `job_company_location_country` string, nullable
        - `job_start_date` string, nullable
        - `job_last_changed` string, nullable
        - `job_last_verified` string, nullable
        - `linkedin_url` string, nullable
        - `linkedin_username` string, nullable
        - `linkedin_id` string, nullable
        - `has_email` boolean
        - `has_phone` boolean
        - `has_personal_email` boolean
        - `has_work_email` boolean
        - `has_mobile_phone` boolean
        - `work_email` string, nullable
        - `personal_email` string, nullable
        - `mobile_phone` string, nullable
        - `phone` string, nullable
        - `location_name` string, nullable
        - `location_locality` string, nullable
        - `location_region` string, nullable
        - `location_country` string, nullable
        - `location_continent` string, nullable
        - `twitter_url` string, nullable
        - `twitter_username` string, nullable
        - `facebook_url` string, nullable
        - `facebook_username` string, nullable
        - `github_url` string, nullable
        - `github_username` string, nullable
        - `industry` string, nullable
        - `sex` string, nullable
        - `age_range` AgeRange — Age range from PDL. Can represent exact age (min == max) or range.
          - `min` integer, nullable
          - `max` integer, nullable
          - `is_approximate` boolean
          - `reasoning` string, nullable — The reasoning for the age range.
          - `sources` string[] — The sources for the age range.
        - `skills` string[]
        - `interests` string[]
        - `tenure` TenureRange — Job tenure range representing when someone started at their current position/company. Used for employment duration (e.g., via PDL data). Can represent exact year (min == max) or range of possible years. Confidence is inferred: exact year = confirmed, range = approximate.
          - `min` integer, nullable
          - `max` integer, nullable
          - `reasoning` string, nullable — The reasoning for the tenure range.
          - `sources` string[] — The sources for the tenure range.
        - `ownership_duration` OwnershipDuration — Property ownership duration representing when ownership began. Used for property/parcel ownership (e.g., via deed records). Can represent exact year (min == max) or range of possible years. Confidence is inferred: exact year = confirmed, range = approximate.
          - `min` integer, nullable
          - `max` integer, nullable
          - `reasoning` string, nullable — The reasoning for the ownership duration.
          - `sources` string[] — The sources for the ownership duration.
        - `identity_evidence` ContactIdentityEvidence — How this contact's identity was established, as a typed claim. ``corroborated`` is reserved for identities at least two independent sources agree on. The validator enforces a floor — two distinct non-empty source *strings* — so a bare or duplicated claim cannot be represented; whether the named sources are genuinely independent remains the agent's assertion. ``single_source`` states exactly what an unconfirmed vendor return is. ``conflicting`` flags a name that disagrees with the record's owner or target person.
          - `identity` 'corroborated' | 'single_source' | 'conflicting', required — corroborated: at least two independent sources agree this is the person. single_source: one source reported it and nothing independent confirms it. conflicting: the name disagrees with the record's owner or target person.
          - `identity_basis` string, required — What establishes (or undermines) the identity, in one sentence.
          - `corroborating_sources` string[] — Named independent sources backing the identity. At least two distinct sources are required to declare 'corroborated'.
          - `reachability_source` 'property_records' | 'published' | 'both', nullable — Where the phone/email came from; 'both' means both source types were used. A vendor match score is not evidence a number is reachable.
        - `experience` PDLExperience[]
          - `company` PDLCompany — Company information from PDL.
            - `name` string, nullable
            - `size` string, nullable
            - `id` string, nullable
            - `founded` integer, nullable
            - `industry` string, nullable
            - `location` PDLLocation — Location information from PDL.
              - …
            - `linkedin_url` string, nullable
            - `linkedin_id` string, nullable
            - `facebook_url` string, nullable
            - `twitter_url` string, nullable
            - `website` string, nullable
          - `title` PDLTitle — Job title information from PDL.
            - `name` string, nullable
            - `role` string, nullable
            - `sub_role` string, nullable
            - `levels` string[]
            - `class` string, nullable
          - `location_names` string[]
          - `start_date` string, nullable
          - `end_date` string, nullable
          - `is_primary` boolean
        - `education` PDLEducation[]
          - `school` PDLSchool — School information from PDL.
            - `name` string, nullable
            - `type` string, nullable
            - `id` string, nullable
            - `location` PDLLocation — Location information from PDL.
              - …
            - `linkedin_url` string, nullable
            - `linkedin_id` string, nullable
            - `website` string, nullable
            - `domain` string, nullable
          - `degrees` string[]
          - `majors` string[]
          - `minors` string[]
          - `start_date` string, nullable
          - `end_date` string, nullable
          - `gpa` number, nullable
        - `profiles` PDLProfile[]
          - `network` string, required
          - `id` string, nullable
          - `url` string, nullable
          - `username` string, nullable
        - `dataset_version` string, nullable
      - TenantLeaseConcise[]
        - `tenant_legal_name` string, nullable — Tenant legal name or primary occupant name.
        - `lease_start_date` string, date, nullable — Lease commencement / tenant move-in date (if known).
        - `lease_end_date` string, date, nullable — Lease expiration date for the current in-place term.
        - `in_place_rent_psf_yr` string, nullable — $ / SF / Year current in-place base rent (net of abatements if possible).
        - `expense_structure` 'nnn' | 'modified_gross' | 'full_service_gross' | 'industrial_gross' | 'other'
        - `escalation_type` 'fixed_percent' | 'cpi' | 'hybrid' | 'none' | 'other'
        - `occupancy_status` 'leased' | 'vacant' | 'owner_occupied' | 'partially_leased' | 'unknown'
        - `num_tenants` integer, nullable — Number of distinct tenants in the building (1 = single-tenant).
        - `delinquency_status` string, nullable — Description of the tenant's delinquency status.
        - `as_of` string, date-time — UTC timestamp when this record was compiled/last updated.
    - `reasoning` string, nullable
    - `citations` EnrichmentCitation[], nullable
      - `url` string, nullable — Optional URL of the source that supports the enrichment value.
      - `title` string, nullable — Optional human-readable title for the source.
      - `snippet` string, nullable — Optional snippet or excerpt from the cited material.
      - `provider` string, nullable — Provider or domain the citation originated from.
      - `source_type` string, nullable — Provider-specific type identifier for the cited source.
    - `state` 'unenriched' | 'enriched' | 'attempted' | 'user_edited' | 'pending', required — Enum representing the state of an enrichment value.
  - `error_info` string, nullable — Error information if the workflow failed.
  - `completed_at` string, date-time, nullable — Timestamp when the workflow completed.

## Other responses

- `422` — Validation Error

## Changes

- **2026-08-05** `bd2347b6f591` — 1 info
  - added the optional property `result/anyOf[subschema #1: EnrichRowResponse]/value/anyOf[subschema #8]/items/identity_evidence` to the response with the `200` status

[Change history](https://skmtc.dev/maia-analytics/apis/maia-api/changes/api/v1/enrichment/workflow/status/:workflow_id/get.md)

---

[API](https://skmtc.dev/maia-analytics/apis/maia-api.md) · [All operations](https://skmtc.dev/maia-analytics/apis/maia-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/maia-analytics/maia-api/revisions/4c1b045ef2af/schema)
