Zafirox SDK
SDK 1.1.0 Cuentas Empezar

Órdenes

Crear pedidos con la política v2, cargar diseños autorizados y consultar órdenes mediante la lectura v1.

Estado de publicación

Las órdenes se crean con la API v2 y el SDK 2.x. El CDN publica el SDK 2.0.3 en los canales v2 y latest, con la política 1.0.5. POST /api/v1/client/orders responde 410 ORDER_CREATE_VERSION_RETIRED, así que no uses el antiguo orders.create() del SDK 1.x (canal v1, versión 1.1.0) para pedidos nuevos. GET /api/v1/client/orders y las demás lecturas v1 siguen disponibles.

Crear una orden con v2

POST /api/v2/client/orders · scope orders:create · cabecera Idempotency-Key obligatoria. La entrada es cerrada: solo se aceptan los campos del OpenAPI v2 y la política external-create-v2. El SDK actualizado incorpora policy_version y policy_sha256 automáticamente; una llamada HTTP directa debe tomarlos del OpenAPI publicado (info.x-order-policy-version y info.x-order-policy-sha256).

El cuerpo siguiente muestra la forma del contrato. Sustituye el SHA y la referencia de diseño por valores publicados o emitidos para tu actor: los marcadores no son valores válidos para enviar.

{
  "policy_version": "1.0.5",
  "policy_sha256": "<VALOR info.x-order-policy-sha256 DEL OPENAPI V2>",
  "initial_date": "2026-10-01",
  "delivery_date": "2026-10-15",
  "performed_by": "integracion-erp",
  "jewel": {
    "customer_id": "123456789",
    "customer": "Cliente Demo",
    "phone": "3000000000",
    "type": "Anillo",
    "material": "Plata",
    "invoice_name": "Cliente Demo",
    "details": "Grabado interior",
    "measurement_system": "Americana",
    "measurements": { "anillo": "7" },
    "weight": { "total": "0.8" },
    "design_refs": ["<REFERENCIA OPACA EMITIDA POR FILES>"]
  }
}

order_subject_uid es opcional y solo puede señalar a una persona dentro del alcance que el servidor resuelve para el token. No permite escoger un uid arbitrario ni cambiar de empresa. urgent_authorization_code es opcional y obligatorio si el plazo de entrega requiere autorización urgente. El cliente no envía precio, propietario, estado, URLs de diseño ni blobs de imagen en este JSON.

Diseños antes de crear

Primero envía 1–5 archivos al servicio autorizado POST /api/v2/client/order-designs como multipart/form-data con el campo files; se requiere el mismo scope orders:create. El servidor devuelve data.design_refs, referencias opacas emitidas y verificadas por Files. Usa de 1 a 5 de esas referencias en jewel.design_refs al crear. Un texto que imite su formato, una URL o una referencia emitida para otro actor/alcance no sirve. El SDK de pedidos no contiene un método de carga: usa HTTP autorizado para esa operación y entrega las referencias resultantes a client.orders.create() del SDK v2.

curl -sS -X POST https://datacenterv2.joyeriazafirox.com/api/v2/client/order-designs \
  -H "Authorization: Bearer $TOKEN" \
  -F "files=@diseno-1.png"
# Respuesta: {"data":{"design_refs":["odr1.…"]},"meta":{"api_version":"2"}}

Reglas de contenido

CampoRegla de la política 1.0.5
jewel.customer_id, jewel.customerObligatorios; hasta 128 unidades UTF-16 después de String.trim()
jewel.phoneObligatorio; hasta 20 unidades UTF-16
jewel.invoice_nameOpcional; puede ser vacío o null; hasta 128 unidades UTF-16 si tiene contenido
jewel.typeAnillo, Argollas, Dije u Otros; los estilos y materiales dependen del tipo
jewel.detailsHasta 100 unidades UTF-16 para Anillo y Argollas; hasta 250 para Dije y Otros
jewel.observations, textos de jewel.markingHasta 255 y 40 unidades UTF-16, respectivamente
jewel.weightCadenas decimales exactas de hasta 32 caracteres ("2" y "2.0" valen lo mismo), máximo 30 g; mínimo según tipo y modalidad: 0,3/0,8/1/2 g
jewel.measurements para OtrosOpcional. Puede omitirse o ser {}; si se informa una talla, solo se admite solitario y debe pertenecer al catálogo de measurement_system
jewel.stonesHasta 50; cantidad entera 1–999 (1 y 1.0 valen lo mismo); tipo y asignación del catálogo
jewel.design_refs1–5 referencias opacas certificadas
delivery_dateDía hábil del calendario del servidor en Bogotá; el plazo ordinario recomendado es 8 días hábiles y 1–2 requiere autorización urgente

Los límites de texto se miden tras String.trim() de ECMAScript y en unidades UTF-16. Las extensiones x-order-policy-* del OpenAPI 3.1 publican esa semántica; un validador JSON Schema genérico comprueba solo la forma y no reemplaza el ejecutor de políticas. Consulta el OpenAPI para todos los campos, catálogos y condiciones. Una recomendación de diseño no equivale a un rechazo de servidor.

Para una joya Otros, la medida no es obligatoria. Un ejemplo válido con talla opcional es "measurement_system": "Americana", "measurements": {"solitario": "6 (1/2)"}; también se puede omitir measurements. La talla 3 (1/4) es válida con "measurement_system": "Americana" y se rechaza con "measurement_system": "Nacional". Desde la política 1.0.5, el catálogo Nacional incluye las tallas 33 y 33 (1/2). Otras claves de medida, como anillo, se rechazan para Otros.

Respuesta e idempotencia

HTTPSignificado
201Creación nueva, data.replayed: false
200Replay íntegro de la misma clave y el mismo agregado, data.replayed: true
409 order_policy.versionVersión o SHA de política desconocidos
409 IDEMPOTENCY_CONFLICTLa clave se usó con otro contenido
409 CREATION_IN_PROGRESSUna creación previa sigue en curso; reintenta
422 order_policy.*Campo, catálogo, límite, fecha o referencia inválidos; consulta errors[0].field

El envelope v2 contiene data y meta.api_version: "2", meta.policy_version, meta.policy_sha256 y meta.request_id. Guarda el request_id para diagnóstico. Idempotency-Key debe tener 1–255 caracteres sin espacios ni caracteres de control; reutiliza la misma clave y el mismo cuerpo después de un timeout. El SDK genera una clave cuando no se proporciona y verifica que la respuesta ateste la misma política que compiló.

Listar órdenes

GET /api/v1/client/orders · scope orders:read · continúa en v1. El SDK actualizado conserva client.orders.list() sobre esta ruta.

ParámetroDetalle
cursorCursor opaco de la página anterior
limit1..100 (25 por defecto)
status, categoryEstado exacto y tipo de joya
searchTexto en serial o cliente (≤ 120)
start_date, end_dateVentana sobre fecha inicial, AAAA-MM-DD
subject_uidMiembro del alcance autorizado

Cada elemento conserva serial, subject_uid, status, customer, invoice_name, jewel_type, initial_date, delivery_date, price como cadena decimal, currency y performed_by. La paginación sigue meta.pagination.next_cursor; consulta paginación.