Crear empresa
Registra un nuevo RUC emisor en la cuenta. El plan y el entorno se pueden cambiar luego.
Autenticación: token Bearer de cuenta (empresas:manage).
Consideraciones
- Si el RUC ya está registrado en otra cuenta, responde
409: reenvía con"confirm": truepara reclamarlo. - Crea la empresa en el entorno que indiques; recomendado empezar en demo (
01) y pasar a producción cuando esté probada. - La respuesta incluye el token de firma de la empresa (ability
cpe:sign) ya generado, listo para emitir en/v1/cpe. Se muestra una sola vez: guárdalo. - También devuelve las credenciales de login (
usuario/password), por si tu integración obtiene el token conPOST /api/auth/cpe/tokenen vez de usar el token directo. Elige el estilo que ya uses.
Headers
| Name | Type | Description |
|---|---|---|
| Accept | string | application/json |
| Content-Type | string | application/json |
| Authorization | string | Bearer <token>. Genéralo desde tu panel, en Tokens de API. |
Body
| Name | Type | Description |
|---|---|---|
| ruc* | string | RUC de 11 dígitos. |
| business_name* | string | Razón social del emisor. |
| plan_type* | string | 01 por firma · 02 por certificado. |
| environment* | string | 01 demo · 02 producción. |
| confirm | boolean | Envíalo en true para reclamar un RUC registrado en otra cuenta (tras un 409). |
Ejemplo de solicitud
Copiar
curl -X POST https://api.xmlperu.dev/v1/companies \
-H "Authorization: Bearer $TOKEN_CUENTA" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"ruc": "20123456789",
"business_name": "MI EMPRESA SAC",
"plan_type": "01",
"environment": "01",
"confirm": false
}'Copiar
<?php
$token_cuenta = 'pega-aqui-tu-token';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xmlperu.dev/v1/companies');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token_cuenta,
'Accept: application/json',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, <<<JSON
{
"ruc": "20123456789",
"business_name": "MI EMPRESA SAC",
"plan_type": "01",
"environment": "01",
"confirm": false
}
JSON);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);Copiar
const TOKEN_CUENTA = 'pega-aqui-tu-token';
const res = await fetch('https://api.xmlperu.dev/v1/companies', {
method: 'POST',
headers: {
Authorization: `Bearer ${TOKEN_CUENTA}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"ruc": "20123456789",
"business_name": "MI EMPRESA SAC",
"plan_type": "01",
"environment": "01",
"confirm": false
}),
});
const data = await res.json();Copiar
import requests
TOKEN_CUENTA = "pega-aqui-tu-token"
headers = {
"Authorization": f"Bearer {TOKEN_CUENTA}",
"Accept": "application/json",
}
payload = {
"ruc": "20123456789",
"business_name": "MI EMPRESA SAC",
"plan_type": "01",
"environment": "01",
"confirm": false
}
res = requests.post("https://api.xmlperu.dev/v1/companies", json=payload, headers=headers)
data = res.json()Respuesta
201 Creadaapplication/json
{
"success": true,
"message": "Empresa registrada.",
"data": {
"company": {
"ruc": "20123456789",
"business_name": "MI EMPRESA SAC",
"plan_type": "01",
"environment": "01",
"environment_name": "demo",
"sending": "automatic",
"receipts": "individual",
"response": "wait",
"is_active": true,
"created_at": "2026-07-27T10:00:00-05:00"
},
"token": {
"ability": "cpe:sign",
"plain_text_token": "3|9pW51RgVhQ7LUR0yyHNOo6GCfgBL4kAsEHPxb1QW…",
"note": "Guárdalo ahora: no se vuelve a mostrar. Úsalo como Bearer (token de empresa) para emitir en /v1/cpe."
},
"credentials": {
"username": "a1b2c3d4",
"password": "e5f6g7h8"
}
}
}409 RUC en otra cuentaapplication/json
Reenvía la misma petición con
"confirm": true para reclamarlo.{
"success": false,
"message": "El RUC ya está registrado en otra cuenta. Confirme para reasignarlo."
}422 Datos inválidosapplication/json
{
"success": false,
"message": "The ruc field must be 11 characters.",
"errors": {
"ruc": ["The ruc field must be 11 characters."]
}
}