Editar
Autoadministra un catálogo con un override de la organización.
Descripcion general
Este endpoint escribe un override sobre un catálogo de plataforma, a nivel de toda la organización o acotado a una razón social. El override toma efecto de inmediato para cualquier catálogo, incluidas las tablas federales (UMA, ISR, IMSS). El identificador en la URL es el catalog_key del catálogo. Una solicitud exitosa devuelve 200 con la clave, el origen resultante y el effective_payload ya en vigor.
Endpoint
https://app.integranom.com/api/v1/platform-catalogs/{catalog_key}Path param: catalog_key — string, la clave del catálogo a autoadministrar (por ejemplo uma, isr_tariff, imss_worker_ramos).
Override a nivel organización
Omite legal_entity_number (o envíalo como null) para que el override aplique a toda la organización. El payload es el nuevo valor y se valida contra el shape del catálogo. Su estructura varía por catálogo: el ejemplo de abajo (scalar) es ilustrativo; la forma real depende del shape (scalar / range_table / keyed_table).
Para conocer la estructura exacta del payload, consulta primero effective_payload / platform_payload en el endpoint de detalle.
{
"payload": { "daily": "113.14", "monthly": "3439.46" }
}Override frequency-scoped y por razón social
Para un catálogo frequency_scoped (como isr_tariff) el campo frequency es requerido; en el resto de los catálogos se ignora. Con legal_entity_number limitas el override a esa razón social (el source regresa como "rs"); si lo omites, aplica a toda la organización.
El campo reason es opcional e informativo. Recuerda que el payload de este ejemplo es ilustrativo: su forma real depende del shape del catálogo.
Payload de isn_by_state
Para isn_by_state el payload es un objeto que va de la clave del estado a su valor, y cada valor es una cadena decimal (tasa plana) o un objeto con exactamente uno de rate o brackets, más los opcionales taxSurchargeRate, baseSurchargeRate y exemptMonthlyAmount, todos cadenas decimales. Los brackets llevan lowerLimit, upperLimit (null en el último), fixedFee y marginalRate. En la respuesta, effective_payload trae cada estado como una cadena decimal con su tasa base, y las definiciones con objeto vienen aparte en isn_definitions.
{
"payload": {
"SIN": {
"brackets": [
{ "lowerLimit": "0.01", "upperLimit": "500000.00", "fixedFee": "0.00", "marginalRate": "0.024" },
{ "lowerLimit": "500000.01", "upperLimit": null, "fixedFee": "12000.00", "marginalRate": "0.026" }
]
},
"CAM": { "rate": "0.03", "taxSurchargeRate": "0.33" },
"QUE": { "rate": "0.03", "exemptMonthlyAmount": "76617.76" },
"JAL": "0.03"
}
}El payload se rechaza con 400 cuando un estado trae rate y brackets a la vez o ninguno de los dos, cuando un valor no es una cadena decimal válida, cuando trae un campo que no existe, o cuando los rangos no son contiguos y ascendentes, se traslapan o dejan abierto un rango que no es el último. El cuerpo de la respuesta es { "message": "Invalid catalog payload for this catalog's shape.", "errors": { ... } }, con errors indexado por la clave del estado que falló.
Campos del cuerpo
| Campo | Tipo | Notas |
|---|---|---|
frequency | string | Requerido solo para catálogos frequency_scoped (por ejemplo isr_tariff). Se ignora en el resto. |
legal_entity_number | integer | null | Omitir o null = override a nivel de toda la organización. Un número lo limita a esa razón social. |
reason | string | Opcional e informativo. |
payload | object | El nuevo valor. Se valida contra el shape del catálogo; su estructura varía por catálogo. Consulta effective_payload / platform_payload en el detalle para conocer la forma exacta. |
Forma de la respuesta
200 OK — la clave del catálogo, el origen resultante y el valor efectivo ya en vigor:
{
"key": "uma",
"source": "org",
"frequency": null,
"legal_entity_number": null,
"effective_payload": { "daily": "113.14", "monthly": "3439.46" }
}Errores
| Status | Código | Causa |
|---|---|---|
400 | FREQUENCY_REQUIRED | Catálogo frequency-scoped sin frequency. |
400 | INVALID_PAYLOAD | El payload no cumple el shape del catálogo. El cuerpo de la respuesta trae errors con el detalle. |
400 | LEGAL_ENTITY_NOT_FOUND | La razón social indicada no existe en tu organización. |
400 | BELOW_MINIMUM | Un valor queda por debajo del mínimo del catálogo. En factor_dias_mes: 5 para semana, 12 para quincena, 28 para mes y 336 para anio. |
400 | ABOVE_MAXIMUM | Un valor queda por encima del máximo del catálogo. En factor_dias_mes, mes no puede pasar de 31. |
401 | - | API key ausente o inválida. |
404 | - | El catálogo con ese catalog_key no existe. |
Vocabulario de códigos de error
| Código | Significado |
|---|---|
FREQUENCY_REQUIRED | El catálogo es frequency-scoped y no incluiste frequency en el cuerpo. |
INVALID_PAYLOAD | El payload no cumple el shape del catálogo. Revisa errors en la respuesta para ver qué falló. |
LEGAL_ENTITY_NOT_FOUND | El legal_entity_number no corresponde a ninguna razón social de tu organización. |
BELOW_MINIMUM | Un valor del payload es menor al mínimo que permite el catálogo. |
ABOVE_MAXIMUM | Un valor del payload es mayor al máximo que permite el catálogo. |

