Integration

Qawafel integration

Qawafel is a Saudi B2B wholesale marketplace and business-document platform. Sync merchants (customer and supplier businesses) and products; record completed sales orders and move live orders through confirmation, pickup and delivery; issue quotations, purchase orders, goods received notes, invoices and credit notes, where finalizing an invoice or credit note submits it to ZATCA (the Saudi tax authority) for a VAT-registered tenant; import 10 to 100 records per batch job; and manage webhook subscriptions. Authentication is a tenant API key created in the Qawafel dashboard, sent in the x-qawafel-api-key header. This integration calls the production host, so keys from the sandbox (core.development.qawafel.dev) do not work; limit 100 requests per minute per key. Webhook signing secrets are not passed through.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Qawafel.Built from the 61 Qawafel tools below, on the connection you add once.

What you can do with Qawafel

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Order, 10 operations

  • cancel_orderCancel orderPOSTCancels a customer's order as the vendor (pending_vendor_confirmation or confirmed to cancelled_by_vendor): the customer is notified, payments are refunded per your refund policy, and it cannot be reactivated.
  • confirm_orderConfirm orderPOSTConfirms a pending order as the vendor, committing you to fulfill it (pending_vendor_confirmation to confirmed); the customer is notified. An order left unconfirmed may be cancelled automatically after a timeout.
  • create_orderCreate orderPOSTRecords an order that is ALREADY completed (state fulfilled), to sync past or externally completed sales; it starts no fulfillment. Give the customer, line items and delivery address.
  • fulfill_orderFulfill orderPOSTCompletes a delivered order (delivered to fulfilled, terminal): it can no longer be modified and invoices can be generated for it.
  • get_orderGet orderGETReturns one sales order: number, state, customer, line items, delivery option and fees, totals in SAR and the quotation it came from.
  • list_ordersList ordersGETLists sales orders placed by your customers that you fulfill, 25 per page by default; filter by state (pending_vendor_confirmation, confirmed, out_for_delivery, delivered, fulfilled, cancelled_*...), customer or creation time.
  • mark_order_deliveredMark order deliveredPOSTMarks an out-for-delivery order as delivered to the customer (out_for_delivery to delivered). Then call fulfill_order to complete it.
  • mark_order_not_deliveredMark order not deliveredPOSTRecords a failed delivery attempt (out_for_delivery to not_delivered), for example customer not available or wrong address. Give the reason.
  • mark_order_out_for_deliveryMark order out for deliveryPOSTMarks an order that is ready for pickup as out for delivery, for orders you deliver yourself (DBV). For courier-delivered (DBQ) orders the courier system makes this change.
  • mark_order_ready_for_pickupMark order ready for pickupPOSTMarks a confirmed order ready for pickup; the courier is notified to collect it. For orders you deliver (DBV) continue with mark_order_out_for_delivery; for courier (DBQ) orders wait for the pickup.

Batch job, 7 operations

  • batch_create_credit_notesBatch create credit notesPOSTStarts an asynchronous job creating 10 to 100 draft credit notes; returns the job id at once. Call get_batch_job with it until summary.pending is 0, then read each item's new id or errors.
  • batch_create_invoicesBatch create invoicesPOSTStarts an asynchronous job creating 10 to 100 draft invoices; returns the job id at once. Call get_batch_job with it until summary.pending is 0, then read each item's new id or errors.
  • batch_create_merchantsBatch create merchantsPOSTStarts an asynchronous job creating 10 to 100 merchants (customer or supplier businesses); returns the job id at once. Call get_batch_job with it until summary.pending is 0, then read each item's new id or errors.
  • batch_create_ordersBatch create ordersPOSTStarts an asynchronous job creating 10 to 100 ALREADY completed orders (state fulfilled, to sync past sales); returns the job id at once. Call get_batch_job with it until summary.pending is 0, then read each item's new id or errors.
  • batch_create_productsBatch create productsPOSTStarts an asynchronous job creating 10 to 100 products; returns the job id at once. Call get_batch_job with it until summary.pending is 0, then read each item's new id or errors.
  • get_batch_jobGet batch jobGETReturns a batch job's progress (summary: pending, succeeded, failed) and each item's state with its new record id (result.id) or validation errors. Call again until summary.pending is 0. Jobs are deleted after 30 days.
  • list_batch_jobsList batch jobsGETLists your batch import jobs by creation date (id and created_at only), 25 per page by default; next page: pass pagination.next_cursor as after. Use get_batch_job for a job's progress and results.

Goods received note, 6 operations

  • cancel_goods_received_noteCancel goods received notePOSTCancels a draft or open goods received note (state cancelled). A closed note cannot be cancelled.
  • close_goods_received_noteClose goods received notePOSTCloses an open goods received note: it is finalized and can no longer be modified (terminal state).
  • confirm_goods_received_noteConfirm goods received notePOSTConfirms a draft goods received note (draft to open): it can no longer be edited and its PDF can be generated.
  • create_goods_received_noteCreate goods received notePOSTCreates a draft goods received note recording goods received from a supplier, optionally against a purchase order. Then confirm_goods_received_note confirms it or cancel_goods_received_note cancels it.
  • get_goods_received_noteGet goods received noteGETReturns one goods received note: number, state, supplier, linked purchase order, delivery and receipt dates, line items with ordered and received quantities, and totals.
  • list_goods_received_notesList goods received notesGETLists goods received notes (records of goods received from suppliers, usually against a purchase order), 25 per page by default; filter by state, supplier, purchase order or creation time.

Invoice, 6 operations

  • create_invoiceCreate invoicePOSTCreates a draft sales invoice for a customer from line items (your sale products, money as decimal strings in SAR). Finalize it with generate_invoice, which for a VAT-registered tenant submits it to ZATCA.
  • generate_invoiceGenerate invoicePOSTFinalizes a draft invoice created through the API. For a VAT-registered tenant this SUBMITS it to ZATCA, the Saudi tax authority, for clearance (pushed, then sent with ZATCA fields); otherwise it generates the PDF (sent).
  • get_invoiceGet invoiceGETReturns one invoice: number, state, customer, line items, totals in SAR, dates, linked order or quotation, and the ZATCA PDF URL once generated.
  • list_invoicesList invoicesGETLists all invoices of the tenant, however they were created (API, upload or the Qawafel app), 25 per page by default; filter by state, customer or creation time. Next page: pass pagination.next_cursor as after.
  • upload_invoiceUpload invoicePOSTImports an invoice PDF already generated and cleared by ZATCA elsewhere (an ERP); the PDF must embed the ZATCA XML. It is stored in state sent and can never be edited or deleted. An invalid PDF is refused (422).
  • void_invoiceVoid invoicePOSTVoids an invoice for good (terminal state). Allowed from pushed, from paid (reverses a paid invoice) or, for a non-taxable tenant, from draft; refused from sent, rejected or void. Only API-created invoices.

Quotation, 6 operations

  • approve_quotationApprove quotationPOSTRecords that the buyer accepted a pending quotation (pending to approved): it can then be converted to an order or invoice and can no longer be rejected.
  • create_quotationCreate quotationPOSTCreates a draft quotation (a price offer) for a buyer from line items (your sale products, money as decimal strings in SAR). send_quotation sends it to the buyer.
  • get_quotationGet quotationGETReturns one quotation: number, state, buyer, line items, totals in SAR, dates and the purchase order it answers.
  • list_quotationsList quotationsGETLists quotations (price offers to buyers, approved before becoming orders or invoices), 25 per page by default; filter by state (draft, pending, approved, rejected), buyer or creation time.
  • reject_quotationReject quotationPOSTCancels a draft quotation, or records that the buyer rejected a pending one (to rejected). A rejected quotation can never be reactivated.
  • send_quotationSend quotationPOSTSENDS a draft quotation to the buyer for review (draft to pending): it can no longer be edited, a PDF is generated, and the buyer can approve or reject it.

Credit note, 5 operations

  • create_credit_noteCreate credit notePOSTCreates a draft credit note against an invoice in sent or paid state, crediting quantities of that invoice's line items (prices and VAT come from the invoice). Finalize it with generate_credit_note.
  • generate_credit_noteGenerate credit notePOSTFinalizes a draft credit note for good. For a VAT-registered tenant this SUBMITS it to ZATCA, the Saudi tax authority, for clearance (pushed, then sent); otherwise it generates the PDF (sent). Its parent invoice must be sent or paid.
  • get_credit_noteGet credit noteGETReturns one credit note: number, state, parent invoice, customer, credited line items, totals in SAR and the ZATCA PDF URL once generated.
  • list_credit_notesList credit notesGETLists credit notes (deductions against invoices for returns, price changes or cancellations), 25 per page by default; filter by state, parent invoice, customer or creation time. Next page: pass pagination.next_cursor as after.
  • void_credit_noteVoid credit notePOSTVoids a credit note for good (terminal state). Allowed from pushed, from paid (reverses an applied credit) or, for a non-taxable tenant, from draft; refused from sent, rejected or void. Only API-created credit notes.

Purchase order, 5 operations

  • cancel_purchase_orderCancel purchase orderPOSTCancels a draft or open purchase order. One that already received goods (partially_received or closed) cannot be cancelled: returns go through credit notes.
  • create_purchase_orderCreate purchase orderPOSTCreates a draft purchase order to a supplier from line items (that supplier's purchase products, money as decimal strings in SAR). send_purchase_order sends it; cancel_purchase_order cancels it.
  • get_purchase_orderGet purchase orderGETReturns one purchase order: number, state, supplier, line items, totals in SAR and dates.
  • list_purchase_ordersList purchase ordersGETLists purchase orders to your suppliers, 25 per page by default; filter by state (draft, open, partially_received, closed, cancelled), supplier or creation time.
  • send_purchase_orderSend purchase orderPOSTSENDS a draft purchase order to the supplier (draft to open): it can no longer be edited, a PDF is generated for the supplier, who can start fulfilling it, and goods received notes can then reference it.

Webhook, 5 operations

  • create_webhookCreate webhookPOSTSubscribes an HTTPS URL to one event type (one webhook per event, a duplicate gets 409); Qawafel then POSTs each such event with the full resource. The signing secret is not returned by this tool.
  • delete_webhookDelete webhookDELETEDeletes a webhook subscription: deliveries to its URL stop at once, pending ones are cancelled and its delivery history is deleted.
  • get_webhookGet webhookGETReturns one webhook subscription: URL, event, description, active status and dates. The signing secret is never returned.
  • list_webhooksList webhooksGETLists your webhook subscriptions (one event type each): URL, event, description and active status, 25 per page by default. Signing secrets are never returned.
  • test_webhookTest webhookPOSTSends a test event (event webhook.test) to the webhook's URL now and records it in the delivery history; the endpoint should answer 2xx.

Merchant, 4 operations

  • create_merchantCreate merchantPOSTCreates a merchant: a customer or supplier business with legal and trade names, 10-digit CR number, Saudi National Address, contact email and phone, and VAT number when VAT registered.
  • get_merchantGet merchantGETReturns one merchant: type, legal and trade names, CR, VAT and unified national numbers, address, contact email and phone, taxable and active flags.
  • list_merchantsList merchantsGETLists your merchants of one type, suppliers (the default) or customers: legal and trade names, CR, VAT and unified national numbers, taxable and active flags. 25 per page; filter by active status or creation time. get_merchant adds contacts.
  • update_merchantUpdate merchantPATCHChanges a merchant's English or Arabic trade name, or deactivates or reactivates it with is_active. Fields left out keep their value. Qawafel's docs disagree on whether a merchant created in the Qawafel app can be updated here.

Product, 4 operations

  • create_productCreate productPOSTCreates a product: type sale (yours, used in quotations, invoices and credit notes) or purchase (a supplier's, used in purchase orders and goods received notes; needs supplier_id). Price in SAR.
  • get_productGet productGETReturns one product: type, SKU, names and descriptions in English and Arabic, price in SAR, barcode, supplier, taxable and active flags.
  • list_productsList productsGETLists products of one type, sale (yours, the default) or purchase (supplier catalog items), 25 per page; filter by supplier, active status, exact SKU or creation time. Next page: pass pagination.next_cursor as after.
  • update_productUpdate productPATCHChanges a product's price, English or Arabic description, or active status (the only editable fields). Fields left out keep their value; a description cannot be cleared through this tool.

Webhook delivery, 2 operations

  • get_webhook_deliveryGet webhook deliveryGETReturns one delivery attempt with the JSON payload sent (the full resource at the time of the event) and the receiving endpoint's status and response body (first 1 KB).
  • list_webhook_deliveriesList webhook deliveriesGETLists a webhook's delivery attempts, newest first, kept 30 days: event, resource, state (pending, delivered, failed), attempt count, response status and time, error message.

Tenant, 1 operation

  • get_tenantGet tenantGETReturns your own organization's Qawafel profile (the tenant the API key belongs to): legal and trade names, CR, VAT and unified national numbers, address, contact email and phone.

Use Qawafel from Claude Code, Cursor or Codex

Connect Qawafel in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Qawafel operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect Qawafel

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Qawafel once

    Add your Qawafel connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

Qawafel integration FAQ

What can you do with the Qawafel integration?

LiveContext exposes 61 operations on Qawafel, covering order, batch job, goods received note and invoice.

Popular integrations

Browse the whole catalog