La API REST de Oracle Fusion (ERP, SCM, HCM) es la forma más directa de leer y escribir datos desde otros sistemas. Pero si la consumes sin parámetros, recibes respuestas enormes, lentas y solo los primeros 25 registros. Estos son los parámetros que uso en cada integración.
La estructura de la URL
https://<instancia>.fa.<region>.oraclecloud.com/fscmRestApi/resources/11.13.18.05/<recurso>
Por ejemplo, salesOrdersForOrderHub, invoices, suppliers, items… La documentación de Oracle lista los recursos por módulo. La autenticación más común en integraciones es básica sobre HTTPS con un usuario de integración, o OAuth.
onlyData=true: quita el ruido
Por defecto cada registro trae una lista de links (enlaces a sí mismo, a sus hijos, a listas de valores). En respuestas grandes eso es la mitad del peso:
GET .../suppliers?onlyData=true
fields: solo las columnas que usas
GET .../suppliers?onlyData=true&fields=SupplierId,Supplier,SupplierNumber,TaxpayerId
Menos datos, respuestas más rápidas y menos riesgo de exponer información que no necesitas.
q: filtra en el servidor
GET .../invoices?q=InvoiceDate>='2026-10-01';InvoiceAmount>10000&onlyData=true
- Las condiciones se separan con
;(equivale a AND). - Los textos van entre comillas simples:
q=Supplier='ACME SA DE CV'. - Recuerda codificar la URL (espacios, comillas,
>).
Para búsquedas predefinidas, algunos recursos ofrecen finder, por ejemplo ?finder=PrimaryKey;SupplierId=123.
limit, offset y hasMore: paginación
Por defecto recibes 25 registros. Pide más con limit (hasta el máximo que permita el recurso, normalmente 500) y avanza con offset:
async function traerTodo(url, headers) {
const todos = [];
let offset = 0;
const limit = 500;
for (;;) {
const r = await fetch(`${url}&limit=${limit}&offset=${offset}`, { headers });
if (!r.ok) throw new Error(`${r.status} ${await r.text()}`);
const { items, hasMore } = await r.json();
todos.push(...items);
if (!hasMore) return todos;
offset += limit;
}
}
La respuesta trae hasMore para saber si hay más páginas. Si además necesitas el total, agrega totalResults=true (hace la consulta un poco más cara, úsalo solo si lo necesitas).
expand: traer hijos en la misma llamada
Una orden de venta con sus líneas, sin hacer una llamada por línea:
GET .../salesOrdersForOrderHub?q=OrderNumber='1045'&expand=lines&onlyData=true
Úsalo con cuidado: expandir varios niveles en muchos registros genera respuestas gigantes.
orderBy: orden estable para paginar
Si paginas sobre datos que cambian, ordena por una columna estable (por ejemplo, la llave primaria o la fecha de creación) para no saltarte ni repetir registros:
?orderBy=CreationDate:asc
Errores comunes
| Síntoma | Causa probable |
|---|---|
| Solo llegan 25 registros | Falta limit / paginación |
| 400 al filtrar | Comillas, codificación o nombre de atributo incorrecto (distingue mayúsculas) |
| 401 / 403 | Usuario sin el rol que da acceso a ese recurso |
| Respuestas lentas | Sin fields, sin onlyData o expand innecesario |
| Registros repetidos al paginar | Sin orderBy estable |
¿Tienes una integración con Oracle Fusion lenta o incompleta? Te ayudo a revisarla.