This endpoint lets you create an order manually from your system. Use it when you need to capture sales that don't come from a connected channel, for example:
Phone sales — a customer calls and you take their order on the spot.
Counter sales without a connected POS.
Custom integrations with ERPs, proprietary marketplaces, or legacy systems.
Historical migrations from another platform (use orderCreated to preserve the original date).
If you need to load several orders at once, use POST /orders/import instead of calling this endpoint in a loop.
Orders from connected channels
If the order already exists on a connected channel (Shopify, Amazon, MercadoLibre…), don't create it manually. Fenicia syncs it automatically. Creating duplicate orders causes inventory inconsistencies.
Creates a new order in the authenticated tenant. The request body must be wrapped in the order property.
orderobjectrequired
Required envelope. The entire request body goes nested inside this property — the root schema is strict and doesn't accept properties outside of order.
The request body is not the order object directly — it must be nested inside an order property: { "order": { ... } }. The schema validator is strict (.strict()): any unknown property at the root of the JSON (outside of order) causes the request to be rejected with validation:invalid_input.
customerInfo accepts additional properties beyond the documented ones (it doesn't reject them), but only name is confirmed to be validated. Don't assume other fields inside customerInfo are validated or used.
{ "error": { "code": "validation:invalid_input", "message": "orders must be an array" } }
Required permission:orders:import
Per-order validation
Validation of each order in the batch is applied by the domain library, not by a per-item transport schema documented here. Test with a small batch on a development tenant first before running a mass import.
The body doesn't satisfy the schema — a required field is missing, a type doesn't match, or there's an unknown property at the root (outside of order).
auth:invalid_token
401
The API key is invalid or has been revoked.
auth:permission_denied
403
The API key doesn't have the orders:create scope (or orders:import for the batch).