Árbol del API · Pedidos › createOrder
Crear una orden de venta
createOrder
Tipo
Mutation
Devuelve
Permiso de la llave
Creacion de Orden de Venta
Reintentos
Seguros con idempotencyKey
Registra una orden de venta nueva con sus partidas. La orden queda registrada (REGISTERED), sin confirmar y sin apartar inventario.
La orden se registra a nombre del usuario de input.userId y con el precio
vigente de cada artículo. Envía en expectedUnitPrice el precio que te dio
quoteOrder: si cambió, la orden no se
guarda y recibes CONFLICT en esa partida. Una partida con precio manual
(unitPrice) no se compara.
Revisa siempre createOrder.errors y también errors de la respuesta: un
error puede llegar en cualquiera de los dos y, con errores, order llega
null. Las advertencias (warnings) de una orden creada no la invalidan.
Reintentos seguros
Si la conexión se corta y no sabes si la orden se creó, repite la petición
con la misma idempotencyKey y los mismos datos: recibes la orden que ya
se creó, sin duplicarla. La respuesta muestra la orden como está en ese
momento, no una copia de la primera respuesta. La clave se recuerda alrededor
de 30 días. Una clave repetida con datos distintos responde CONFLICT.
createOrder( input: OrderInput! idempotencyKey: String! ): CreateOrderPayload
Argumentos
2
| Argumento | Tipo | Descripción |
|---|---|---|
| Orden | ||
inputOrderInput! |
OrderInput! | Los datos de la orden y sus partidas (de 1 a 100). Ver |
| Reintentos | ||
idempotencyKeyString! |
String! | Clave única que generas por cada orden, por ejemplo un UUID o el folio de tu sistema. Si repites la petición con la misma clave y los mismos datos, recibes la orden que ya se creó en lugar de una nueva. Obligatorio. |
Lo que devuelve
CreateOrderPayload
Campos principales de CreateOrderPayload:
| Campo | Tipo | Descripción |
|---|---|---|
orderOrder |
Order | La orden creada; null si hubo errores. |
warnings[OrderWarning!] |
[OrderWarning!] | Advertencias de existencia y crédito de la orden creada. |
errors[FieldError!]! |
[FieldError!]! | Errores que impidieron crear la orden; vacía si se creó. |
Permisos
Llave API Integraciones
La llave ve los registros de toda la empresa del subdominio.
Sin el permiso HTTP 422
La respuesta es HTTP 422 con el cuerpo {"error": "invalid_graphql_request"}, sin data.
Errores
| Código | Cuándo ocurre | Qué hacer |
|---|---|---|
| HTTP 401 | Falta el header Authorization o la llave no existe en la empresa del subdominio. La respuesta no trae cuerpo. | Revisa la llave y el subdominio. No reintentes. |
| HTTP 422 | La llave no tiene «Creacion de Orden de Venta». La respuesta es HTTP 422 con el cuerpo {"error": "invalid_graphql_request"}, sin data. | La llave necesita ese permiso; reintentar no ayuda. |
VALIDATION | Un dato de la orden no es válido. Puede llegar en createOrder.errors (por ejemplo field: "lines[0].quantity") o en errors de la respuesta (por ejemplo, falta userId, la estructura de precios no es del cliente o hay más de 100 partidas). Revisa los dos. | Corrige el dato y vuelve a enviar con una clave nueva. |
CONFLICT | El precio de una partida ya no es el expectedUnitPrice que enviaste (field: lines[i].expectedUnitPrice), o la idempotencyKey ya se usó con otros datos. | Vuelve a cotizar con quoteOrder; para otros datos usa otra clave. |
NOT_FOUND | Un identificador del input no existe; field puede decir cuál. | Revisa los identificadores. |
INACTIVE | Un catálogo del input existe pero ya no se ofrece. | Pide opciones vigentes con orderDefaults. |
| HTTP 422 | Falla interna o dato rechazado al guardar. El cuerpo es {"error": …}, sin data. | Si no cambiaste nada, reintenta con la misma idempotencyKey. |
Los errores de la consulta llegan con HTTP 200 en errors, con su código en extensions.code. Revisa siempre errors, no sólo el estatus HTTP. Errores y reintentos.