---
title: "Resolve Row"
method: POST
path: "/batches/{batch_id}/rows/{row_number}/resolve"
tags: ["batches"]
---

# Resolve Row

`POST /batches/{batch_id}/rows/{row_number}/resolve`

## Request

- Base URL: `https://api.licenscheck.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.licenscheck.com/batches/{batch_id}/rows/{row_number}/resolve`
- Auth: none declared

Tell a row which license it means (one of its candidates, or one you found) and verify it now.

It's one verification, like any matched row, and the row joins the results file.

Args:
    batch_id: The batch.
    row_number: The row.
    body: The license.
    key: Injected: the caller's paid key.
    batches: Injected `BatchRepository`.
    licenses: Injected `LicenseRepository`.
    keys: Injected `ApiKeyRepository`.

Returns:
    The verified row.

Raises:
    HTTPException: 404 for an unknown row or license; 409 before the batch finishes, or for a matched row.

## Path parameters

- `batch_id` string, uuid, required
- `row_number` integer, required

## Request body

- ResolveIn: Body for POST /batches/{id}/rows/{row}/resolve: the license the row means.
  - `license_id` string, uuid, required: One of the row's candidates, or any license you found by search.

## Response `200`

Successful Response

- BatchRowOut: One row of a batch and how it came out.
  - `row` integer, required: Its number in the file, 1 for the first row under the header.
  - `cells` object, required: Your values, by column.
  - `match_status` 'matched' | 'ambiguous' | 'not_found' | 'invalid', required: How one uploaded row matched a license. Attributes: MATCHED: Exactly one license (or one contractor's licenses in the state): verified and billed. AMBIGUOUS: Several contractors could be meant; never verified or billed until the customer picks one. NOT_FOUND: No license matches; never billed. INVALID: The row has no usable number or name, or names an unknown state; never billed.
  - `license_id` string, uuid, nullable, required: The matched license, if any.
  - `note` string, nullable, required: Why it didn't match, or how it did.
  - `candidates` Candidate[], required: Licenses an ambiguous row could mean, or near names for one not found.
    - `license_id` string, uuid, required: The license; pick it with POST /batches/{id}/rows/{row}/resolve.
    - `name` string, required: The licensee or business name.
    - `license_number` string, required: The license number.
    - `state` string, required: The state.
    - `board` string, required: The issuing board.
    - `license_type` string, required: The license's trade, e.g. general_contractor.
    - `address` string, nullable, required: The address its board lists, if any.
    - `status` string, required: Its board status.
  - `result` RowResult, required: A verified row's verdict and links, as stored on the row and returned.
    - `license` MatchedLicense, required: The license a row matched, as its board lists it.
      - `name` string, required: The licensee, or its business name when it has one.
      - `license_number` string, required: The license number.
      - `state` string, required: The state, e.g. AZ.
      - `board` string, required: The issuing board, e.g. AZ_ROC.
      - `status` string, required: Its board status, or `delisted` once its board stopped listing it.
    - `level` 'clear' | 'review' | 'risk', required: The overall verification verdict for a license.
    - `word` string, required: The verdict as a word: Clear, Review or Risk found.
    - `summary` string, required: The verdict's one-sentence reason.
    - `failing_checks` string[], required: Each check that warned or failed, as "Label: result", the failed ones first (they set a Risk verdict).
    - `linked_licenses` integer, required: How many other licenses are linked to the contractor.
    - `linked_states` string[], required: The linked licenses' states, each once.
    - `worst_linked_status` string, nullable, required: The worst status among linked licenses when it isn't active, e.g. "revoked in OR".

## Other responses

- `401`: No API key, or one that's wrong or revoked.
- `403`: A free key: batches need a paid plan.
- `404`: No such batch, row or license.
- `409`: The batch hasn't finished, or the row is already matched.
- `422`: Validation Error

---

[API](https://skmtc.dev/licenscheck/apis/licenscheck-api.md) · [All operations](https://skmtc.dev/licenscheck/apis/licenscheck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/licenscheck/apis/licenscheck-api/revisions/472db933f385?raw)
