{
  "openapi": "3.1.0",
  "info": {
    "title": "UFLPA Entity List Screening",
    "version": "1.0.0",
    "summary": "UFLPA Entity List and denied-party screening in one call, from two live federal sources.",
    "description": "Screen a supplier against the DHS UFLPA Entity List and the federal Consolidated Screening List in one API call. For import-compliance and sourcing teams.\n\nGenerated from the service's own TypeScript contract types, so this document describes what the API actually returns. Operated by EAC Ventures, LLC.\n\nSubscribe, including the free tier: https://rapidapi.com/aervik-labs-aervik-labs-default/api/us-import-risk-screening-api-uflpa-ad-cvd\n\nKnown limits:\n- Screens names. An HTS number you send is echoed back and not used to screen anything.\n- Screens organizations: records the sources classify as individuals are withheld, and the response says so.\n- Both lists are published in Latin script, so a name with no Latin letters or digits cannot be screened; those sections answer error, never a clean result.\n- AD/CVD scope is not reported.\n- Advisory only; a no match is not a clearance.\n\nSources, freshness and live health: https://aerviklabs.com/sources.json (https://aerviklabs.com/data-sources/#import-risk-screening). What we do when something cannot be established: https://aerviklabs.com/trust/\n\nThis OpenAPI document is available under the MIT License (Copyright (c) 2026 EAC Ventures, LLC). Use of the API itself is governed by its Terms of Service, not by that license.",
    "contact": {
      "name": "Aervik Labs",
      "url": "https://aerviklabs.com/about/"
    },
    "x-aervik-provenance": {
      "sources_json": "https://aerviklabs.com/sources.json",
      "data_sources_page": "https://aerviklabs.com/data-sources/#import-risk-screening",
      "trust_page": "https://aerviklabs.com/trust/",
      "read_method": "live",
      "known_limits": [
        "Screens names. An HTS number you send is echoed back and not used to screen anything.",
        "Screens organizations: records the sources classify as individuals are withheld, and the response says so.",
        "Both lists are published in Latin script, so a name with no Latin letters or digits cannot be screened; those sections answer error, never a clean result.",
        "AD/CVD scope is not reported.",
        "Advisory only; a no match is not a clearance."
      ]
    },
    "termsOfService": "https://import-risk.aerviklabs.com/terms"
  },
  "externalDocs": {
    "description": "Product page",
    "url": "https://aerviklabs.com/apis/import-risk-screening/"
  },
  "servers": [
    {
      "url": "https://us-import-risk-screening-api-uflpa-ad-cvd.p.rapidapi.com",
      "description": "RapidAPI gateway"
    }
  ],
  "security": [
    {
      "RapidApiKey": []
    }
  ],
  "paths": {
    "/screen/shipment": {
      "post": {
        "operationId": "screenShipment",
        "summary": "Screen a shipment's supplier and manufacturer against the UFLPA Entity List and the Consolidated Screening List",
        "parameters": [
          {
            "$ref": "#/components/parameters/RapidApiHost"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScreenShipmentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScreenShipmentRequest"
              }
            }
          }
        }
      }
    },
    "/screen/parties": {
      "post": {
        "operationId": "screenParties",
        "summary": "Screen a batch of party names against the UFLPA Entity List and the Consolidated Screening List",
        "parameters": [
          {
            "$ref": "#/components/parameters/RapidApiHost"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScreenPartiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScreenPartiesRequest"
              }
            }
          }
        }
      }
    },
    "/uflpa/entities": {
      "get": {
        "operationId": "searchUflpaEntities",
        "summary": "Search the UFLPA Entity List by name",
        "parameters": [
          {
            "$ref": "#/components/parameters/RapidApiHost"
          },
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "The entity name to search for.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UflpaEntitiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/adcvd/by-hts/{hts}": {
      "get": {
        "operationId": "adcvdByHtsRetired",
        "summary": "Retired. Answers 410 Gone with the reason and where to look instead; this API no longer reports AD/CVD scope",
        "deprecated": true,
        "parameters": [
          {
            "$ref": "#/components/parameters/RapidApiHost"
          },
          {
            "name": "hts",
            "in": "path",
            "required": true,
            "description": "An HTS number. Not used: the route is retired",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "410": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "RapidApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-RapidAPI-Key",
        "description": "Your RapidAPI application key."
      }
    },
    "parameters": {
      "RapidApiHost": {
        "name": "X-RapidAPI-Host",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string",
          "const": "us-import-risk-screening-api-uflpa-ad-cvd.p.rapidapi.com"
        }
      }
    },
    "schemas": {
      "CslCheckResult": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/MatchStatus",
            "description": "match, possible_match, no_match, or error. error means this source could not be checked for this request, including when no supplied name had anything to compare; it is never a clean result."
          },
          "matches": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entity": {
                  "$ref": "#/components/schemas/CslEntity"
                },
                "matched_against": {
                  "type": "string",
                  "enum": [
                    "supplier_name",
                    "manufacturer",
                    "query"
                  ]
                },
                "input_value": {
                  "type": "string"
                },
                "matched_name": {
                  "type": "string"
                },
                "match_type": {
                  "$ref": "#/components/schemas/MatchType"
                },
                "score": {
                  "type": "number"
                }
              },
              "required": [
                "entity",
                "input_value",
                "match_type",
                "matched_against",
                "matched_name",
                "score"
              ]
            }
          },
          "source": {
            "$ref": "#/components/schemas/SourceManifest"
          },
          "error": {
            "type": "string",
            "description": "Present only when status is error: why this source could not be checked."
          },
          "result_page_truncated": {
            "type": "boolean",
            "description": "True when the source reported more matching records than it returned. Records beyond the returned page were not scored, so this is not a clean result for them."
          },
          "total_upstream_results": {
            "type": [
              "number",
              "null"
            ],
            "description": "The source's own reported total of matching records for the searches made, or null when it did not report one or could not be read."
          },
          "records_below_match_threshold": {
            "type": "number",
            "description": "Records the source returned that scored below the match threshold and are not shown. A count above zero is not a statement that they are unrelated."
          }
        },
        "required": [
          "status",
          "matches",
          "source",
          "result_page_truncated",
          "total_upstream_results",
          "records_below_match_threshold"
        ]
      },
      "CslEntity": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source_list": {
            "type": "string"
          },
          "last_updated": {
            "type": [
              "string",
              "null"
            ]
          },
          "subject_type": {
            "type": "string",
            "enum": [
              "individual",
              "entity",
              "unknown"
            ]
          }
        },
        "required": [
          "name",
          "aliases",
          "source_list",
          "last_updated",
          "subject_type"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "error",
          "message"
        ],
        "description": "Every non-2xx JSON response from the API itself. `error` is a stable machine-readable code; `message` is for humans and may change. Codes this API can return: `batch_too_large`, `internal_error`, `invalid_fields`, `invalid_hts`, `invalid_json`, `invalid_party`, `invalid_query`, `method_not_allowed`, `missing_fields`, `missing_parties`, `missing_query`, `not_found`, `output_scope_violation`, `provider_misconfigured`, `route_retired`, `source_unavailable`, `unauthorized`. RapidAPI answers authentication, subscription and rate-limit failures itself, in its own format."
      },
      "ExposureSummary": {
        "type": "object",
        "properties": {
          "overall_risk": {
            "$ref": "#/components/schemas/OverallRisk",
            "description": "A fixed, deterministic rating computed from each source's status, never an AI judgment. Incomplete coverage of any kind holds it at low or above."
          },
          "reasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "narrative": {
            "type": "string",
            "description": "Prose written from the rating and reasons already computed. It does not decide any match or the rating."
          },
          "incomplete_coverage": {
            "type": "boolean",
            "description": "True when something this API set out to screen was not fully screened: a source that is not live, a source that could not be checked, a supplied name with nothing to compare, a truncated result page, records below the match threshold, or a name sent as a single word with no spaces that matched nothing -- these sources list companies under names of several words, so a joined or compacted spelling can fail to match even when the party is listed. When true, reasons open with the gap."
          }
        },
        "required": [
          "overall_risk",
          "reasons",
          "narrative",
          "incomplete_coverage"
        ]
      },
      "MatchStatus": {
        "type": "string",
        "enum": [
          "match",
          "possible_match",
          "no_match",
          "error"
        ]
      },
      "MatchType": {
        "type": "string",
        "enum": [
          "exact",
          "fuzzy"
        ]
      },
      "OverallRisk": {
        "type": "string",
        "enum": [
          "none",
          "low",
          "elevated",
          "high"
        ]
      },
      "PartiesScreenResult": {
        "type": "object",
        "properties": {
          "coverage": {
            "type": "string",
            "description": "The same scope statement on every response: this service serves entity records only."
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartyScreenResult"
            }
          }
        },
        "required": [
          "coverage",
          "results"
        ]
      },
      "PartyInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "PartyScreenResult": {
        "type": "object",
        "properties": {
          "party": {
            "$ref": "#/components/schemas/PartyInput"
          },
          "uflpa": {
            "$ref": "#/components/schemas/UflpaCheckResult"
          },
          "csl": {
            "$ref": "#/components/schemas/CslCheckResult"
          },
          "coverage_note": {
            "type": [
              "string",
              "null"
            ],
            "description": "Why this party's result is not a complete screen, or null. Today it carries one case: the name was sent as a single word with no spaces and neither list returned anything. These sources list entities under names of several words, so a joined or compacted spelling can fail to match even when the party is listed -- such a result is not sufficient to establish a clean screen. Re-screen with the spaced registered legal name. Per party, because the limitation is a property of the name that was sent."
          }
        },
        "required": [
          "party",
          "uflpa",
          "csl",
          "coverage_note"
        ]
      },
      "ScreenPartiesRequest": {
        "type": "object",
        "properties": {
          "parties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartyInput"
            }
          }
        },
        "required": [
          "parties"
        ]
      },
      "ScreenPartiesResponse": {
        "$ref": "#/components/schemas/PartiesScreenResult"
      },
      "ScreenShipmentRequest": {
        "$ref": "#/components/schemas/ShipmentScreenRequest"
      },
      "ScreenShipmentResponse": {
        "$ref": "#/components/schemas/ShipmentScreenResult"
      },
      "ShipmentScreenRequest": {
        "type": "object",
        "properties": {
          "hts": {
            "type": "string"
          },
          "country_of_origin": {
            "type": "string"
          },
          "supplier_name": {
            "type": "string"
          },
          "manufacturer": {
            "type": "string"
          }
        }
      },
      "ShipmentScreenResult": {
        "type": "object",
        "properties": {
          "coverage": {
            "type": "string",
            "description": "The same scope statement on every response: this service serves entity records only."
          },
          "input": {
            "$ref": "#/components/schemas/ShipmentScreenRequest",
            "description": "Your request, echoed back. hts and country_of_origin are not used to screen anything."
          },
          "uflpa": {
            "$ref": "#/components/schemas/UflpaCheckResult"
          },
          "csl": {
            "$ref": "#/components/schemas/CslCheckResult"
          },
          "exposure_summary": {
            "$ref": "#/components/schemas/ExposureSummary"
          },
          "disclaimer": {
            "type": "string"
          }
        },
        "required": [
          "coverage",
          "input",
          "uflpa",
          "csl",
          "exposure_summary",
          "disclaimer"
        ]
      },
      "SourceBasis": {
        "type": "string",
        "enum": [
          "live",
          "mock",
          "mock-pending-key"
        ]
      },
      "SourceManifest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "basis": {
            "$ref": "#/components/schemas/SourceBasis",
            "description": "live: produced from the named source itself. mock or mock-pending-key: produced from a labeled placeholder dataset, not from the source, so it is not a screen against that list."
          },
          "as_of": {
            "type": [
              "string",
              "null"
            ],
            "description": "The source's own date for this data, or null when the source publishes none or it could not be read. It is never the date of your request."
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "url",
          "basis",
          "as_of",
          "note"
        ]
      },
      "UflpaCheckResult": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/MatchStatus",
            "description": "match, possible_match, no_match, or error. error means this source could not be checked for this request, including when no supplied name had anything to compare; it is never a clean result."
          },
          "matches": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entity": {
                  "$ref": "#/components/schemas/UflpaEntity"
                },
                "matched_against": {
                  "type": "string",
                  "enum": [
                    "supplier_name",
                    "manufacturer",
                    "query"
                  ]
                },
                "input_value": {
                  "type": "string"
                },
                "matched_name": {
                  "type": "string"
                },
                "match_type": {
                  "$ref": "#/components/schemas/MatchType"
                },
                "score": {
                  "type": "number"
                }
              },
              "required": [
                "entity",
                "input_value",
                "match_type",
                "matched_against",
                "matched_name",
                "score"
              ]
            }
          },
          "source": {
            "$ref": "#/components/schemas/SourceManifest"
          },
          "error": {
            "type": "string",
            "description": "Present only when status is error: why this source could not be checked."
          }
        },
        "required": [
          "status",
          "matches",
          "source"
        ]
      },
      "UflpaEntitiesResponse": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "coverage": {
            "type": "string",
            "description": "The same scope statement on every response: this service serves entity records only."
          },
          "status": {
            "$ref": "#/components/schemas/MatchStatus",
            "description": "match, possible_match, or no_match. If the source cannot be read the response is a 503, and a q with nothing to compare after normalization is a 400; neither is ever an empty no_match."
          },
          "matches": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entity": {
                  "$ref": "#/components/schemas/UflpaEntity"
                },
                "matched_against": {
                  "type": "string",
                  "enum": [
                    "supplier_name",
                    "manufacturer",
                    "query"
                  ]
                },
                "input_value": {
                  "type": "string"
                },
                "matched_name": {
                  "type": "string"
                },
                "match_type": {
                  "$ref": "#/components/schemas/MatchType"
                },
                "score": {
                  "type": "number"
                }
              },
              "required": [
                "entity",
                "input_value",
                "match_type",
                "matched_against",
                "matched_name",
                "score"
              ]
            }
          },
          "source": {
            "$ref": "#/components/schemas/SourceManifest"
          }
        },
        "required": [
          "query",
          "coverage",
          "status",
          "matches",
          "source"
        ]
      },
      "UflpaEntity": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "listed_date": {
            "type": "string",
            "description": "The effective date DHS prints on this entity's row. It is per category: an entity DHS lists in two categories can carry a different date in each."
          },
          "basis": {
            "type": [
              "string",
              "null"
            ],
            "description": "The category DHS lists this row under: the heading printed above its table on the DHS page, verbatim, followed by its UFLPA section, e.g. \"(Section 2(d)(2)(B)(i))\". An entity listed in several categories matches once per category, each with its own basis. Null when no heading could be read."
          }
        },
        "required": [
          "name",
          "aliases",
          "listed_date",
          "basis"
        ]
      }
    }
  }
}
