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

# Actualizar un sello de organización

> Actualiza el nombre, el nombre visible, la imagen o el estado predeterminado de un sello. Las actualizaciones que cambian la imagen crean una nueva versión (reemplazo). Los sellos de ámbito de empresa requieren una clave API protegida para las mutaciones.



## OpenAPI

````yaml api-reference/v01.37.00/openapi-v01.37.00.es.json patch /seals/{id}
openapi: 3.0.3
info:
  title: API de Socios de Firma
  description: >-
    API RESTful para firma de documentos y gestión de plantillas.


    **Autenticación**: Todos los endpoints requieren autenticación mediante
    clave API a través del encabezado `Authorization`. Usa tu clave API
    directamente sin ningún prefijo (por ejemplo, `your-api-key`). El prefijo
    Bearer es opcional pero no obligatorio.


    **Características de Seguridad**:

    - Validación de entrada usando esquemas Zod con mensajes de error detallados
    a nivel de campo

    - Tokens JWT firmados con RSA-256 para el acceso al Editor de Plantillas
    incrustado


    **Límite de Solicitudes**: Los límites de solicitudes están escalonados
    según el tipo de operación:

    - Operaciones de lectura (GET): 200 solicitudes por minuto

    - Operaciones de escritura (POST/PUT/PATCH/DELETE): 120 solicitudes por
    minuto

    - Operaciones CRUD de webhooks: 60 solicitudes por minuto

    - Prueba de webhook: 10 solicitudes por minuto

    - Regeneración/expiración de clave API: 1 solicitud por minuto

    - Rotación de secreto de webhook: 1 solicitud por minuto


    Cuando se superan los límites de solicitudes, la API devuelve una respuesta
    `429 Too Many Requests` con los encabezados:

    - `X-RateLimit-Limit`: Máximo de solicitudes por minuto para este endpoint

    - `X-RateLimit-Remaining`: Solicitudes restantes en la ventana actual

    - `X-RateLimit-Reset`: Marca de tiempo Unix de cuándo se restablece el
    límite

    - `Retry-After`: Segundos hasta que se permita reintentar


    **Manejo de Errores**: Todos los errores devuelven respuestas JSON
    estructuradas con `error` (mensaje legible para humanos), `code`
    (identificador legible por máquina) y `details` (errores de validación a
    nivel de campo cuando corresponda).


    **Integración del Editor de Plantillas Incrustado**: El Editor de Plantillas
    de Firma se puede incrustar en tu aplicación usando una biblioteca
    JavaScript independiente.


    ```html

    <!-- Carga la biblioteca del Editor de Plantillas de Firma -->

    <script
    src="https://api.firma.dev/functions/v1/embed-proxy/template-editor.js"></script>


    <script>

    // Genera el token JWT vía API primero

    fetch('https://api.firma.dev/functions/v1/signing-request-api/generate-template-token',
    {
      method: 'POST',
      headers: {
        'Authorization': 'YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        companies_workspaces_templates_id: 'template-id'
      })
    })

    .then(res => res.json())

    .then(data => {
      // Inicializa el editor con el token JWT
      window.FirmaTemplateEditor.init({
        container: '#firma-editor-container',
        jwt: data.token,
        templateId: 'template-id',
        theme: 'dark',
        readOnly: false,
        onSave: (savedData) => {
          console.log('Template saved:', savedData);
        },
        onError: (error) => {
          console.error('Editor error:', error);
        },
        onLoad: (template) => {
          console.log('Template loaded:', template);
        }
      });
    });

    </script>

    ```


    **Encabezado X-Firma-Deprecation**: Algunas operaciones de creación de
    sellos y de actualización de imagen devuelven un encabezado de respuesta
    `X-Firma-Deprecation` cuando se invocan a través del edge gateway, indicando
    que la operación debe realizarse en el host principal de la API.
  version: 01.37.00
  contact:
    name: API Support
    url: https://firma.com/support
servers:
  - url: https://api.firma.dev/functions/v1/signing-request-api
    description: API de Producción - Recomendada (Actual)
  - url: https://api.firma.dev/api/v1
    description: API de Producción - Planeada
security:
  - ApiKeyAuth: []
tags:
  - name: Company
    description: Información y configuración de la empresa
  - name: Workspaces
    description: Operaciones de gestión de espacios de trabajo
  - name: Templates
    description: Operaciones de gestión de plantillas
  - name: Signing Requests
    description: Operaciones de solicitudes de firma de documentos
  - name: Custom Fields
    description: >-
      Gestión de definiciones de campos personalizados para espacios de trabajo,
      plantillas y solicitudes de firma
  - name: Webhooks
    description: Configuración y gestión de webhooks
  - name: JWT Management
    description: Generación y revocación de tokens JWT para plantillas incrustadas
  - name: Workspace Settings
    description: Configuración y ajustes del espacio de trabajo
  - name: Email Domains
    description: >-
      Configuración y verificación de dominios de correo electrónico para enviar
      correos de solicitudes de firma desde dominios personalizados
  - name: Email Templates
    description: >-
      Gestión de plantillas de correo electrónico para personalización de
      notificaciones de solicitudes de firma a nivel de espacio de trabajo y de
      empresa
  - name: Organization Seals
    description: >-
      Gestión de sellos de organización: crear, actualizar, revocar y borrar
      sellos aplicados a solicitudes de firma
  - name: Signer Terms
    description: >-
      Términos de servicio / declaraciones de consentimiento personalizadas del
      firmante, a nivel de empresa con anulaciones por espacio de trabajo según
      el idioma
paths:
  /seals/{id}:
    patch:
      tags:
        - Organization Seals
      summary: Actualizar un sello de organización
      description: >-
        Actualiza el nombre, el nombre visible, la imagen o el estado
        predeterminado de un sello. Las actualizaciones que cambian la imagen
        crean una nueva versión (reemplazo). Los sellos de ámbito de empresa
        requieren una clave API protegida para las mutaciones.
      operationId: updateOrganizationSeal
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID del sello
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  maxLength: 120
                  description: Nuevo nombre interno
                display_name:
                  type: string
                  maxLength: 200
                  description: Nuevo nombre visible (vuelve a renderizar la imagen)
                signatory_title:
                  type: string
                  maxLength: 200
                  nullable: true
                  description: Nuevo cargo del firmante
                image:
                  type: string
                  description: Nuevo URI de datos PNG en base64
                typed:
                  type: object
                  properties:
                    text:
                      type: string
                    style:
                      type: string
                statement:
                  $ref: '#/components/schemas/SealStatement'
                is_default:
                  type: boolean
                  description: Establecer como sello predeterminado de su ámbito
      responses:
        '200':
          description: Sello actualizado exitosamente
          headers:
            X-Firma-Deprecation:
              schema:
                type: string
              description: >-
                Presente cuando la operación está disponible pero se trasladará
                al host principal de la API en una versión futura. El valor
                describe el calendario.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationSeal'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '409':
          description: >-
            Conflicto. Códigos posibles: SEAL_ALREADY_REVOKED,
            SEAL_ORDER_COLLISION, SEAL_ERASE_NOT_ELIGIBLE
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    $ref: '#/components/schemas/SealErrorCode'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '503':
          description: >-
            El procesamiento de imágenes de sello no está disponible en este
            host (SEAL_CREATION_DISABLED_EDGE). Reintenta contra el host
            principal de la API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    SealStatement:
      type: object
      required:
        - language
        - signatory_name
        - text
        - accepted
      description: Declaración de atestación que afirma la autoridad para aplicar el sello.
      properties:
        language:
          type: string
          description: Código de idioma de la declaración
        signatory_name:
          type: string
          maxLength: 200
          description: Nombre de la persona que atestigua
        signatory_title:
          type: string
          maxLength: 200
          nullable: true
          description: Cargo de la persona que atestigua
        text:
          type: string
          description: Texto completo de la declaración de atestación
        accepted:
          type: boolean
          description: Debe ser true para confirmar la aceptación
        version:
          type: integer
          minimum: 1
          description: Número de versión de la declaración
    OrganizationSeal:
      type: object
      description: >-
        Metadatos del sello de organización (los datos internos de la imagen y
        la declaración se omiten en las respuestas de listado y consulta).
      properties:
        id:
          type: string
          format: uuid
        lineage_id:
          type: string
          format: uuid
          description: Compartido entre las versiones del mismo sello
        version:
          type: integer
          minimum: 1
        companies_id:
          type: string
          format: uuid
        companies_workspaces_id:
          type: string
          format: uuid
          nullable: true
          description: Null para sellos de ámbito de empresa
        name:
          type: string
          maxLength: 120
        display_name:
          type: string
          maxLength: 200
        signatory_title:
          type: string
          maxLength: 200
          nullable: true
        kind:
          type: string
          enum:
            - uploaded
            - typed
            - drawn
        is_default:
          type: integer
          enum:
            - 0
            - 1
          description: 1 si es el sello predeterminado de su ámbito
        statement_language:
          type: string
        statement_version:
          type: integer
          minimum: 1
        signatory_name:
          type: string
          maxLength: 200
        signatory_title_attested:
          type: string
          maxLength: 200
          nullable: true
        attested_at:
          type: string
          format: date-time
        revoked_on:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
        deleted:
          type: integer
          enum:
            - 0
            - 1
    SealErrorCode:
      type: string
      enum:
        - SEALS_DISABLED
        - SEAL_ALREADY_REVOKED
        - SEAL_CREATION_DISABLED_EDGE
        - SEAL_ERASE_NOT_ELIGIBLE
        - SEAL_IMAGE_INVALID
        - SEAL_MUTATION_NOT_ALLOWED
        - SEAL_NOT_FOUND
        - SEAL_ORDER_COLLISION
        - SEAL_PAUSED
        - SEAL_SCOPE_FORBIDDEN
        - SEAL_UNAVAILABLE
      description: >-
        Códigos de error específicos de las operaciones de sellos de
        organización.
    Error:
      type: object
      properties:
        error:
          type: string
          description: Mensaje de error legible para humanos
        code:
          type: string
          description: >-
            Código de error legible por máquina. Códigos relacionados con
            sellos: SEALS_DISABLED, SEAL_ALREADY_REVOKED,
            SEAL_CREATION_DISABLED_EDGE, SEAL_ERASE_NOT_ELIGIBLE,
            SEAL_IMAGE_INVALID, SEAL_MUTATION_NOT_ALLOWED, SEAL_NOT_FOUND,
            SEAL_ORDER_COLLISION, SEAL_PAUSED, SEAL_SCOPE_FORBIDDEN,
            SEAL_UNAVAILABLE
        errors:
          type: array
          description: >-
            Todos los errores de validación cuando se notifican varios fallos a
            la vez. El error de nivel superior repite el primer elemento por
            compatibilidad con versiones anteriores.
          items:
            type: object
            required:
              - message
            properties:
              message:
                type: string
        message:
          type: string
          description: Descripción detallada del error
        details:
          type: object
          description: Detalles adicionales del error
          additionalProperties: true
      required:
        - error
      description: >-


        Códigos de error de sellos de organización: SEALS_DISABLED,
        SEAL_ALREADY_REVOKED, SEAL_CREATION_DISABLED_EDGE,
        SEAL_ERASE_NOT_ELIGIBLE, SEAL_IMAGE_INVALID, SEAL_MUTATION_NOT_ALLOWED,
        SEAL_NOT_FOUND, SEAL_ORDER_COLLISION, SEAL_PAUSED, SEAL_SCOPE_FORBIDDEN,
        SEAL_UNAVAILABLE
  responses:
    ValidationError:
      description: Solicitud Incorrecta - La validación falló
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Validation Error
            message: Invalid input data
            details:
              name: Name is required
              email: Invalid email format
    UnauthorizedError:
      description: No Autorizado - Clave API inválida o faltante
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized
            message: Invalid API key
    ForbiddenError:
      description: Prohibido - Permisos insuficientes
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Forbidden
            message: You do not have permission to access this resource
    NotFoundError:
      description: No Encontrado - El recurso no existe
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Not Found
            message: The requested resource was not found
    RateLimitError:
      description: Demasiadas Solicitudes - Se superó el límite de solicitudes
      headers:
        X-RateLimit-Limit:
          schema:
            type: integer
          description: Número máximo de solicitudes por minuto
        X-RateLimit-Remaining:
          schema:
            type: integer
          description: Solicitudes restantes
        X-RateLimit-Reset:
          schema:
            type: integer
          description: Marca de tiempo Unix del reinicio
        Retry-After:
          schema:
            type: integer
          description: Segundos hasta que se permita reintentar
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate Limit Exceeded
            message: Too many requests. Please wait before retrying.
            details:
              retry_after: 45
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Clave API para autenticación. Usa tu clave API directamente sin ningún
        prefijo (por ejemplo, 'your-api-key'). El prefijo Bearer es opcional
        pero no obligatorio.

````