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

# Actualizar esquema existente

> Actualiza un esquema de formulario existente por su id_schema.

> **Nota:** El cuerpo de la solicitud está limitado a **200 KB** por nuestro WAF. Si tu esquema (campos, `ui_label`, `description`, validaciones, etc.) supera este tamaño, la solicitud será rechazada antes de llegar al backend. Considera dividir formularios muy grandes en varios esquemas más pequeños.




## OpenAPI

````yaml /api-reference/openapi.yaml put /v2/form-schemas/{id_schema}
openapi: 3.0.0
info:
  title: Coleccion de API KYB MX
  description: >
    La Colección de API KYB MX proporciona puntos finales para crear y gestionar
    verificaciones de empresas en México. La verificación de empresas implica
    validar la información proporcionada por un cliente comercial, incluyendo
    documentos y fuentes de datos, para asegurar su legitimidad y precisión.


    Cada verificación de empresa puede incluir múltiples ítems, como Actas
    Constitutivas, Constancias de Situación Fiscal, Identificaciones Personales
    y Comprobantes de Domicilio. Trebol maneja automáticamente la clasificación
    de documentos, lo que te permite enviar todos los documentos requeridos como
    URLs descargables (por ejemplo, URLs prefirmadas de AWS o GCP).


    **Autenticación**: 

    La API utiliza una clave API para la autenticación, pasada en el encabezado
    `x-api-key`. Para obtener una clave API, por favor
    [contáctanos](mailto:sales@gotrebol.com).
  version: 1.0.0
servers:
  - url: https://api.gotrebol.com
  - url: http://{{trebol_api_base_url}}
security: []
tags:
  - name: Creacion de Verificacion
    description: Endpoints para crear nuevas verificaciones.
  - name: Leer información de la empresa
    description: >-
      Endpoints v2 para obtener información detallada de empresas y
      verificaciones.
  - name: Leer por Etiqueta
    description: >-
      Endpoints para obtener información detallada sobre empresas mediante
      etiquetas.
  - name: Leer por ID de Verificacion
    description: >-
      Endpoints para obtener información detallada sobre verificaciones mediante
      ID.
  - name: Gestión de IPs Permitidas
    description: >-
      Endpoints para gestionar la lista de IPs permitidas (whitelist) para la
      cuenta del cliente.
  - name: Gestión de API Keys
    description: Endpoints para crear, listar y eliminar API keys de la cuenta del usuario.
  - name: Gestion de item Ids
    description: Endpoints para gestionar items de verificaciones.
  - name: Invalidar un documento
    description: Endpoints para invalidar documentos de verificaciones.
  - name: Labels de Verificacion
    description: Endpoints para gestionar labels de verificaciones.
  - name: Actualizar personas clave de una verificacion
    description: Endpoints para actualizar personas clave de verificaciones.
  - name: Agregar items a una verificacion
    description: Endpoints para agregar items a verificaciones existentes.
  - name: Estado de validacion de documentos
    description: Endpoints para obtener el estado de validación de documentos.
  - name: Gestión de Flujos de Cuenta
    description: Endpoints para gestionar flujos de cuenta.
  - name: Gestión de Webhooks
    description: Endpoints para crear, listar, actualizar y eliminar webhooks de la cuenta.
  - name: Gestión de Política de Retención
    description: Endpoints para gestionar la política de retención de datos de la cuenta.
  - name: Exportación de Verificaciones
    description: >-
      Endpoints para exportar datos de verificaciones a documentos
      personalizados.
  - name: Leer información de la empresa v1
    description: >-
      Endpoints v1 (legacy) para obtener información detallada de empresas y
      verificaciones. Te recomendamos migrar a los endpoints v2.
  - name: Tipos de Ítem Personalizados
    description: >-
      Endpoints para crear y gestionar tipos de ítem personalizados con procesos
      configurables de clasificación, validación y extracción.
paths:
  /v2/form-schemas/{id_schema}:
    put:
      tags:
        - Gestión de Esquemas de Formularios
      summary: Actualizar esquema existente
      description: >
        Actualiza un esquema de formulario existente por su id_schema.


        > **Nota:** El cuerpo de la solicitud está limitado a **200 KB** por
        nuestro WAF. Si tu esquema (campos, `ui_label`, `description`,
        validaciones, etc.) supera este tamaño, la solicitud será rechazada
        antes de llegar al backend. Considera dividir formularios muy grandes en
        varios esquemas más pequeños.
      parameters:
        - name: id_schema
          in: path
          required: true
          schema:
            type: string
            description: Identificador único del esquema
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del esquema de formulario
                ui_schema_definition:
                  $ref: '#/components/schemas/UISchemaField'
      responses:
        '200':
          description: Esquema actualizado exitosamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicFormSchema'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    UISchemaField:
      type: object
      description: >
        Definición de campo de esquema de interfaz de usuario. Esta estructura
        permite definir formularios 

        dinámicos con campos anidados y diferentes tipos de entrada. El esquema
        soporta campos simples 

        como texto, números, fechas, y campos complejos como secciones que
        pueden contener otros campos.


        **Estructura jerárquica**: Los campos pueden anidarse usando el tipo
        "section", permitiendo 

        crear formularios con múltiples niveles de organización.


        **Validación automática**: El sistema valida automáticamente que todos
        los campos referenciados 

        en ui_order existan como propiedades en el mismo nivel.
      properties:
        ui_order:
          type: array
          items:
            type: string
          description: >
            Array que define el orden de aparición de los campos en la interfaz
            de usuario. 

            Debe contener los nombres de todos los campos definidos en el mismo
            nivel del objeto.

            Es obligatorio en el nivel raíz y opcional en secciones anidadas o
            en tablas para configurar el orden de sus columnas.
          example:
            - nombre
            - apellido
            - notaria
        ui_type:
          type: string
          enum:
            - file
            - date
            - section
            - select
            - multiselect
            - number
            - email
            - password
            - text
            - table
            - checkbox
            - country
          description: >
            Tipo de campo que determina cómo se renderiza en la interfaz:

            - **text**: Campo de texto simple

            - **number**: Campo numérico

            - **email**: Campo de email con validación

            - **password**: Campo de contraseña (oculto)

            - **date**: Selector de fecha

            - **file**: Selector de archivo

            - **select**: Lista desplegable (requiere ui_items)

            - **multiselect**: Selección múltiple (requiere ui_items)

            - **section**: Contenedor para agrupar otros campos

            - **table**: Tabla para solicitar un número indeterminado de datos
            de cualquier tipo de campo **Excepto para el tipo de campo `file`**.
            Requiere ui_columns.

            - **paragraph**: Label o texto que no tiene ningún input asociado,
            usado a nivel informativo. Requiere solamente ui_label.

            - **heading**: Encabezado que no tiene ningún input asociado, usado
            a nivel informativo. Requiere solamente ui_label.

            - **checkbox**: Campo booleano (true/false) renderizado como
            checkbox con label. Útil para preguntas de sí/no.

            - **country**: Selector de país con búsqueda. Almacena el nombre del
            país en la llave del campo y genera automáticamente una llave
            adicional con sufijo `_code` que contiene el código ISO 3166-1
            alpha-2 (ej. si la llave es `nationality`, se almacena `nationality:
            "México"` y `nationality_code: "MX"`).
          example: text
        ui_label:
          type: string
          description: >
            Etiqueta visible que se muestra al usuario para identificar el
            campo. 

            Debe ser descriptivo y claro para facilitar la comprensión del
            usuario.
          example: Nombre
        ui_required:
          type: boolean
          description: |
            Indica si el campo es obligatorio. Los campos requeridos deben ser 
            completados antes de poder enviar el formulario.
          example: true
        ui_items:
          type: array
          items:
            oneOf:
              - type: string
              - type: object
                properties:
                  label:
                    type: string
                    description: Texto visible para el usuario.
                  value:
                    type: string
                    description: Valor almacenado internamente.
                required:
                  - label
                  - value
          description: >
            Array de opciones disponibles para campos de tipo select y
            multiselect.

            Soporta dos formatos:

            - **Strings**: el valor almacenado es igual al texto visible (ej.
            `["Opción A", "Opción B"]`).

            - **Objetos `{ label, value }`**: muestra `label` al usuario y
            almacena `value` (ej. `[{ "label": "Persona", "value": "person"
            }]`).

            Si se usa el formato de objetos con `depends_on_value`, los valores
            deben coincidir con `value`, no con `label`.
          example:
            - opcion1
            - opcion2
            - opcion3
        ui_columns:
          type: object
          description: >
            Objeto que define las columnas de la tabla.

            Cada propiedad del objeto es una columna y debe tener un objeto con
            las propiedades:

            - ui_type: Tipo de campo

            - ui_label: Etiqueta de la columna

            - ui_required: Indica si la columna es obligatoria.

            - ui_items: Array de opciones disponibles para campos de tipo
            select, multiselect.
          example:
            nombre:
              ui_type: text
              ui_label: Nombre
              ui_required: true
            tipo_id:
              ui_type: select
              ui_label: Tipo ID
              ui_required: true
              ui_items:
                - RFC
                - CURP
      additionalProperties:
        oneOf:
          - $ref: '#/components/schemas/UISchemaField'
          - type: array
            items:
              type: string
          - type: string
          - type: boolean
      example:
        ui_order:
          - junta_directiva
          - nombre
          - apellido
          - notaria
        nombre:
          ui_type: text
          ui_label: Nombre
        apellido:
          ui_type: text
          ui_label: Apellido
        junta_directiva:
          ui_type: table
          ui_label: Integrantes miembros de la junta directiva
          ui_columns:
            id_type:
              ui_type: select
              ui_label: ID
              ui_items:
                - RFC
                - CURP
            id_number:
              ui_type: text
              ui_label: No. de identificación
            names:
              ui_type: text
              ui_label: Nombres y Apellidos
        notaria:
          ui_type: section
          ui_label: Notaria
          ui_order:
            - nombre
            - direccion
            - identidad
          nombre:
            ui_type: text
            ui_label: Nombre
          direccion:
            ui_type: text
            ui_label: Direccion
          identidad:
            ui_type: section
            ui_label: Identidad
            ui_order:
              - curp
              - rfc
            curp:
              ui_type: text
              ui_label: CURP
            rfc:
              ui_type: text
              ui_label: RFC
    PublicFormSchema:
      type: object
      description: Esquema de formulario público para la cuenta
      properties:
        id_schema:
          type: string
          description: Identificador único del esquema
          example: onboarding-form
        account_id:
          type: string
          description: ID de la cuenta a la que pertenece el esquema
          example: acc_1234567890abcdef
        name:
          type: string
          description: Nombre del esquema de formulario
          example: Formulario de Onboarding
        ui_schema_definition:
          $ref: '#/components/schemas/UISchemaField'
      required:
        - id_schema
        - account_id
        - name
        - ui_schema_definition
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Descripción breve y accionable del error
        code:
          oneOf:
            - type: string
              enum:
                - VALIDATION_ERROR
                - BAD_REQUEST
                - UNAUTHORIZED
                - FORBIDDEN
                - NOT_FOUND
                - CONFLICT
                - DUPLICATE_RESOURCE
                - INTERNAL_SERVER_ERROR
            - type: string
              description: Código de dominio específico (p.ej., items_not_provided)
          example: VALIDATION_ERROR
        timestamp:
          type: string
          format: date-time
          example: '2025-01-01T12:34:56.000Z'
  responses:
    BadRequestError:
      description: Datos de entrada inválidos
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            ValidationError:
              summary: Error de validación
              value:
                success: false
                message: 'Validation failed: ''items'' is required'
                code: VALIDATION_ERROR
                timestamp: '2025-01-01T12:34:56.000Z'
            ItemsNotProvided:
              summary: items_not_provided
              value:
                success: false
                message: >-
                  Please provide a valid items array or a flow id in your
                  request
                code: items_not_provided
                timestamp: '2025-01-01T12:34:56.000Z'
            InvalidItemType:
              summary: invalid_item_type
              value:
                success: false
                message: The generic item type is not supported
                code: invalid_item_type
                timestamp: '2025-01-01T12:34:56.000Z'
            InvalidItemOptionsFileUrl:
              summary: invalid_item_options_file_url
              value:
                success: false
                message: >-
                  The specified file_url is invalid. Ensure it is public and
                  downloadable.
                code: invalid_item_options_file_url
                timestamp: '2025-01-01T12:34:56.000Z'
    UnauthorizedError:
      description: No autorizado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            Unauthorized:
              summary: Falta API key o inválida
              value:
                success: false
                message: Unauthorized
                code: UNAUTHORIZED
                timestamp: '2025-01-01T12:34:56.000Z'
    NotFoundError:
      description: Recurso no encontrado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            NotFound:
              summary: Recurso inexistente
              value:
                success: false
                message: Entity not found
                code: NOT_FOUND
                timestamp: '2025-01-01T12:34:56.000Z'
    InternalServerError:
      description: Error interno del servidor
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            ServerError:
              summary: Error inesperado
              value:
                success: false
                message: Internal server error
                code: INTERNAL_SERVER_ERROR
                timestamp: '2025-01-01T12:34:56.000Z'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````