> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/api-rest/midapi-v2/document-services/form-ocr.md).

# Form OCR

Servicio que extrae los campos de impresos no identitarios: facturas, recibos y PDF genéricos.

Es un servicio exclusivamente en línea: `source` solo admite el valor `FILE`, no lleva cabecera `operation-id` y sus assets no participan del ciclo de operación. Un impreso se identifica por su emisor (`issuerCode`) y no por su país.

### Endpoint

```
POST /form/ocr
```

### Headers

| Nombre            | Tipo   | Requerido | Descripción                                                                                               |
| ----------------- | ------ | --------- | --------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | **Sí**    | Token de consumer en formato `Bearer <token>`. Ver [Autenticación](/api-rest/midapi-v2/autenticacion.md). |
| **consumer-id**   | string | **Sí**    | Identificador del consumer.                                                                               |

### Cuerpo de la solicitud

**Content-Type:** `application/json`

#### Parámetros

| Parámetro        | Tipo    | Requerido | Descripción                                                                                  |
| ---------------- | ------- | --------- | -------------------------------------------------------------------------------------------- |
| `source`         | string  | **Sí**    | Solo `FILE`. Cualquier otro valor se rechaza con `400`.                                      |
| `files`          | array   | **Sí**    | Páginas del impreso en orden, en Base64. Un impreso puede tener cualquier número de páginas. |
| `formType`       | string  | **Sí**    | Tipo de impreso: `INVOICE` o `PDF`.                                                          |
| `issuerCode`     | string  | **Sí**    | Código del emisor del impreso, acordado con el emisor. No es un código de país.              |
| `retrieveImages` | boolean | No        | Devuelve las imágenes recortadas en la respuesta. Por defecto `false`.                       |

#### Ejemplo de solicitud

```json
{
  "source": "FILE",
  "files": ["<base64 página 1>", "<base64 página 2>"],
  "formType": "INVOICE",
  "issuerCode": "TELMEX"
}
```

### Respuestas

#### `200` Éxito

#### Parámetros de respuesta

| Parámetro              | Tipo    | Descripción                                                                        |
| ---------------------- | ------- | ---------------------------------------------------------------------------------- |
| `serviceResultCode`    | integer | Código que indica el resultado general de la ejecución del servicio. `0` es éxito. |
| `serviceResultLog`     | string  | Campo descriptivo del resultado de la ejecución del servicio.                      |
| `serviceTransactionId` | string  | Identificador de transacción asociado a la solicitud procesada.                    |
| `serviceTime`          | string  | Tiempo total de procesamiento **(milisegundos)**.                                  |
| `timestamp`            | string  | Momento en que finalizó el procesamiento, en formato **ISO 8601**.                 |
| `serviceResult`        | object  | Resultado del OCR con los campos extraídos del impreso.                            |

{% hint style="warning" %}
`FORM_OCR` es un aprovisionamiento propio, separado de `DOCUMENT_OCR`. Un consumer que procese facturas necesita que se le habilite este servicio.
{% endhint %}

#### Otras respuestas

| Código | Descripción                                                                                                                                                                                    |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | `source` distinto de `FILE`, `formType` desconocido, o campo obligatorio ausente.                                                                                                              |
| `401`  | Token ausente, inválido o caducado.                                                                                                                                                            |
| `403`  | El consumer no está aprovisionado con el servicio `FORM_OCR`.                                                                                                                                  |
| `429`  | El consumer ha superado su límite de tasa de peticiones. La respuesta incluye `Retry-After` con los segundos de espera, y `X-RateLimit-Limit` y `X-RateLimit-Burst` con los umbrales vigentes. |

El cuerpo de una respuesta de error tiene la forma descrita en [Middleware API v2](/api-rest/midapi-v2.md#respuestas-de-error).
