API reference · Schema
CommandResult
CommandResultcontract command-result
- typestringrequiredpattern ^[a-z][a-z_]*(\.[a-z][a-z_]*)+\.v[1-9][0-9]*$
Used by
- post/v1/storefront/orders/{id}:cancelstorefront.order.cancel.v1 — inside the outlet's cancel window
- post/v1/storefront/orders/{id}:reschedulestorefront.order.reschedule.v1 — inside the outlet's reschedule window; deals re-priced (deal_rejudged carries old/new totals in `params`)
- post/v1/account:linkcustomers.account.link.v1 — first sign-in creates this merchant's profile; X-Munim-Guest-Token claims that guest order
- post/v1/account/profilecustomers.profile.update.v1 — name and phone
- post/v1/account/consentcustomers.consent.set.v1 — marketing consent
- post/v1/account:erasecustomers.erasure.request.v1 — anonymise the profile; orders are kept
- post/v1/ordersorders.place.v1 — core re-prices; client totals are ignored; a preview total that no longer holds is refused (preview_total_changed)
- post/v1/orders/{id}:acceptAccept a placed order
- post/v1/orders/{id}:rejectReject a placed order with a reason code; consumed stock, redeemed points and the pickup slot are given back
- post/v1/orders/{id}:advanceMove an order one step (preparing, ready, completed, or cancelled with a reason — refused while payments stand unrefunded); completion derives loyalty earn and the sale's journal entry
- post/v1/orders/{id}:push-backMove the promised time later with a reason code; deals are re-judged at the new time; refused once a payment is recorded
- post/v1/orders/{id}/tendersRecord a cash / card / UPI payment (recorded only — Munim does not process payments)
- post/v1/orders/{id}/voidsVoid a line, or the whole order (which cancels it; voids never exceed the total), with a reason; before any payment
- post/v1/orders/{id}/refundsRecord a refund with a reason, within what was paid and the member's authority
- post/v1/pickup-windowsCreate pickup slots for a business date (outlet-local times, DST-safe); existing slots are kept
- post/v1/shiftsOpen a drawer shift with its float
- post/v1/shifts/{id}:closeClose a shift with the counted cash; core computes expected cash and variance
- post/v1/kitchen/tickets/{id}:advancekitchen.ticket.advance.v1 — queued → preparing → ready → done; a stale from_status or an illegal move is 409
- post/v1/kitchen/prep-timeskitchen.prep_time.set.v1 — a manager's own expected prep time (closes the previous one)
- post/v1/kitchen/prep-listskitchen.prep_list.create.v1 — a manager's own prep list (intel's proposals arrive as drafts and wait for approval)
- post/v1/catalogue/itemscatalogue.item.upsert.v1 — create or update an item with its variants and option groups (owner/manager, all outlets)
- post/v1/catalogue/recipescatalogue.recipe.version.create.v1 — the next recipe version; closes the open one; an overlapping validity or a unit that is not the ingredient's base unit is refused
- post/v1/catalogue/pricescatalogue.price.set.v1 — a price for an outlet and channel; closes the open one; an overlapping validity is refused
- post/v1/catalogue/dealscatalogue.deal.upsert.v1 — create or update a deal with its weekly windows (outlet time zone)
- post/v1/catalogue/couponscatalogue.coupon.set.v1 — create a coupon or change its caps, end date or status
- post/v1/catalogue/deals/{id}:endcatalogue.deal.end.v1 — end a deal (payload deal_id must equal the path id)
- post/v1/catalogue/availabilitycatalogue.availability.set.v1 — mark an item sold out or back on sale at one outlet
- post/v1/inventory/ingredientsinventory.ingredient.upsert.v1 — create or edit an ingredient / stock record
- post/v1/inventory/wasteinventory.waste.record.v1 — log waste; core derives the waste movement
- post/v1/inventory/countsinventory.count.submit.v1 — a blind count; core derives count_adjust movements
- post/v1/inventory/transfersinventory.transfer.create.v1 — send stock to another outlet (draftable); both ends in scope
- post/v1/inventory/stock:receiveinventory.stock.receive.v1 — opening stock, optionally into new dated batches
- post/v1/inventory/reorder-levelsinventory.reorder_level.set.v1 — min / par for one ingredient at one outlet (draftable)
- post/v1/inventory/batches:updateinventory.batch.update.v1 — correct a batch's expiry or MRP
- post/v1/inventory/transfers/{id}:receiveinventory.transfer.receive.v1 — the receiving outlet books the stock in
- post/v1/inventory/expired-sale-overridesinventory.expired_sale.override.v1 — a manager or owner lets one cart line sell from one expired batch, where the country pack allows it
- post/v1/supplierspurchasing.supplier.upsert.v1 — create or update a supplier (kind is fixed)
- post/v1/purchase-orderspurchasing.po.create.v1 — commit a purchase order (single or pooled)
- post/v1/goods-receivedpurchasing.grn.receive.v1 — receive goods (creates batches, stock movements and postings)
- post/v1/supplier-invoicespurchasing.invoice.record.v1 — record an invoice; a repeated supplier + number is refused with 409
- post/v1/supplier-invoices/{id}:approvepurchasing.invoice.approve.v1 — approve a recorded invoice (owner); derives the payable
- post/v1/supplier-invoices/{id}:disputepurchasing.invoice.dispute.v1 — record a dispute for the owner to send
- post/v1/supplier-returnspurchasing.supplier_return.create.v1 — return stock to a supplier
- post/v1/rfq-requestspurchasing.rfq.request.v1 — ask the simulated suppliers to quote one ingredient for the chosen outlets; any purchase order comes back as a draft to approve
- post/v1/finance/disputesfinance.dispute.draft.v1 — record a channel dispute for the owner to send (also draftable)
- post/v1/finance/period-closesfinance.period.close.v1 — close a month (also draftable); later entries dated in it are refused
- post/v1/finance/channel-termsfinance.channel_terms.set.v1 — record agreed commission, ad and promo terms for a channel (owner)
- post/v1/finance/expensesfinance.expense.record.v1 — record an expense (posts it)
- post/v1/finance/budgetsfinance.budget.set.v1 — set a month's budget for one spending category, for one outlet or the whole business (owner)
- post/v1/customers:upsertcustomers.customer.upsert.v1 — create or edit a customer record; consent can only be withdrawn
- post/v1/loyalty:adjustcustomers.loyalty.adjust.v1 — append an adjustment entry (never below zero)
- post/v1/campaigns:cancelcustomers.campaign.cancel.v1 — cancel a queued campaign
- post/v1/campaigns:record-sentcustomers.campaign.record_sent.v1 — on a demo business, record a queued campaign as sent (simulated: no message leaves Munim; owner)
- post/v1/reservations:upsertcustomers.reservation.upsert.v1
- post/v1/reviews:recordcustomers.review.record.v1 — enter a review (append-only)
- post/v1/bulk-orders:upsertcustomers.bulk_order.upsert.v1
- post/v1/compliance/licencescompliance.licence.upsert.v1 — record or renew a licence
- post/v1/compliance/assetscompliance.asset.upsert.v1 — add or change an asset
- post/v1/compliance/checklistscompliance.checklist.upsert.v1 — add or change a checklist
- post/v1/compliance/checklist-runscompliance.checklist.complete.v1 — complete a checklist for a business date
- post/v1/compliance/temp-logscompliance.temp.record.v1 — record a temperature reading (evidence, not a certificate)
- post/v1/compliance/amcscompliance.amc.record.v1 — record an AMC
- post/v1/compliance/maintenancecompliance.maintenance.schedule.v1 — schedule maintenance (intel may draft it)
- post/v1/compliance/maintenance/recordcompliance.maintenance.record.v1 — record maintenance done
- post/v1/cares/profilecares.profile.set.v1 — opt in or pause, name the business, set each outlet's city, location and pickup hours
- post/v1/cares/listingscares.listing.publish.v1 — publish a donation or an offer (owner or judge; intel may draft it, cooked lines only by the owner's own command)
- post/v1/cares/listings/{id}:withdrawcares.listing.withdraw.v1 — withdraw a published listing (not after an offer is allocated)
- post/v1/cares/handoverscares.handover.record.v1 — record what was handed over; core derives the stock movements
- post/v1/cares/handovers/{id}:voidcares.handover.void.v1 — void a recorded hand-over with a reason; stock comes back (not after the buyer received)
- post/v1/cares/claimscares.claim.create.v1 — claim every line of an offer at the offered quantity (all-or-nothing); the price is recorded, never processed
- post/v1/cares/claims/{id}:cancelcares.claim.cancel.v1 — cancel a claim before any verdict
- post/v1/cares/claims/{id}:closecares.claim.close.v1 — close a claim whose outcome is declined
- post/v1/cares/claims/{id}:receivecares.claim.receive.v1 — receive an accepted, handed-over claim into stock
- post/v1/cares/listings/{id}:decidecares.claim.decide.v1 — accept or decline one claim on the caller's offer (one accepted claim per offer)
- post/v1/findings/{id}:dismissfindings.dismiss.v1 — dismiss an open finding with a reason code (payload finding_id must equal the path id)
- post/v1/drafts/{id}:approvedrafts.approve.v1 — approve as proposed or edited (payload draft_id must equal the path id)
- post/v1/drafts/{id}:rejectdrafts.reject.v1 — reject with a reason (payload draft_id must equal the path id)
- post/v1/goalsgoals.goal.create.v1 — set a goal (intel may draft it)
- post/v1/goals/updategoals.goal.update.v1 — close a goal as achieved, missed or cancelled
- post/v1/tasksgoals.task.create.v1 — assign a task (intel may draft it)
- post/v1/tasks/updategoals.task.update.v1 — close or reassign a task
- post/v1/ai/policy/ceilingai_policy.ceiling.set.v1 — set the highest investigation mode a role may pick (owner only)
- post/v1/ai/policy/capai_policy.cap.set.v1 — set the monthly AI spend cap, never above the operator's limit (owner only)
- post/v1/storefront-pagesstorefront.page.save.v1 — save the next version of the storefront page (owner; all-outlet manager)
- post/v1/storefront-pages/{id}:publishstorefront.page.publish.v1 — put a saved version live; an older one restores it (owner)
- post/v1/outletstenancy.outlet.create.v1 — add an outlet (owner)
- post/v1/outlets/{id}:updatetenancy.outlet.update.v1 — outlet settings (owner; manager of that outlet)
- post/v1/brandstenancy.brand.create.v1 — add a brand (owner)
- post/v1/channelstenancy.channel.create.v1 — add a sales channel (owner)
- post/v1/devicestenancy.device.register.v1 — register a POS or KDS device (owner; manager of that outlet)
- post/v1/members:invitetenancy.member.invite.v1 — invite a member by email (owner)
- post/v1/tenant:updatetenancy.tenant.update.v1 — business settings; country is locked after onboarding (R30)
- post/v1/policytenancy.policy.set.v1 — the owner's labour and margin targets, as a new dated version (owner)
- post/v1/onboardingtenancy.onboard.v1 — a signed-in person with no tenant creates one: tenant, first outlet, owner membership, pack defaults. The owner's email is the verified IdP email; the same envelope twice makes one tenant
- post/v1/members:bindtenancy.member.bind.v1 — the invitee's first sign-in binds the IdP subject to the invited member, once. Tenant from the invite link (X-Munim-Tenant); the email must match the invite AND be verified by the IdP, else 404
- post/v1/members/{id}:set-roletenancy.member.role.set.v1 — change another member's role and outlet scope (owner)
- post/v1/members/{id}:deactivatetenancy.member.deactivate.v1 — deactivate another member; their sign-in stops resolving, their records stay (owner)
- post/platform/v1/tenants:provisiontenancy.provision.v1 — operator provisions a tenant (03-architecture §1.9)
- post/platform/v1/demo-sessionsdemo.session.start.v1 — operator starts an ephemeral judge session on a fresh demo tenant