> ## Documentation Index
> Fetch the complete documentation index at: https://knowledge.nufi.mx/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear verificación

> Alta de una verificación domiciliaria o laboral. El cliente crea la solicitud,
la plataforma entrega al solicitante una liga de un solo uso (SMS, correo o canal propio),
y el solicitante completa el flujo desde su teléfono.


Alta de una verificación domiciliaria o laboral. El cliente crea la solicitud, la plataforma entrega al solicitante una liga de un solo uso (por SMS, correo o por el canal del propio cliente), y el solicitante completa el flujo desde su teléfono: consentimiento, validación biométrica, fotos con sello de ubicación y formulario.

## Datos requeridos

* `ProductKey` **o** `ProductId`: uno de los dos. Si mandas ambos, gana `ProductId`.
* `Modality`: `Domiciliar` o `Laboral` (no es sensible a mayúsculas).
* `FullName`: nombre del solicitante que recibirá la liga.
* `Phone` **o** `Email`: al menos uno para entregarle la liga.

## Datos opcionales

* Domicilio declarado (`Street`, `ExteriorNumber`, `Neighborhood`, `Municipality`, `City`, `State`, `PostalCode`): contra el que se compara la ubicación real. Sin domicilio no hay comparación geográfica.
* `ExternalReference`: tu folio o id. Se devuelve en todas las consultas.
* `SendLink`: `true` por omisión (nosotros mandamos SMS/correo). `false` = solo se crea y se te devuelve la liga.

## Ejemplo de request

```json theme={null}
{
  "ProductKey": "AUTOPLAZO",
  "Modality": "Domiciliar",
  "FullName": "GUILLERMO ENRIQUEZ CHAPA",
  "Phone": "8112345678",
  "Email": "solicitante@correo.com",
  "Street": "Avenida Constitucion",
  "ExteriorNumber": "1500",
  "Neighborhood": "Centro",
  "Municipality": "Monterrey",
  "City": "Monterrey",
  "State": "Nuevo Leon",
  "PostalCode": "64000",
  "ExternalReference": "EXP-2026-00123",
  "SendLink": true
}
```

## Respuesta 200

| Campo                | Descripción                                                  |
| -------------------- | ------------------------------------------------------------ |
| `Folio`              | Folio de la verificación. `VD` = domiciliar, `VL` = laboral. |
| `VerificationId`     | Identificador interno.                                       |
| `VerificationStatus` | `Enviado` si la liga salió; `NoIniciado` si aún no.          |
| `LinkSent`           | `true` si el SMS o el correo salió correctamente.            |
| `ExpiresAtUtc`       | Vencimiento de la liga según el producto.                    |
| `ApplicantUrl`       | Liga del solicitante.                                        |

<Warning>
  La liga se entrega **una sola vez**. El token se guarda cifrado y no es reversible: `ApplicantUrl` solo viaja en esta respuesta. Guárdala de tu lado. Si se pierde, usa [reenviar](/api-reference/kyb/reenviar-verificacion): genera una liga nueva e invalida la anterior.
</Warning>

## Errores de validación (400)

`Data` trae todos los errores encontrados, no solo el primero. Mensajes posibles:

* `Se requiere ProductKey o ProductId`
* `El campo Modality es obligatorio`
* `El campo Modality debe ser Domiciliar o Laboral`
* `El campo FullName es obligatorio`
* `El campo FullName no debe exceder 200 caracteres`
* `Se requiere Phone o Email para entregarle la liga al solicitante`
* `El campo Phone no debe exceder 20 caracteres`
* `El campo Email no debe exceder 200 caracteres`
* `El campo Email no es válido`
* `El campo ExternalReference no debe exceder 100 caracteres`

## Notas de integración

* **Cobro de mensajes.** Cada SMS y cada correo se factura. Con `SendLink: false` no hay cargo de mensajería.
* **Reenvíos automáticos.** Si el producto lo tiene configurado, la plataforma reenvía sola (por omisión a las 24, 48 y 72 h).
* **Idempotencia.** El alta **no** es idempotente: dos POST idénticos crean dos verificaciones. Usa `ExternalReference` para detectar duplicados.
* **Vigencia.** La liga vence según el producto (7 días por omisión).


## OpenAPI

````yaml POST /verificaciones
openapi: 3.0.0
info:
  title: KYB API
  version: 1.0.0
servers:
  - url: https://nufi.azure-api.net/kyb
    description: Productivo
  - url: https://nufi.azure-api.net/kyb/dev
    description: Sandbox
  - url: https://nufi-kyb-services-staging-azurefunction.azurewebsites.net/api
    description: Staging
security: []
paths:
  /verificaciones:
    post:
      tags:
        - verificaciones
      summary: crear verificación
      description: >
        Alta de una verificación domiciliaria o laboral. El cliente crea la
        solicitud,

        la plataforma entrega al solicitante una liga de un solo uso (SMS,
        correo o canal propio),

        y el solicitante completa el flujo desde su teléfono.
      operationId: createVerification
      parameters:
        - name: NUFI-API-KEY
          in: header
          required: true
          schema:
            type: string
          description: >-
            Llave de la API. También se acepta como x-functions-key o ?code= en
            la URL.
          example: '{{NUFI_API_KEY}}'
        - name: X-Workspace
          in: header
          required: true
          schema:
            type: string
          description: >-
            Identificador del cliente (GUID). Determina el catálogo de productos
            disponible.
          example: '{{WORKSPACE_ID}}'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - Modality
                - FullName
              properties:
                ProductKey:
                  type: string
                  maxLength: 40
                  description: >-
                    Clave del producto contratado (p. ej. AUTOPLAZO).
                    Obligatorio si no se envía ProductId.
                ProductId:
                  type: string
                  format: uuid
                  description: >-
                    Alternativa a ProductKey. Si se envían ambos, gana
                    ProductId.
                Modality:
                  type: string
                  description: Domiciliar o Laboral. No es sensible a mayúsculas.
                  enum:
                    - Domiciliar
                    - Laboral
                FullName:
                  type: string
                  maxLength: 200
                  description: Nombre del solicitante que recibirá la liga.
                Phone:
                  type: string
                  maxLength: 20
                  description: >-
                    10 dígitos. Se antepone 52 automáticamente si no lo trae.
                    Obligatorio si no se envía Email.
                Email:
                  type: string
                  format: email
                  maxLength: 200
                  description: >-
                    Destino del correo con la liga. Obligatorio si no se envía
                    Phone.
                Street:
                  type: string
                  description: Calle del domicilio declarado.
                ExteriorNumber:
                  type: string
                  description: Número exterior del domicilio declarado.
                Neighborhood:
                  type: string
                  description: Colonia del domicilio declarado.
                Municipality:
                  type: string
                  description: Municipio del domicilio declarado.
                City:
                  type: string
                  description: Ciudad del domicilio declarado.
                State:
                  type: string
                  description: Estado del domicilio declarado.
                PostalCode:
                  type: string
                  description: Código postal del domicilio declarado.
                ExternalReference:
                  type: string
                  maxLength: 100
                  description: >-
                    Folio o id externo. Se devuelve en consultas y es buscable
                    por analistas.
                SendLink:
                  type: boolean
                  default: true
                  description: >-
                    true = se envía SMS y/o correo. false = solo se crea y se
                    devuelve la liga.
            examples:
              default:
                value:
                  ProductKey: AUTOPLAZO
                  Modality: Domiciliar
                  FullName: GUILLERMO ENRIQUEZ CHAPA
                  Phone: '8112345678'
                  Email: solicitante@correo.com
                  Street: Avenida Constitucion
                  ExteriorNumber: '1500'
                  Neighborhood: Centro
                  Municipality: Monterrey
                  City: Monterrey
                  State: Nuevo Leon
                  PostalCode: '64000'
                  ExternalReference: EXP-2026-00123
                  SendLink: true
      responses:
        '200':
          description: Verificación creada
          content:
            application/json:
              schema:
                type: object
                properties:
                  Code:
                    type: integer
                    example: 200
                  Status:
                    type: string
                    example: Success
                  Message:
                    type: string
                    example: Verificación creada
                  Data:
                    type: object
                    properties:
                      Folio:
                        type: string
                        description: >-
                          Folio de la verificación. VD = domiciliar, VL =
                          laboral.
                        example: VD-2607-ZUZFKY
                      VerificationId:
                        type: string
                        format: uuid
                        example: 2aebab70-24f8-41c9-a17e-59f98a6f97a1
                      VerificationStatus:
                        type: string
                        description: Enviado si la liga salió; NoIniciado si aún no.
                        example: NoIniciado
                      LinkSent:
                        type: boolean
                        description: true si el SMS o el correo salió correctamente.
                        example: false
                      ExternalReference:
                        type: string
                        example: EXP-2026-00123
                      ExpiresAtUtc:
                        type: string
                        format: date-time
                        example: '2026-08-04T23:37:42.218Z'
                      ApplicantUrl:
                        type: string
                        format: uri
                        description: >-
                          Liga del solicitante. Solo se entrega una vez en esta
                          respuesta.
              examples:
                success:
                  value:
                    Code: 200
                    Status: Success
                    Message: Verificación creada
                    Data:
                      Folio: VD-2607-ZUZFKY
                      VerificationId: 2aebab70-24f8-41c9-a17e-59f98a6f97a1
                      VerificationStatus: NoIniciado
                      LinkSent: false
                      ExternalReference: EXP-2026-00123
                      ExpiresAtUtc: '2026-08-04T23:37:42.218Z'
                      ApplicantUrl: >-
                        https://kyb.nufi.mx/v/6e7pzhbv?t=a29vVC9rQTBmeFBmODRCV0tBbG1mbWsxb0J0ZXo2QmtRaXJ2WmhHZzFRdz0
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  Code:
                    type: integer
                    example: 400
                  Status:
                    type: string
                    example: bad_request
                  Message:
                    type: string
                    example: Error de validacion
                  Data:
                    type: array
                    items:
                      type: string
              examples:
                validationError:
                  value:
                    Code: 400
                    Status: bad_request
                    Message: Error de validacion
                    Data:
                      - Se requiere ProductKey o ProductId
                      - El campo Modality es obligatorio
                      - El campo FullName es obligatorio
                      - >-
                        Se requiere Phone o Email para entregarle la liga al
                        solicitante
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  Code:
                    type: integer
                    example: 401
                  Status:
                    type: string
                    example: forbidden
                  Message:
                    type: string
                  Data:
                    nullable: true
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  Code:
                    type: integer
                    example: 403
                  Status:
                    type: string
                    example: forbidden
                  Message:
                    type: string
                  Data:
                    nullable: true
              examples:
                invalidWorkspace:
                  value:
                    Code: 403
                    Status: forbidden
                    Message: El ID de Workspace no es válido o no está activo
                    Data: null
                invalidProduct:
                  value:
                    Code: 403
                    Status: forbidden
                    Message: Producto no válido
                    Data: null
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  Code:
                    type: integer
                    example: 500
                  Status:
                    type: string
                    example: internal_server_error
                  Message:
                    type: string
                    example: Ocurrió un error al procesar la solicitud
                  Data:
                    nullable: true

````