Create a sale
Admin or cashier. Prices the cart, freezes the branch rate, and writes the sale and stock. It is idempotent via the X-Idempotency-Key, so replaying a key returns the original sale.
POST
/api/v1/salesAuthorization
AuthorizationBearer token (JWT) · headerrequiredJWT from POST /api/v1/auth/login sent as Authorization Bearer.
Request body
requiredapplication/jsonitemsobject[]requiredmin items 1
Show propertiesHide properties
Array of
objectmedicine_idstringrequiredquantityintegerrequiredmin -9007199254740991 · max 9007199254740991
unit_pricenumber | stringrequiredbranch_idstringpayment_methodstringpayment_linesobject[] | nullShow propertiesHide properties
Any of:
object[]
Array of
objectmethodstringrequiredamountnumbernull
nullclient_mutation_idstringdevice_idstring | nullnotesstringcustomer_idstring | nullcustomer_namestringcoupon_codestring | nullglobal_discount_pctnumber | nullfx_rate_to_basenumber | string | nulltax_policyobjectShow propertiesHide properties
enabledbooleanrequiredstandard_ratenumberrequiredmedicine_categoriesobjectrequiredpatient_national_idstringdoctor_licensestringResponses
201
Sale created, or the original sale for a replayed idempotency key
idstringrequiredinvoice_numberstringrequireduuidstringrequiredicvintegerrequiredmin -9007199254740991 · max 9007199254740991
client_mutation_idstringrequiredbranch_idstringrequireduser_idstringrequiredsubtotal_amountstringrequiredvat_amountstringrequiredcoupon_discountstringrequiredglobal_discountstringrequiredtotal_amountstringrequiredcurrency_codestringrequiredfx_rate_to_basestringrequiredbase_currency_codestringrequiredbase_total_amountstringrequiredcoupon_idstring | nullrequiredcustomer_namestringrequiredvat_breakdownobject[]requiredShow propertiesHide properties
Array of
objectratenumberrequiredtaxable_amountnumberrequiredvat_amountnumberrequiredpayment_methodstringrequiredpayment_linesobject[] | nullrequiredShow propertiesHide properties
Any of:
object[]
Array of
objectmethodstringrequiredamountnumbernull
nullnotesstringrequiredsold_atstringrequireditemsobject[]requiredShow propertiesHide properties
Array of
objectidstringrequiredmedicine_idstringrequiredbatch_idstringrequiredquantityintegerrequiredmin -9007199254740991 · max 9007199254740991
unit_pricestringrequiredvat_ratestringrequiredvat_amountstringrequiredcost_at_salestringrequired400
The cart is empty, a payment method is unsupported, the discount is outside 0 to 100, a queued tax policy is stale, or the stock cannot cover the cart
detailstringrequired401
Not authenticated
detailstringrequired403
Access forbidden for this role
detailstringrequired404
Customer not found, coupon not found, or medicine not found
detailstringrequired409
A sale with this idempotency key is still processing, so the same key has to be retried later
detailstringrequired