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

# Actualizar empresa

> Actualiza los datos editables de una empresa (emisor) de la cuenta. Todos los campos son opcionales: lo que no se envía no cambia, y un cuerpo vacío responde 200 sin modificar nada. El RFC no es editable — enviarlo responde 422; para cambiarlo, desactiva la empresa y crea una nueva. Los cambios aplican a los CFDI que se timbren a partir de ese momento, nunca a los ya emitidos. Sólo actualiza empresas de la cuenta autenticada: el id de una empresa de otra cuenta responde 404, igual que un id inexistente.



## OpenAPI

````yaml /openapi.json patch /empresas/{id}
openapi: 3.1.0
info:
  description: API de timbrado CFDI 4.0 de Palenca.
  title: Ipsofactura API
  version: v1
servers:
  - description: Producción
    url: https://api.ipsofactura.com
  - description: Sandbox (pruebas, sin validez fiscal)
    url: https://sandbox.api.ipsofactura.com
security:
  - apiKeyAuth: []
tags:
  - description: Timbrado, complemento de pago, cancelación y descarga de CFDIs.
    name: CFDI
  - description: Alta y consulta de empresas emisoras.
    name: Empresas
  - description: Administración del Certificado de Sello Digital (CSD).
    name: Certificados
  - description: >-
      Suscripciones de webhooks: notificaciones de timbrado, cancelación y
      pagos.
    name: Webhooks
paths:
  /empresas/{id}:
    patch:
      tags:
        - Empresas
      summary: Actualizar empresa
      description: >-
        Actualiza los datos editables de una empresa (emisor) de la cuenta.
        Todos los campos son opcionales: lo que no se envía no cambia, y un
        cuerpo vacío responde 200 sin modificar nada. El RFC no es editable —
        enviarlo responde 422; para cambiarlo, desactiva la empresa y crea una
        nueva. Los cambios aplican a los CFDI que se timbren a partir de ese
        momento, nunca a los ya emitidos. Sólo actualiza empresas de la cuenta
        autenticada: el id de una empresa de otra cuenta responde 404, igual que
        un id inexistente.
      operationId: patch
      parameters:
        - description: Id de la empresa
          example: a1b2c3d4-1234-4abc-8def-1234567890ab
          in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            example:
              codigo_postal: '11000'
              nombre_fiscal: ESCUELA KEMPER URGATE SA DE CV
              regimen_fiscal: '626'
            schema:
              $ref: '#/components/schemas/PatchEmpresaRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              example:
                codigo_postal: '11000'
                curp: null
                es_activo: true
                fecha_actualizacion: '2026-09-02T09:30:00Z'
                fecha_creacion: '2026-08-28T12:00:00Z'
                id: a1b2c3d4-1234-4abc-8def-1234567890ab
                nombre_empresa: Escuela Kemper Urgate
                nombre_fiscal: ESCUELA KEMPER URGATE SA DE CV
                regimen_fiscal: '626'
                rfc: EKU9003173C9
                tipo_persona: moral
              schema:
                $ref: '#/components/schemas/EmpresaDetailResponse'
          description: Empresa actualizada
        '400':
          content:
            application/json:
              example:
                code: VALIDATION_ERROR
                message: 'Régimen fiscal no válido: 999'
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Régimen fiscal, código postal o nombre fiscal inválidos
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: >-
            API key faltante o inválida (AUTHENTICATION_REQUIRED /
            INVALID_API_KEY)
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: >-
            La cuenta está suspendida (ACCOUNT_SUSPENDED). Un recurso de otra
            cuenta NO responde 403: responde 404, igual que uno que no existe.
        '404':
          content:
            application/json:
              example:
                code: EMPRESA_NOT_FOUND
                message: La empresa no existe
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: La empresa no existe en la cuenta
        '422':
          content:
            application/json:
              example:
                code: EMPRESA_RFC_IMMUTABLE
                message: >-
                  El RFC de una empresa no se puede modificar. Desactiva la
                  empresa y crea una nueva con el RFC correcto
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: El cuerpo incluye rfc, que no es editable
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: >-
            Límite de requests por minuto excedido (RATE_LIMIT_EXCEEDED). Ver
            headers X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
            y Retry-After.
components:
  schemas:
    PatchEmpresaRequest:
      description: >-
        Campos editables de una empresa. Todos opcionales: lo que no se envía no
        cambia.
      properties:
        codigo_postal:
          example: '06000'
          pattern: ^[0-9]{5}$
          type: string
        curp:
          example: HEGG560427MVZRSL05
          type: string
        nombre_empresa:
          example: Escuela Kemper Urgate
          type: string
        nombre_fiscal:
          example: ESCUELA KEMPER URGATE
          type: string
        regimen_fiscal:
          description: Clave del catálogo SAT c_RegimenFiscal
          enum:
            - '601'
            - '603'
            - '605'
            - '606'
            - '607'
            - '608'
            - '609'
            - '610'
            - '611'
            - '612'
            - '614'
            - '615'
            - '616'
            - '620'
            - '621'
            - '622'
            - '623'
            - '624'
            - '625'
            - '626'
            - '628'
            - '629'
            - '630'
          example: 626
          type: string
        rfc:
          description: No editable. Enviarlo responde 422 EMPRESA_RFC_IMMUTABLE.
          example: EKU9003173C9
          type: string
      type: object
    EmpresaDetailResponse:
      properties:
        certificados:
          description: >-
            Sólo presente con include_certificados=true. Lista vacía si el
            emisor no tiene CSD activo.
          items:
            $ref: '#/components/schemas/CertificadoItemResponse'
          type: array
        codigo_postal:
          example: '06000'
          type: string
        curp:
          description: CURP del emisor. Siempre null para personas morales.
          example: null
          type: string
        es_activo:
          example: true
          type: boolean
        fecha_actualizacion:
          example: '2026-08-28T12:00:00Z'
          type: string
        fecha_creacion:
          example: '2026-08-28T12:00:00Z'
          type: string
        id:
          example: a1b2c3d4-1234-4abc-8def-1234567890ab
          format: uuid
          type: string
        nombre_empresa:
          example: Escuela Kemper Urgate
          type: string
        nombre_fiscal:
          example: ESCUELA KEMPER URGATE
          type: string
        regimen_fiscal:
          enum:
            - '601'
            - '603'
            - '605'
            - '606'
            - '607'
            - '608'
            - '609'
            - '610'
            - '611'
            - '612'
            - '614'
            - '615'
            - '616'
            - '620'
            - '621'
            - '622'
            - '623'
            - '624'
            - '625'
            - '626'
            - '628'
            - '629'
            - '630'
          example: 601
          type: string
        rfc:
          example: EKU9003173C9
          type: string
        tipo_persona:
          enum:
            - fisica
            - moral
          example: moral
          type: string
      type: object
    ErrorResponse:
      properties:
        code:
          description: >-
            Código de error de ipsofactura. Estable y cerrado (catálogo
            ErrorCode), pero deliberadamente grueso: TODO rechazo de validación
            del SAT llega como VALIDATION_ERROR. Úsalo para decidir el flujo
            general (reintentar, autenticar de nuevo, corregir el comprobante).
          example: VALIDATION_ERROR
          type: string
        id:
          type: string
        idempotencyKey:
          type: string
        message:
          description: >-
            Descripción legible del error, en texto libre. NO la parsees: cuando
            el rechazo viene del SAT, este texto lo redacta el PAC, cambia entre
            proveedores y puede cambiar sin previo aviso. Para ramificar por
            regla del SAT usa sat_code; para ramificar por tipo de error usa
            code. El mensaje es para mostrarlo o registrarlo.
          example: >-
            CFDI40147: El RFC del receptor no se encuentra en la lista de
            contribuyentes inscritos no cancelados del SAT
          type: string
        retryAfter:
          format: int32
          type: integer
        sat_code:
          description: >-
            Código de validación del SAT (CFDIxxxxx) del rechazo. Presente SÓLO
            cuando el comprobante fue rechazado por el SAT a través de un PAC;
            ausente en errores propios de ipsofactura (validación local,
            autenticación, rate limit, servicio no disponible). Es específico
            donde `code` es genérico: `code` te dice que hubo un rechazo de
            validación, `sat_code` te dice cuál regla se incumplió. También se
            omite si el PAC no devolvió ningún código: nunca se inventa uno.
          example: CFDI40147
          type: string
    CertificadoItemResponse:
      properties:
        estado:
          type: string
        fecha_creacion:
          type: string
        fecha_fin:
          type: string
        id:
          format: uuid
          type: string
        numero_certificado:
          type: string
      type: object
  securitySchemes:
    apiKeyAuth:
      description: API key emitida por Ipsofactura, enviada en el header x-api.
      in: header
      name: x-api
      type: apiKey

````