curl --request PATCH \
--url https://api.ipsofactura.com/empresas/{id} \
--header 'Content-Type: application/json' \
--header 'x-api: <api-key>' \
--data '
{
"codigo_postal": "11000",
"nombre_fiscal": "ESCUELA KEMPER URGATE SA DE CV",
"regimen_fiscal": "626"
}
'import requests
url = "https://api.ipsofactura.com/empresas/{id}"
payload = {
"codigo_postal": "11000",
"nombre_fiscal": "ESCUELA KEMPER URGATE SA DE CV",
"regimen_fiscal": "626"
}
headers = {
"x-api": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
codigo_postal: '11000',
nombre_fiscal: 'ESCUELA KEMPER URGATE SA DE CV',
regimen_fiscal: '626'
})
};
fetch('https://api.ipsofactura.com/empresas/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ipsofactura.com/empresas/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'codigo_postal' => '11000',
'nombre_fiscal' => 'ESCUELA KEMPER URGATE SA DE CV',
'regimen_fiscal' => '626'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ipsofactura.com/empresas/{id}"
payload := strings.NewReader("{\n \"codigo_postal\": \"11000\",\n \"nombre_fiscal\": \"ESCUELA KEMPER URGATE SA DE CV\",\n \"regimen_fiscal\": \"626\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.ipsofactura.com/empresas/{id}")
.header("x-api", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"codigo_postal\": \"11000\",\n \"nombre_fiscal\": \"ESCUELA KEMPER URGATE SA DE CV\",\n \"regimen_fiscal\": \"626\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ipsofactura.com/empresas/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"codigo_postal\": \"11000\",\n \"nombre_fiscal\": \"ESCUELA KEMPER URGATE SA DE CV\",\n \"regimen_fiscal\": \"626\"\n}"
response = http.request(request)
puts response.read_body{
"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"
}{
"code": "VALIDATION_ERROR",
"message": "Régimen fiscal no válido: 999"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "EMPRESA_NOT_FOUND",
"message": "La empresa no existe"
}{
"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"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}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.
curl --request PATCH \
--url https://api.ipsofactura.com/empresas/{id} \
--header 'Content-Type: application/json' \
--header 'x-api: <api-key>' \
--data '
{
"codigo_postal": "11000",
"nombre_fiscal": "ESCUELA KEMPER URGATE SA DE CV",
"regimen_fiscal": "626"
}
'import requests
url = "https://api.ipsofactura.com/empresas/{id}"
payload = {
"codigo_postal": "11000",
"nombre_fiscal": "ESCUELA KEMPER URGATE SA DE CV",
"regimen_fiscal": "626"
}
headers = {
"x-api": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
codigo_postal: '11000',
nombre_fiscal: 'ESCUELA KEMPER URGATE SA DE CV',
regimen_fiscal: '626'
})
};
fetch('https://api.ipsofactura.com/empresas/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ipsofactura.com/empresas/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'codigo_postal' => '11000',
'nombre_fiscal' => 'ESCUELA KEMPER URGATE SA DE CV',
'regimen_fiscal' => '626'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ipsofactura.com/empresas/{id}"
payload := strings.NewReader("{\n \"codigo_postal\": \"11000\",\n \"nombre_fiscal\": \"ESCUELA KEMPER URGATE SA DE CV\",\n \"regimen_fiscal\": \"626\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.ipsofactura.com/empresas/{id}")
.header("x-api", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"codigo_postal\": \"11000\",\n \"nombre_fiscal\": \"ESCUELA KEMPER URGATE SA DE CV\",\n \"regimen_fiscal\": \"626\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ipsofactura.com/empresas/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"codigo_postal\": \"11000\",\n \"nombre_fiscal\": \"ESCUELA KEMPER URGATE SA DE CV\",\n \"regimen_fiscal\": \"626\"\n}"
response = http.request(request)
puts response.read_body{
"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"
}{
"code": "VALIDATION_ERROR",
"message": "Régimen fiscal no válido: 999"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "EMPRESA_NOT_FOUND",
"message": "La empresa no existe"
}{
"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"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}Authorizations
API key emitida por Ipsofactura, enviada en el header x-api.
Path Parameters
Id de la empresa
Body
Campos editables de una empresa. Todos opcionales: lo que no se envía no cambia.
^[0-9]{5}$"06000"
"HEGG560427MVZRSL05"
"Escuela Kemper Urgate"
"ESCUELA KEMPER URGATE"
Clave del catálogo SAT c_RegimenFiscal
601, 603, 605, 606, 607, 608, 609, 610, 611, 612, 614, 615, 616, 620, 621, 622, 623, 624, 625, 626, 628, 629, 630 626
No editable. Enviarlo responde 422 EMPRESA_RFC_IMMUTABLE.
"EKU9003173C9"
Response
Empresa actualizada
Sólo presente con include_certificados=true. Lista vacía si el emisor no tiene CSD activo.
Show child attributes
Show child attributes
"06000"
CURP del emisor. Siempre null para personas morales.
null
true
"2026-08-28T12:00:00Z"
"2026-08-28T12:00:00Z"
"a1b2c3d4-1234-4abc-8def-1234567890ab"
"Escuela Kemper Urgate"
"ESCUELA KEMPER URGATE"
601, 603, 605, 606, 607, 608, 609, 610, 611, 612, 614, 615, 616, 620, 621, 622, 623, 624, 625, 626, 628, 629, 630 601
"EKU9003173C9"
fisica, moral "moral"