ohneben's Wafeq MCP
ohneben's Wafeq MCP
License & checks
MCP registries
Run your Wafeq books in plain language from AI assistants like Claude, Cursor, and any other MCP client.
This Model Context Protocol server exposes the Wafeq Public API β all 251 endpoints, generated straight from the OpenAPI spec into MCP tools, plus two hand-written ones. Every tool carries a safety category (π’ read-only / π‘ write / π state change / π΄ irreversible or destructive) so your assistant knows what an action does before it calls it β including the difference between saving an invoice and filing it with a tax authority, which no CRUD-shaped wrapper can tell you. It runs over stdio (Claude Desktop and other local launchers) or Streamable HTTP (hosted in Docker), and ships with retries, client-side rate limiting, request timeouts, idempotency keys, multipart upload and binary PDF handling so it holds up against a live book.
Why you'll want this
Some MCP servers just forward an API. This one is built to be safe to hand to an LLM and easy to run against real accounting data:
What you get | Why it matters |
All 251 endpoints, spec-driven | Full coverage of invoices, bills, quotes, credit and debit notes, payments, banking, journals, payroll, projects, inventory and reports β nothing hand-picked or left behind. |
Nine safety categories, not four π’ / π‘ / π / π΄ | A dozen of Wafeq's POSTs are not creates. Previews write nothing; ending an amortization early posts to the ledger with no undo; reporting an invoice to a tax authority leaves your organization permanently. Each gets its own banner instead of being lumped in with "create". |
Server instructions sent on connect | The client is told how to read the safety banners and the handful of Wafeq conventions β date format, decimal separator, whole-period report ranges β up front, instead of discovering them by getting a call wrong first. |
Machine-readable MCP annotations ( | Hosts that honor annotations (Claude included) can auto-trust the 98 read-only tools and demand confirmation before any of the 44 that delete or cannot be undone. |
Correct report parameters, per report | Each of the four reports gets its own schema: balance sheet takes |
Whole-period validation before sending | Profit-and-loss and cash flow reject ranges that don't align to whole months or years. The server checks locally and replies with the nearest valid range instead of spending a round trip on an HTTP 400. |
Automatic idempotency keys | Every one of the 146 write endpoints that supports |
File uploads that actually work |
|
Binary PDFs handled as bytes | The nine PDF endpoints are base64-encoded into a small envelope with size and content type, instead of being read as text and corrupted. |
Automatic retries with backoff | Transient |
Built-in rate limiting | Self-throttles so a burst of tool calls doesn't trip a |
Tenant verified at startup | A Wafeq API key is organization-scoped. The server calls |
Two transports: stdio and Streamable HTTP | Use it locally in Claude Desktop, or run one always-on server that any number of MCP clients reach over HTTP. |
Docker + docker-compose, health check, auto-restart |
|
Optional bearer-token auth on the HTTP endpoint | Put the server behind a shared secret the moment it's reachable beyond localhost. |
Your secrets never reach the model | Credentials live in the server's environment and are injected on every request. The passthrough tool cannot override |
Drop-in spec updates | Wafeq ships a newer spec? Replace one file and rebuild β new endpoints become new tools automatically, no code changes. |
How it compares
Capability | This project | Generic OpenAPIβMCP wrapper* |
All 251 Wafeq endpoints as tools | β | β |
Per-tool safety category + banner | β | β |
Tax-authority filing flagged as irreversible, not "create" | β | β |
| β | β |
Read-only fields stripped from create/update bodies | β | β |
Duplicated enum prose compacted out of schemas | β | β |
Correct, per-report date parameters | β | β |
Whole-period range validated before sending | β | β |
Automatic | β | β |
Multipart + raw-binary file upload | β | β |
Binary PDF responses base64-encoded, not mangled | β | β |
Transaction dates recovered for journal line items | β | β |
Automatic retries on | β | β |
Client-side rate limiting | β | β |
Organization identity verified at startup | β | β |
| β | β |
Streamable-HTTP transport | β | β |
Docker + docker-compose, health check, auto-restart | β | β |
Optional bearer-token auth on the endpoint | β | β |
License | MIT | varies |
*Generic OpenAPIβMCP wrappers turn any spec into MCP tools. They can reach the same endpoints, but treat every operation identically β and against Wafeq's spec specifically they inherit the read-only-required-field problem described in MIGRATION.md. "β" = varies by tool / not guaranteed.
Related MCP server: MCP Holded
What you can do
Once it's connected, ask your assistant things like:
"What was our profit and loss for the first half of this year?"
"Show me every unpaid invoice older than 30 days, with the customer name."
"Create a draft invoice for Acme Ltd for 3 days of consulting at β¬800/day."
"Download invoice INV-2026-014 as a PDF."
"Which account did the β¬7,000 transfer in January post to?"
"Attach this receipt to expense EXP-118."
"Reconcile the bank statement lines for March against the ledger."
"Convert quote QUO-31 to an invoice and record the payment."
How it works
Claude / Cursor / any MCP client ββMCPβββΊ this server ββHTTPSβββΊ Wafeq API (your organization)At startup the server parses the bundled OpenAPI spec into MCP tools β resolving
$refs, guarding against recursive schemas, and stripping server-assigned
(readOnly) fields out of request bodies β tags each tool with its safety category,
verifies which Wafeq organization the credentials belong to, and then injects your
credential on every outgoing request. Your key stays in the server's environment; the
model never sees or handles it.
Requirements
A Wafeq organization with API access β either a private API key (Wafeq β Settings β Developer β API keys) or an OAuth2 access token. See Get your API credentials.
Docker (Docker Desktop on macOS/Windows) for the quick start below β or Node.js β₯ 20 to run from source.
Quick start (Docker)
1. Add your credentials. Copy the example config and fill it in:
cp .env.example .envThen edit .env and set WAFEQ_API_KEY. Unless HOST is a loopback address the
server also requires MCP_AUTH_TOKEN and refuses to start without one, so set it
to a long random string: MCP_AUTH_TOKEN=$(openssl rand -hex 32).
2. Start the server:
docker compose up -d --builddocker-compose.yml binds to 127.0.0.1:8765 only, so the server is reachable from
your machine but not from the network.
3. Confirm it's running β and that it's pointed at the right books:
curl -s http://localhost:8765/health{
"status": "ok",
"server": "wafeq-mcp",
"version": "2.0.0",
"tools": 253,
"organization": {
"status": "ok",
"id": "org_...",
"name": "Your Company FZCO",
"base_currency": "EUR",
"country": "AE"
},
"auth_required": false
}Check the name field. That is the organization your key writes to. If it isn't
the company you expected, stop and fix the key before doing anything else. /health
answers 503 and "status": "degraded" when the credentials can't be verified.
4. Point your MCP client at it: http://localhost:8765/mcp (Streamable HTTP).
Remote endpoints are added to Claude as a custom connector (Settings β
Connectors), or bridged locally with
mcp-remote. For the bridge, add this
under mcpServers in your client config and restart the app completely:
{
"mcpServers": {
"wafeq": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8765/mcp",
"--header", "Authorization: Bearer YOUR_MCP_AUTH_TOKEN"
]
}
}
}(Drop the --header line only if the server runs without a token, which it
allows on a loopback bind alone.)
Prefer a ready-made image?
Every release publishes a ready-to-run image to the GitHub Container Registry, so you can skip the local build entirely:
docker run -d --name wafeq-mcp -p 127.0.0.1:8765:8765 --env-file .env \
ghcr.io/ohneben/wafeq-mcp:latestPin a version (:2.0.0) rather than latest if you want releases to be something
you opt into.
Install from the MCP Registry
The server is published to the MCP Registry
as io.github.ohneben/wafeq-mcp, so registry-aware clients can install it by name.
The registry entry launches the image over stdio β see
Run the container over stdio for the equivalent
hand-written config.
curl -s "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.ohneben%2Fwafeq-mcp/versions/latest"Get your API credentials
Private API key (most people): in Wafeq, go to Settings β Developer β API
keys and create a key. It is scoped to one organization. Put it in .env as
WAFEQ_API_KEY; the server sends it as Authorization: Api-Key <key>.
OAuth2 app: if you have an access token from a Wafeq OAuth2 app, put it in
.env as WAFEQ_ACCESS_TOKEN instead. The server switches to
Authorization: Bearer <token> automatically. Set WAFEQ_AUTH_SCHEME only if you
need to force one scheme while both variables are present.
Configuration
All configuration is environment variables. Everything except the credential has a working default.
Variable | Default | What it does |
| β | Private organization API key. Sent as |
| β | OAuth2 access token. Sent as |
| auto | Force |
|
| Wafeq API base URL. |
| bundled spec | Use a different OpenAPI document (JSON or YAML). |
|
|
|
|
| HTTP listen port. |
|
| HTTP bind address. |
|
| Path the MCP endpoint is served on. |
| β | Bearer token required on |
| β | Comma-separated hostnames the |
|
| Start without a token on a non-loopback bind. Only for a port that genuinely is not reachable by anyone else. |
|
| Largest accepted request body. |
|
| Seconds an idle session is kept before it is swept. |
|
| Concurrent sessions before the least recently used one is evicted. |
| β | Comma-separated resource groups to expose, e.g. |
|
| Client-side rate limit: requests per window. |
|
| Rate-limit window in milliseconds. |
|
| Retries on |
|
| Per-attempt request timeout. |
|
| Allow upload tools to read this machine's filesystem via |
|
| Maximum decoded upload size (25 MiB). |
Too many tools?
251 tools is a lot. The full catalogue is about 0.5 MB of JSON (~133k tokens) on
tools/list, and some hosts get slower or less accurate with that many. Two things
help.
The schemas are already compacted. Wafeq's spec renders every enum's values into
its description as well as into enum β the currency list alone is ~4 KB, inlined
at 203 places. The generator collapses those single-member allOf wrappers and drops
the duplicated bullet lists, which takes ~29% off the payload without removing a
single allowed value.
Narrow the catalogue if you still want it smaller β no code changes needed:
WAFEQ_TOOL_GROUPS=invoices,bills,contacts,payments,reports,accounts,items,tax-ratesThe two hand-written tools are always available, so nothing becomes unreachable β
anything you filter out can still be called through wafeq_request.
Tool safety categories
Every tool's description opens with a banner, and every tool carries the matching MCP annotations. Counts are for the bundled spec (251 generated + 2 hand-written = 253).
Banner | Tools |
|
| What it covers |
π’ | 85 | β | β | Every |
π’ | 9 | β | β | The PDF downloads: invoice, simplified invoice, credit note, debit note, bill, quote, purchase order, payment, payslip. Returned base64-encoded. |
π’ | 4 | β | β | Amortization and revenue-recognition previews. |
π‘ | 39 | β | β | Collection creates, both file uploads, and the two conversions (quoteβinvoice, purchase orderβbill). Not idempotent by nature β hence the automatic idempotency key. |
π‘ | 70 | β | β | Every |
π | 2 | β | β | Mark expense posted / draft. Reversible β each undoes the other. |
π΄ | 3 | β | β | Report invoice / credit note / simplified invoice to the tax authority. Leaves your organization and cannot be recalled. |
π΄ | 2 | β | β | End amortization / revenue recognition early. No API undo β run the matching preview first. |
π΄ | 39 | β | β | Every |
253 | 98 | 44 |
The three π΄ groups all set destructiveHint: true, so a host that honors annotations
stops and asks before any of them β not just before deletions. Filing an invoice with
a tax authority is at least as consequential as deleting one, and unlike a deletion
it reaches outside your organization.
Print the live catalogue any time, without credentials:
npm run list-toolsTool | Endpoint |
| hand-written |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tool | Endpoint |
|
|
|
|
|
|
|
|
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tool | Endpoint |
|
|
|
|
Tool | Endpoint |
|
|
|
|
|
|
Tool | Endpoint |
|
|
|
|
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| hand-written |
|
|
|
|
|
|
|
|
|
|
Coverage
Area | Tools | π’ Read | π‘ Write | π΄ Irreversible | π΄ Delete |
Sales & receivables | 69 | 25 | 31 | 3 | 10 |
Purchasing & payables | 54 | 19 | 27 | 0 | 8 |
Banking | 18 | 6 | 9 | 0 | 3 |
Ledger & reporting | 31 | 19 | 6 | 2 | 4 |
Payroll | 19 | 7 | 9 | 0 | 3 |
Master data & dimensions | 54 | 18 | 27 | 0 | 9 |
Files & organization | 6 | 3 | 2 | 0 | 1 |
Escape hatch & convenience | 2 | 1 | 0 | 0 | 1 |
Total | 253 | 98 | 111 | 5 | 39 |
"Write" includes the two π state-change tools. Areas map to Wafeq resources as follows β Sales: invoices, simplified invoices, quotes, credit notes, payments, payment requests Β· Purchasing: bills, purchase orders, debit notes, expenses, beneficiaries Β· Banking: bank accounts with their ledger and statement transactions Β· Ledger & reporting: accounts, manual journals, journal line items, the four reports, tax rates, amortizations, revenue recognitions Β· Payroll: payslips, employees Β· Master data: contacts, items, units of measure, warehouses, projects, cost centers, branches, custom fields.
Two hand-written tools
Everything above is generated. Two tools are written by hand:
wafeq_account_ledger(π’) β journal line items with their real transaction date. Wafeq's/journal-line-items/rows carrycreated_ts(when the row reached Wafeq), which is regularly a different month from the transaction, and no date field at all. This tool recovers the date using the endpoint's owndate_after/date_beforefilters, which do operate on the transaction date. It probes a month at a time and only splits into day queries where rows exist, so quiet periods cost one request each; the result reportsrequests_made.wafeq_request(π΄) β the escape hatch: any method, any path, plus query, body and headers. It is the fallback for anything the bundled spec misses, not the primary interface. Categorized destructive because its effect can't be known in advance.
Run from source (stdio, no Docker)
npm ci
npm run buildThen register it with your MCP client. For Claude Desktop, add to
claude_desktop_config.json:
{
"mcpServers": {
"wafeq": {
"command": "node",
"args": ["/absolute/path/to/Wafeq MCP/dist/index.js"],
"env": {
"MCP_TRANSPORT": "stdio",
"WAFEQ_API_KEY": "your-key-here"
}
}
}
}For Claude Code:
claude mcp add wafeq --env WAFEQ_API_KEY=your-key-here -- node /absolute/path/to/dist/index.jsRun the container over stdio
You can also let your client launch the published image directly, with no HTTP server and no local build:
{
"mcpServers": {
"wafeq": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT=stdio",
"-e", "WAFEQ_API_KEY",
"ghcr.io/ohneben/wafeq-mcp:latest"
],
"env": {
"WAFEQ_API_KEY": "your-key-here"
}
}
}
}MCP_TRANSPORT=stdio is required here: the image defaults to the HTTP transport.
Useful scripts:
Command | What it does |
| Compile TypeScript to |
| Run the Vitest suite. |
| Print the categorized catalogue. Needs no credentials. |
| Run over stdio. |
| Run the Streamable HTTP server. |
Keeping the spec current
Tools are generated from spec/wafeq-public-api.json at startup β there is no code
generation step and no hand-written tool list. Drop in a newer OpenAPI document
(JSON or YAML), rebuild, and new endpoints become new tools. See
spec/README.md for where the bundled copy came from and what to
re-check after an update.
Observed-behaviour corrections live in src/overrides.ts, keyed by operationId and
dated, so an entry whose operation disappears simply stops applying.
Notes & conventions
Dates are
YYYY-MM-DD. Amounts use a dot as the decimal separator.Paging: list tools take
limitandoffset, and report the total count.Reports take report-specific date parameters β balance sheet
date+period_count; profit-and-loss and cash flowdate_after+date_before; trial balancefrom_date+to_date. Wafeq silently ignores a misspelled query parameter, so a wrong name looks like a working call; the per-report schemas exist to make that impossible.Whole periods: profit-and-loss and cash-flow ranges must cover whole months or years. The server checks locally and replies with the nearest valid range rather than spending a round trip on an HTTP 400.
File uploads (
wafeq_files_*): pass base64 content plus a filename.POST /files/is multipart-only andPOST /files/raw/needs aContent-Dispositionheader β both are handled for you.PDF downloads come back base64-encoded in a small envelope carrying the size and content type, not as mangled text.
Idempotency: every write endpoint that supports
X-Wafeq-Idempotency-Keygets a UUID v4 automatically, reused across retries. Pass your own to make a deliberate re-run safe.Retries: transient
429/5xxresponses are retried with jittered exponential backoff, honoringRetry-After, under the same idempotency key.Rate limiting: Wafeq publishes no numeric limit, so the client-side default (
WAFEQ_MAX_REQUESTS=20perWAFEQ_RATE_WINDOW_MS=10000) is deliberately conservative. Raise it if you know your allowance.One organization per credential. A Wafeq API key is organization-scoped; every tool call acts on that organization, and
/healthnames it.
CI & releases
Every push and pull request is built and tested on Node 20 and 22, and the tool
catalogue is generated with no credentials present β which is what catches a
duplicate or schema-illegal tool name before it ships. CI also fails if .env ever
becomes tracked.
A release is a vX.Y.Z tag and nothing else. No version number is maintained by
hand. Pushing the tag runs the whole chain:
The version is derived once, from the tag.
The image is built and pushed to
ghcr.io/ohneben/wafeq-mcpβ tagged with the version,MAJOR.MINOR, the short SHA, andlatestonmain.The entry is published to the MCP Registry with
server.jsonpinned to that exact image tag. Ownership is proved by theio.modelcontextprotocol.server.namelabel on the image, which must matchserver.json'snameβ a test enforces that it does.The released number is written back into
package.jsonandserver.jsononmain, and the tag is moved onto that commit. So the repository always states the last published version, and the server reports it over MCP and on/healthwithout a code edit.
npm version 2.0.1 --no-git-tag-version # optional; CI stamps it either way
git tag v2.0.1 && git push origin v2.0.1workflow_dispatch re-publishes a given version without cutting a new tag. Pushes to
main build a -dev.g<sha> image and stop there β they never touch the registry.
Security
Credentials stay server-side. They are read from the environment and injected per request. The model sees tool inputs and API responses, never the key. The passthrough tool cannot override the
Authorizationheader, and refuses to send the credential to any host other than the configured API base.Never commit
.env. It is git-ignored, and CI fails if it ever becomes tracked..env.exampleholds placeholders only.Bind to localhost, or set a token.
docker-compose.ymlpublishes on127.0.0.1only. Bound any further, the server refuses to start withoutMCP_AUTH_TOKEN; it is compared in constant time. AHostheader check runs on top of that, so a web page cannot reach a loopback server by DNS rebinding.Local file uploads are off by default.
WAFEQ_ALLOW_LOCAL_FILE_UPLOAD=falsemeans the server will not read files from its own filesystem. Turning it on lets anything that can call the server ask it to read a local path β leave it off unless you need it and trust every client. Base64 uploads work either way.Check the organization on
/healthbefore the first write. An API key is scoped to one organization, and a wrong key fails by writing to the wrong company rather than by erroring.The π΄ tools mean it. Deletions are permanent, ending a schedule early has no API undo, and a tax-authority filing cannot be recalled. Keep host confirmations on for anything carrying
destructiveHint.
See SECURITY.md to report a vulnerability.
Credits & license
MIT β see LICENSE.md. Built on the Model Context Protocol TypeScript SDK. Not affiliated with or endorsed by Wafeq.
Available Tools
253 toolswafeq_account_ledgerARead-onlyIdempotent
π’ READ-ONLY Β· Journal Line Items Β· convenience tool
List journal line items WITH their real transaction date attached as date.
Use this instead of the raw journal-line-items tool whenever the date matters β for tracing an account's history, reconciling a period, or explaining a balance. The raw endpoint returns created_ts (when the row reached Wafeq), which is regularly a different month from the transaction and must not be reported as the transaction date.
Both dates are required and the window must be 92 days or fewer for dates to be resolved; a wider range still returns rows, but without date. Costs one request per month plus one per day in months that contain rows, so quiet periods are cheap. The result reports requests_made.
Inputs: date_after (required), date_before (required), branch, account, +8 more.
wafeq_accounts_createA
π‘ WRITE Β· creates data Β· Accounts Β· POST /accounts/
Create account
Endpoint for creating a new account.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_accounts_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Accounts Β· DELETE /accounts/{id}/
Delete account
Endpoint for deleting an existing account.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_accounts_listCRead-onlyIdempotent
π’ READ-ONLY Β· Accounts Β· GET /accounts/
List accounts
Endpoint for retrieving a list of accounts.
Inputs: page, is_system, page_size, external_id, +6 more.
wafeq_accounts_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Accounts Β· PATCH /accounts/{id}/
Partial update account
Endpoint for partially updating an existing account.
Inputs: id (required), body, idempotency_key.
wafeq_accounts_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Accounts Β· GET /accounts/{id}/
Retrieve account
Endpoint for retrieving a single account.
Inputs: id (required).
wafeq_accounts_updateBIdempotent
π‘ WRITE Β· updates data Β· Accounts Β· PUT /accounts/{id}/
Update account
Endpoint for updating an existing account.
Inputs: id (required), body (required), idempotency_key.
wafeq_amortizations_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Amortizations Β· DELETE /amortizations/{id}/
Delete amortization
Endpoint for deleting an existing amortization.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_amortizations_end_early_createADestructive
π΄ IRREVERSIBLE Β· posts the remaining balance to the ledger Β· Amortizations Β· POST /amortizations/{id}/end-early/
End amortization early
Endpoint for terminating an amortization early, recognizing the remaining balance against the provided account.
Terminates a schedule early and recognizes its whole remaining balance immediately. There is no API undo. Run the matching preview_... tool first to see exactly what would be posted.
Inputs: id (required), body (required).
wafeq_amortizations_listBRead-onlyIdempotent
π’ READ-ONLY Β· Amortizations Β· GET /amortizations/
List amortizations
Endpoint for retrieving a list of amortizations.
Inputs: page, duration, page_size, status__in, +5 more.
wafeq_amortizations_preview_createARead-onlyIdempotent
π’ READ-ONLY Β· preview / simulation Β· Amortizations Β· POST /amortizations/preview/
Preview amortization schedule
Endpoint for previewing the amortization events that would be generated for the given schedule, without creating an amortization.
This is a POST, but Wafeq documents it as a simulation: it returns the events that WOULD be generated and writes nothing to the ledger.
Inputs: body (required), duration, status__in, end_date_after, +4 more.
wafeq_amortizations_preview_end_early_createARead-onlyIdempotent
π’ READ-ONLY Β· preview / simulation Β· Amortizations Β· POST /amortizations/{id}/preview-end-early/
Preview early termination
Endpoint for previewing the remaining balance and the posted events that would be reversed by terminating the amortization early at the given date.
This is a POST, but Wafeq documents it as a simulation: it returns the events that WOULD be generated and writes nothing to the ledger.
Inputs: id (required), body (required).
wafeq_amortizations_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Amortizations Β· GET /amortizations/{id}/
Retrieve amortization
Endpoint for retrieving a single amortization.
Inputs: id (required).
wafeq_bank_accounts_createA
π‘ WRITE Β· creates data Β· Bank Accounts Β· POST /bank-accounts/
Create bank account
Endpoint for creating a new bank account.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_bank_accounts_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Bank Accounts Β· DELETE /bank-accounts/{id}/
Delete bank account
Endpoint for deleting an existing bank account.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_bank_accounts_ledger_transactions_createA
π‘ WRITE Β· creates data Β· Bank Ledger Transactions Β· POST /bank-accounts/{bank_account_id}/ledger-transactions/
Create bank ledger transaction
Endpoint for creating a new bank ledger transaction.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), bank_account_id (required), idempotency_key.
wafeq_bank_accounts_ledger_transactions_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Bank Ledger Transactions Β· DELETE /bank-accounts/{bank_account_id}/ledger-transactions/{id}/
Delete bank ledger transaction
Endpoint for deleting an existing bank ledger transaction.
Permanently removes the record.
Inputs: id (required), bank_account_id (required), idempotency_key.
wafeq_bank_accounts_ledger_transactions_listCRead-onlyIdempotent
π’ READ-ONLY Β· Bank Ledger Transactions Β· GET /bank-accounts/{bank_account_id}/ledger-transactions/
List bank ledger transactions
Endpoint for retrieving a list of bank ledger transactions.
Inputs: bank_account_id (required), page, page_size.
wafeq_bank_accounts_ledger_transactions_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Bank Ledger Transactions Β· PATCH /bank-accounts/{bank_account_id}/ledger-transactions/{id}/
Partial update bank ledger transaction
Endpoint for partially updating an existing bank ledger transaction.
Inputs: id (required), bank_account_id (required), body, idempotency_key.
wafeq_bank_accounts_ledger_transactions_retrieveCRead-onlyIdempotent
π’ READ-ONLY Β· Bank Ledger Transactions Β· GET /bank-accounts/{bank_account_id}/ledger-transactions/{id}/
Retrieve bank ledger transaction
Endpoint for retrieving a single bank ledger transaction.
Inputs: id (required), bank_account_id (required).
wafeq_bank_accounts_ledger_transactions_updateBIdempotent
π‘ WRITE Β· updates data Β· Bank Ledger Transactions Β· PUT /bank-accounts/{bank_account_id}/ledger-transactions/{id}/
Update bank ledger transaction
Endpoint for updating an existing bank ledger transaction.
Inputs: id (required), body (required), bank_account_id (required), idempotency_key.
wafeq_bank_accounts_listBRead-onlyIdempotent
π’ READ-ONLY Β· Bank Accounts Β· GET /bank-accounts/
List bank accounts
Endpoint for retrieving a list of bank accounts.
Inputs: page, currency, page_size, classification, +5 more.
wafeq_bank_accounts_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Bank Accounts Β· PATCH /bank-accounts/{id}/
Partial update bank account
Endpoint for partially updating an existing bank account.
Inputs: id (required), body, idempotency_key.
wafeq_bank_accounts_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Bank Accounts Β· GET /bank-accounts/{id}/
Retrieve bank account
Endpoint for retrieving a single bank account.
Inputs: id (required).
wafeq_bank_accounts_statement_transactions_createA
π‘ WRITE Β· creates data Β· Bank Statement Transactions Β· POST /bank-accounts/{bank_account_id}/statement-transactions/
Create bank statement transaction
Endpoint for creating a new bank statement transaction.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), bank_account_id (required), idempotency_key.
wafeq_bank_accounts_statement_transactions_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Bank Statement Transactions Β· DELETE /bank-accounts/{bank_account_id}/statement-transactions/{id}/
Delete bank statement transaction
Endpoint for deleting an existing bank statement transaction.
Permanently removes the record.
Inputs: id (required), bank_account_id (required), idempotency_key.
wafeq_bank_accounts_statement_transactions_listCRead-onlyIdempotent
π’ READ-ONLY Β· Bank Statement Transactions Β· GET /bank-accounts/{bank_account_id}/statement-transactions/
List bank statement transactions
Endpoint for retrieving a list of bank statement transactions.
Inputs: bank_account_id (required), page, page_size.
wafeq_bank_accounts_statement_transactions_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Bank Statement Transactions Β· PATCH /bank-accounts/{bank_account_id}/statement-transactions/{id}/
Partial update bank statement transaction
Endpoint for partially updating an existing bank statement transaction.
Inputs: id (required), bank_account_id (required), body, idempotency_key.
wafeq_bank_accounts_statement_transactions_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Bank Statement Transactions Β· GET /bank-accounts/{bank_account_id}/statement-transactions/{id}/
Retrieve bank statement transaction
Endpoint for retrieving a single bank statement transaction.
Inputs: id (required), bank_account_id (required).
wafeq_bank_accounts_statement_transactions_updateCIdempotent
π‘ WRITE Β· updates data Β· Bank Statement Transactions Β· PUT /bank-accounts/{bank_account_id}/statement-transactions/{id}/
Update bank statement transaction
Endpoint for updating an existing bank statement transaction.
Inputs: id (required), body (required), bank_account_id (required), idempotency_key.
wafeq_bank_accounts_updateBIdempotent
π‘ WRITE Β· updates data Β· Bank Accounts Β· PUT /bank-accounts/{id}/
Update bank account
Endpoint for updating an existing bank account.
Inputs: id (required), body (required), idempotency_key.
wafeq_beneficiaries_createA
π‘ WRITE Β· creates data Β· Beneficiaries Β· POST /beneficiaries/
Create beneficiary
Endpoint for creating a new beneficiary.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_beneficiaries_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Beneficiaries Β· DELETE /beneficiaries/{id}/
Delete beneficiary
Endpoint for deleting an existing beneficiary.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_beneficiaries_listCRead-onlyIdempotent
π’ READ-ONLY Β· Beneficiaries Β· GET /beneficiaries/
List beneficiaries
Endpoint for retrieving a list of beneficiaries.
Inputs: page, contact, country, keyword, +7 more.
wafeq_beneficiaries_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Beneficiaries Β· PATCH /beneficiaries/{id}/
Partial update beneficiary
Endpoint for partially updating an existing beneficiary.
Inputs: id (required), body, idempotency_key.
wafeq_beneficiaries_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Beneficiaries Β· GET /beneficiaries/{id}/
Retrieve beneficiary
Endpoint for retrieving a single beneficiary.
Inputs: id (required).
wafeq_beneficiaries_updateCIdempotent
π‘ WRITE Β· updates data Β· Beneficiaries Β· PUT /beneficiaries/{id}/
Update beneficiary
Endpoint for updating an existing beneficiary.
Inputs: id (required), body (required), idempotency_key.
wafeq_bills_createA
π‘ WRITE Β· creates data Β· Bills Β· POST /bills/
Create bill
Endpoint for creating a new bill.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_bills_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Bills Β· DELETE /bills/{id}/
Delete bill
Endpoint for deleting an existing bill.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_bills_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Bills Β· GET /bills/{id}/download/
Download bill PDF
Endpoint for downloading a PDF of the bill.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_bills_line_items_createA
π‘ WRITE Β· creates data Β· Bill Line Items Β· POST /bills/{bill_id}/line-items/
Create bill line item
Endpoint for creating a new bill line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), bill_id (required), idempotency_key.
wafeq_bills_line_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Bill Line Items Β· DELETE /bills/{bill_id}/line-items/{id}/
Delete bill line item
Endpoint for deleting an existing bill line item.
Permanently removes the record.
Inputs: id (required), bill_id (required), idempotency_key.
wafeq_bills_line_items_listCRead-onlyIdempotent
π’ READ-ONLY Β· Bill Line Items Β· GET /bills/{bill_id}/line-items/
List bill line items
Endpoint for retrieving a list of bill line items.
Inputs: bill_id (required), page, page_size.
wafeq_bills_line_items_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Bill Line Items Β· PATCH /bills/{bill_id}/line-items/{id}/
Partial update bill line item
Endpoint for partially updating an existing bill line item.
Inputs: id (required), bill_id (required), body, idempotency_key.
wafeq_bills_line_items_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Bill Line Items Β· GET /bills/{bill_id}/line-items/{id}/
Retrieve bill line item
Endpoint for retrieving a single bill line item.
Inputs: id (required), bill_id (required).
wafeq_bills_line_items_updateCIdempotent
π‘ WRITE Β· updates data Β· Bill Line Items Β· PUT /bills/{bill_id}/line-items/{id}/
Update bill line item
Endpoint for updating an existing bill line item.
Inputs: id (required), body (required), bill_id (required), idempotency_key.
wafeq_bills_listCRead-onlyIdempotent
π’ READ-ONLY Β· Bills Β· GET /bills/
List bills
Endpoint for retrieving a list of bills.
Inputs: page, branch, status, contact, +10 more.
wafeq_bills_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Bills Β· PATCH /bills/{id}/
Partial update bill
Endpoint for partially updating an existing bill.
Inputs: id (required), body, idempotency_key.
wafeq_bills_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Bills Β· GET /bills/{id}/
Retrieve bill
Endpoint for retrieving a single bill.
Inputs: id (required).
wafeq_bills_updateCIdempotent
π‘ WRITE Β· updates data Β· Bills Β· PUT /bills/{id}/
Update bill
Endpoint for updating an existing bill.
Inputs: id (required), body (required), idempotency_key.
wafeq_branches_createA
π‘ WRITE Β· creates data Β· Branches Β· POST /branches/
Create branch
Endpoint for creating a new branch.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_branches_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Branches Β· DELETE /branches/{id}/
Delete branch
Endpoint for deleting an existing branch.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_branches_listBRead-onlyIdempotent
π’ READ-ONLY Β· Branches Β· GET /branches/
List branches
Endpoint for retrieving a list of branches.
Inputs: page, page_size.
wafeq_branches_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Branches Β· PATCH /branches/{id}/
Partial update branch
Endpoint for partially updating an existing branch.
Inputs: id (required), body, idempotency_key.
wafeq_branches_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Branches Β· GET /branches/{id}/
Retrieve branch
Endpoint for retrieving a single branch.
Inputs: id (required).
wafeq_branches_updateCIdempotent
π‘ WRITE Β· updates data Β· Branches Β· PUT /branches/{id}/
Update branch
Endpoint for updating an existing branch.
Inputs: id (required), body (required), idempotency_key.
wafeq_contacts_createA
π‘ WRITE Β· creates data Β· Contacts Β· POST /contacts/
Create contact
Endpoint for creating a new contact.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_contacts_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Contacts Β· DELETE /contacts/{id}/
Delete contact
Endpoint for deleting an existing contact.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_contacts_listCRead-onlyIdempotent
π’ READ-ONLY Β· Contacts Β· GET /contacts/
List contacts
Endpoint for retrieving a list of contacts.
Inputs: page, country, keyword, page_size, +6 more.
wafeq_contacts_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Contacts Β· PATCH /contacts/{id}/
Partial update contact
Endpoint for partially updating an existing contact.
Inputs: id (required), body, idempotency_key.
wafeq_contacts_retrieveCRead-onlyIdempotent
π’ READ-ONLY Β· Contacts Β· GET /contacts/{id}/
Retrieve contact
Endpoint for retrieving a single contact.
Inputs: id (required).
wafeq_contacts_updateCIdempotent
π‘ WRITE Β· updates data Β· Contacts Β· PUT /contacts/{id}/
Update contact
Endpoint for updating an existing contact.
Inputs: id (required), body (required), idempotency_key.
wafeq_cost_centers_createA
π‘ WRITE Β· creates data Β· Cost Centers Β· POST /cost-centers/
Create cost center
Endpoint for creating a new cost center.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_cost_centers_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Cost Centers Β· DELETE /cost-centers/{id}/
Delete cost center
Endpoint for deleting an existing cost center.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_cost_centers_listCRead-onlyIdempotent
π’ READ-ONLY Β· Cost Centers Β· GET /cost-centers/
List cost centers
Endpoint for retrieving a list of cost centers.
Inputs: page, page_size.
wafeq_cost_centers_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Cost Centers Β· PATCH /cost-centers/{id}/
Partial update cost center
Endpoint for partially updating an existing cost center.
Inputs: id (required), body, idempotency_key.
wafeq_cost_centers_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Cost Centers Β· GET /cost-centers/{id}/
Retrieve cost center
Endpoint for retrieving a single cost center.
Inputs: id (required).
wafeq_cost_centers_updateCIdempotent
π‘ WRITE Β· updates data Β· Cost Centers Β· PUT /cost-centers/{id}/
Update cost center
Endpoint for updating an existing cost center.
Inputs: id (required), body (required), idempotency_key.
wafeq_credit_notes_createA
π‘ WRITE Β· creates data Β· Credit Notes Β· POST /credit-notes/
Create credit note
Endpoint for creating a new credit note.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_credit_notes_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Credit Notes Β· DELETE /credit-notes/{id}/
Delete credit note
Endpoint for deleting an existing credit note.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_credit_notes_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Credit Notes Β· GET /credit-notes/{id}/download/
Download credit note PDF
Endpoint for downloading a PDF of the credit note.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_credit_notes_line_items_createA
π‘ WRITE Β· creates data Β· Credit Note Line Items Β· POST /credit-notes/{credit_note_id}/line-items/
Create credit note line item
Endpoint for creating a new credit note line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), credit_note_id (required), idempotency_key.
wafeq_credit_notes_line_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Credit Note Line Items Β· DELETE /credit-notes/{credit_note_id}/line-items/{id}/
Delete credit note line item
Endpoint for deleting an existing credit note line item.
Permanently removes the record.
Inputs: id (required), credit_note_id (required), idempotency_key.
wafeq_credit_notes_line_items_listCRead-onlyIdempotent
π’ READ-ONLY Β· Credit Note Line Items Β· GET /credit-notes/{credit_note_id}/line-items/
List credit note line items
Endpoint for retrieving a list of credit note line items.
Inputs: credit_note_id (required), page, page_size.
wafeq_credit_notes_line_items_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Credit Note Line Items Β· PATCH /credit-notes/{credit_note_id}/line-items/{id}/
Partial update credit note line item
Endpoint for partially updating an existing credit note line item.
Inputs: id (required), credit_note_id (required), body, idempotency_key.
wafeq_credit_notes_line_items_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Credit Note Line Items Β· GET /credit-notes/{credit_note_id}/line-items/{id}/
Retrieve credit note line item
Endpoint for retrieving a single credit note line item.
Inputs: id (required), credit_note_id (required).
wafeq_credit_notes_line_items_updateBIdempotent
π‘ WRITE Β· updates data Β· Credit Note Line Items Β· PUT /credit-notes/{credit_note_id}/line-items/{id}/
Update credit note line item
Endpoint for updating an existing credit note line item.
Inputs: id (required), body (required), credit_note_id (required), idempotency_key.
wafeq_credit_notes_listBRead-onlyIdempotent
π’ READ-ONLY Β· Credit Notes Β· GET /credit-notes/
List credit notes
Endpoint for retrieving a list of credit notes.
Inputs: page, branch, status, contact, +8 more.
wafeq_credit_notes_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Credit Notes Β· PATCH /credit-notes/{id}/
Partial update credit note
Endpoint for partially updating an existing credit note.
Inputs: id (required), body, idempotency_key.
wafeq_credit_notes_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Credit Notes Β· GET /credit-notes/{id}/
Retrieve credit note
Endpoint for retrieving a single credit note.
Inputs: id (required).
wafeq_credit_notes_tax_authority_report_createADestructive
π΄ IRREVERSIBLE Β· files the document with an external tax authority Β· Credit Notes Β· POST /credit-notes/{id}/tax-authority/report/
Report credit note to tax authority
Report the credit note to the tax authority for processing and validation.
Submits the document outside your organization for clearance/reporting. It CANNOT be recalled or undone through this API. Confirm with the user before calling, and check the document's contents first.
Inputs: id (required), idempotency_key.
wafeq_credit_notes_updateCIdempotent
π‘ WRITE Β· updates data Β· Credit Notes Β· PUT /credit-notes/{id}/
Update credit note
Endpoint for updating an existing credit note.
Inputs: id (required), body (required), idempotency_key.
wafeq_custom_fields_createA
π‘ WRITE Β· creates data Β· Custom Fields Β· POST /custom-fields/
Create custom field
Endpoint for creating a new custom field.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_custom_fields_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Custom Fields Β· DELETE /custom-fields/{id}/
Delete custom field
Endpoint for deleting an existing custom field. The custom field must not be in use on any documents.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_custom_fields_listBRead-onlyIdempotent
π’ READ-ONLY Β· Custom Fields Β· GET /custom-fields/
List custom fields
Endpoint for retrieving a list of custom fields.
Inputs: page, page_size.
wafeq_custom_fields_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Custom Fields Β· PATCH /custom-fields/{id}/
Partial update custom field
Endpoint for partially updating an existing custom field.
Inputs: id (required), body, idempotency_key.
wafeq_custom_fields_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Custom Fields Β· GET /custom-fields/{id}/
Retrieve custom field
Endpoint for retrieving a single custom field.
Inputs: id (required).
wafeq_custom_fields_updateCIdempotent
π‘ WRITE Β· updates data Β· Custom Fields Β· PUT /custom-fields/{id}/
Update custom field
Endpoint for updating an existing custom field.
Inputs: id (required), body (required), idempotency_key.
wafeq_debit_notes_createA
π‘ WRITE Β· creates data Β· Debit Notes Β· POST /debit-notes/
Create debit note
Endpoint for creating a new debit note.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_debit_notes_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Debit Notes Β· DELETE /debit-notes/{id}/
Delete debit note
Endpoint for deleting an existing debit note.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_debit_notes_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Debit Notes Β· GET /debit-notes/{id}/download/
Download debit note PDF
Endpoint for downloading a PDF of the debit note.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_debit_notes_line_items_createA
π‘ WRITE Β· creates data Β· Debit Note Line Items Β· POST /debit-notes/{debit_note_id}/line-items/
Create debit note line item
Endpoint for creating a new debit note line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), debit_note_id (required), idempotency_key.
wafeq_debit_notes_line_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Debit Note Line Items Β· DELETE /debit-notes/{debit_note_id}/line-items/{id}/
Delete debit note line item
Endpoint for deleting an existing debit note line item.
Permanently removes the record.
Inputs: id (required), debit_note_id (required), idempotency_key.
wafeq_debit_notes_line_items_listBRead-onlyIdempotent
π’ READ-ONLY Β· Debit Note Line Items Β· GET /debit-notes/{debit_note_id}/line-items/
List debit note line items
Endpoint for retrieving a list of debit note line items.
Inputs: debit_note_id (required), page, page_size.
wafeq_debit_notes_line_items_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Debit Note Line Items Β· PATCH /debit-notes/{debit_note_id}/line-items/{id}/
Partial update debit note line item
Endpoint for partially updating an existing debit note line item.
Inputs: id (required), debit_note_id (required), body, idempotency_key.
wafeq_debit_notes_line_items_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Debit Note Line Items Β· GET /debit-notes/{debit_note_id}/line-items/{id}/
Retrieve debit note line item
Endpoint for retrieving a single debit note line item.
Inputs: id (required), debit_note_id (required).
wafeq_debit_notes_line_items_updateBIdempotent
π‘ WRITE Β· updates data Β· Debit Note Line Items Β· PUT /debit-notes/{debit_note_id}/line-items/{id}/
Update debit note line item
Endpoint for updating an existing debit note line item.
Inputs: id (required), body (required), debit_note_id (required), idempotency_key.
wafeq_debit_notes_listCRead-onlyIdempotent
π’ READ-ONLY Β· Debit Notes Β· GET /debit-notes/
List debit notes
Endpoint for retrieving a list of debit notes.
Inputs: page, branch, status, contact, +8 more.
wafeq_debit_notes_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Debit Notes Β· PATCH /debit-notes/{id}/
Partial update debit note
Endpoint for partially updating an existing debit note.
Inputs: id (required), body, idempotency_key.
wafeq_debit_notes_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Debit Notes Β· GET /debit-notes/{id}/
Retrieve debit note
Endpoint for retrieving a single debit note.
Inputs: id (required).
wafeq_debit_notes_updateCIdempotent
π‘ WRITE Β· updates data Β· Debit Notes Β· PUT /debit-notes/{id}/
Update debit note
Endpoint for updating an existing debit note.
Inputs: id (required), body (required), idempotency_key.
wafeq_employees_createA
π‘ WRITE Β· creates data Β· Employees Β· POST /employees/
Create employee
Endpoint for creating a new employee.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_employees_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Employees Β· DELETE /employees/{id}/
Delete employee
Endpoint for deleting an existing employee.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_employees_listBRead-onlyIdempotent
π’ READ-ONLY Β· Employees Β· GET /employees/
List employees
Endpoint for retrieving a list of employees.
Inputs: page, country, page_size, created_ts_after, +3 more.
wafeq_employees_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Employees Β· PATCH /employees/{id}/
Partial update employee
Endpoint for partially updating an existing employee.
Inputs: id (required), body, idempotency_key.
wafeq_employees_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Employees Β· GET /employees/{id}/
Retrieve employee
Endpoint for retrieving a single employee.
Inputs: id (required).
wafeq_employees_updateCIdempotent
π‘ WRITE Β· updates data Β· Employees Β· PUT /employees/{id}/
Update employee
Endpoint for updating an existing employee.
Inputs: id (required), body (required), idempotency_key.
wafeq_expenses_createB
π‘ WRITE Β· creates data Β· Expenses Β· POST /expenses/
Create expense
Endpoint for creating a new expense.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_expenses_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Expenses Β· DELETE /expenses/{id}/
Delete expense
Endpoint for deleting an existing expense.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_expenses_listBRead-onlyIdempotent
π’ READ-ONLY Β· Expenses Β· GET /expenses/
List expenses
Endpoint for retrieving a list of expenses.
Inputs: date, page, branch, status, +11 more.
wafeq_expenses_mark_as_draft_createAIdempotent
π STATE CHANGE Β· moves a document in or out of the ledger Β· Expenses Β· POST /expenses/{id}/mark-as-draft/
Mark expense as draft
Moves a posted expense back to draft (removes its journal from the ledger).
Changes posted/draft status, which adds or removes the document's journal from the ledger. Reversible: the opposite tool undoes it.
Removes the expense's journal from the ledger and returns it to draft. Undo with mark expense as posted.
Inputs: id (required).
wafeq_expenses_mark_as_posted_createAIdempotent
π STATE CHANGE Β· moves a document in or out of the ledger Β· Expenses Β· POST /expenses/{id}/mark-as-posted/
Mark expense as posted
Posts a draft expense to the ledger (generates its journal).
Changes posted/draft status, which adds or removes the document's journal from the ledger. Reversible: the opposite tool undoes it.
Generates the expense's journal and posts it to the ledger. Undo with mark expense as draft.
Inputs: id (required).
wafeq_expenses_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Expenses Β· PATCH /expenses/{id}/
Partial update expense
Endpoint for partially updating an existing expense.
Inputs: id (required), body, idempotency_key.
wafeq_expenses_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Expenses Β· GET /expenses/{id}/
Retrieve expense
Endpoint for retrieving a single expense.
Inputs: id (required).
wafeq_expenses_updateCIdempotent
π‘ WRITE Β· updates data Β· Expenses Β· PUT /expenses/{id}/
Update expense
Endpoint for updating an existing expense.
Inputs: id (required), body (required), idempotency_key.
wafeq_files_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Files Β· DELETE /files/{id}/
Delete file
Endpoint for deleting an existing file.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_files_listCRead-onlyIdempotent
π’ READ-ONLY Β· Files Β· GET /files/
List files
Endpoint for retrieving a list of files.
Inputs: page, mime_type, page_size, file_size_max, +6 more.
wafeq_files_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Files Β· GET /files/{id}/
Retrieve file
Endpoint for retrieving a single file.
Inputs: id (required).
wafeq_invoices_createA
π‘ WRITE Β· creates data Β· Invoices Β· POST /invoices/
Create invoice
Endpoint for creating a new invoice.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_invoices_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Invoices Β· DELETE /invoices/{id}/
Delete invoice
Endpoint for deleting an existing invoice.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_invoices_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Invoices Β· GET /invoices/{id}/download/
Download invoice PDF
Endpoint for downloading a PDF of the invoice.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_invoices_line_items_createA
π‘ WRITE Β· creates data Β· Invoice Line Items Β· POST /invoices/{invoice_id}/line-items/
Create invoice line item
Endpoint for creating a new invoice line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), invoice_id (required), idempotency_key.
wafeq_invoices_line_items_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Invoice Line Items Β· DELETE /invoices/{invoice_id}/line-items/{id}/
Delete invoice line item
Endpoint for deleting an existing invoice line item.
Permanently removes the record.
Inputs: id (required), invoice_id (required), idempotency_key.
wafeq_invoices_line_items_listBRead-onlyIdempotent
π’ READ-ONLY Β· Invoice Line Items Β· GET /invoices/{invoice_id}/line-items/
List invoice line items
Endpoint for retrieving a list of invoice line items.
Inputs: invoice_id (required), page, page_size.
wafeq_invoices_line_items_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Invoice Line Items Β· PATCH /invoices/{invoice_id}/line-items/{id}/
Partial update invoice line item
Endpoint for partially updating an existing invoice line item.
Inputs: id (required), invoice_id (required), body, idempotency_key.
wafeq_invoices_line_items_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Invoice Line Items Β· GET /invoices/{invoice_id}/line-items/{id}/
Retrieve invoice line item
Endpoint for retrieving a single invoice line item.
Inputs: id (required), invoice_id (required).
wafeq_invoices_line_items_updateCIdempotent
π‘ WRITE Β· updates data Β· Invoice Line Items Β· PUT /invoices/{invoice_id}/line-items/{id}/
Update invoice line item
Endpoint for updating an existing invoice line item.
Inputs: id (required), body (required), invoice_id (required), idempotency_key.
wafeq_invoices_listBRead-onlyIdempotent
π’ READ-ONLY Β· Invoices Β· GET /invoices/
List invoices
Endpoint for retrieving a list of invoices.
Inputs: page, branch, status, contact, +8 more.
wafeq_invoices_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Invoices Β· PATCH /invoices/{id}/
Partial update invoice
Endpoint for partially updating an existing invoice.
Inputs: id (required), body, idempotency_key.
wafeq_invoices_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Invoices Β· GET /invoices/{id}/
Retrieve invoice
Endpoint for retrieving a single invoice.
Inputs: id (required).
wafeq_invoices_tax_authority_report_createADestructive
π΄ IRREVERSIBLE Β· files the document with an external tax authority Β· Invoices Β· POST /invoices/{id}/tax-authority/report/
Report invoice to tax authority
Report the invoice to the tax authority for processing and validation.
Submits the document outside your organization for clearance/reporting. It CANNOT be recalled or undone through this API. Confirm with the user before calling, and check the document's contents first.
Inputs: id (required), idempotency_key.
wafeq_invoices_updateCIdempotent
π‘ WRITE Β· updates data Β· Invoices Β· PUT /invoices/{id}/
Update invoice
Endpoint for updating an existing invoice.
Inputs: id (required), body (required), idempotency_key.
wafeq_items_createA
π‘ WRITE Β· creates data Β· Items Β· POST /items/
Create item
Endpoint for creating a new item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Items Β· DELETE /items/{id}/
Delete item
Endpoint for deleting an existing item.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_items_listBRead-onlyIdempotent
π’ READ-ONLY Β· Items Β· GET /items/
List items
Endpoint for retrieving a list of items.
Inputs: page, page_size, external_id, created_ts_after, +3 more.
wafeq_items_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Items Β· PATCH /items/{id}/
Partial update item
Endpoint for partially updating an existing item.
Inputs: id (required), body, idempotency_key.
wafeq_items_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Items Β· GET /items/{id}/
Retrieve item
Endpoint for retrieving a single item.
Inputs: id (required).
wafeq_items_updateCIdempotent
π‘ WRITE Β· updates data Β· Items Β· PUT /items/{id}/
Update item
Endpoint for updating an existing item.
Inputs: id (required), body (required), idempotency_key.
wafeq_item_units_of_measure_createA
π‘ WRITE Β· creates data Β· Item Unit Of Measures Β· POST /item-units-of-measure/
Create item unit of measure
Endpoint for creating a new item unit of measure.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_item_units_of_measure_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Item Unit Of Measures Β· DELETE /item-units-of-measure/{id}/
Delete item unit of measure
Endpoint for deleting an existing item unit of measure.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_item_units_of_measure_listBRead-onlyIdempotent
π’ READ-ONLY Β· Item Unit Of Measures Β· GET /item-units-of-measure/
List item unit of measures
Endpoint for retrieving a list of item unit of measures.
Inputs: page, page_size.
wafeq_item_units_of_measure_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Item Unit Of Measures Β· PATCH /item-units-of-measure/{id}/
Partial update item unit of measure
Endpoint for partially updating an existing item unit of measure.
Inputs: id (required), body, idempotency_key.
wafeq_item_units_of_measure_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Item Unit Of Measures Β· GET /item-units-of-measure/{id}/
Retrieve item unit of measure
Endpoint for retrieving a single item unit of measure.
Inputs: id (required).
wafeq_item_units_of_measure_updateCIdempotent
π‘ WRITE Β· updates data Β· Item Unit Of Measures Β· PUT /item-units-of-measure/{id}/
Update item unit of measure
Endpoint for updating an existing item unit of measure.
Inputs: id (required), body (required), idempotency_key.
wafeq_journal_line_items_listARead-onlyIdempotent
π’ READ-ONLY Β· Journal Line Items Β· GET /journal-line-items/
List journal line items
Endpoint for retrieving a list of journal line items.
NO DATE FIELD: rows carry created_ts (when the row was written to Wafeq) and modified_ts, but NOT the transaction date. created_ts is frequently a different month from the transaction β do not report it as the transaction date. To work by transaction date, filter with date_after/date_before, which DO operate on the real transaction date. For rows that come back already carrying their date, use the wafeq_account_ledger tool instead. Note this endpoint is cursor-paginated (cursor + page_size), unlike the rest of the API, which uses page.
Inputs: branch, cursor, account, contact, +12 more.
wafeq_journal_line_items_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Journal Line Items Β· GET /journal-line-items/{id}/
Retrieve journal line item
Endpoint for retrieving a single journal line item.
NO DATE FIELD: the row carries created_ts (when it was written to Wafeq), which is not the transaction date. The transaction date lives on the parent journal referenced by the journal field.
Inputs: id (required).
wafeq_manual_journals_createA
π‘ WRITE Β· creates data Β· Manual Journals Β· POST /manual-journals/
Create manual journal
Endpoint for creating a new manual journal.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_manual_journals_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Manual Journals Β· DELETE /manual-journals/{id}/
Delete manual journal
Endpoint for deleting an existing manual journal.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_manual_journals_listCRead-onlyIdempotent
π’ READ-ONLY Β· Manual Journals Β· GET /manual-journals/
List manual journals
Endpoint for retrieving a list of manual journals.
Inputs: page, page_size, reference, date_after, +6 more.
wafeq_manual_journals_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Manual Journals Β· PATCH /manual-journals/{id}/
Partial update manual journal
Endpoint for partially updating an existing manual journal.
Inputs: id (required), body, idempotency_key.
wafeq_manual_journals_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Manual Journals Β· GET /manual-journals/{id}/
Retrieve manual journal
Endpoint for retrieving a single manual journal.
Inputs: id (required).
wafeq_manual_journals_updateCIdempotent
π‘ WRITE Β· updates data Β· Manual Journals Β· PUT /manual-journals/{id}/
Update manual journal
Endpoint for updating an existing manual journal.
Inputs: id (required), body (required), idempotency_key.
wafeq_organization_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Organizations Β· GET /organization/
Retrieve organization
Endpoint for retrieving a single organization.
Inputs: no named parameters.
wafeq_payment_requests_createA
π‘ WRITE Β· creates data Β· Payment Requests Β· POST /payment_requests/
Create payment request
Endpoint for creating a new payment request.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_payment_requests_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Payment Requests Β· DELETE /payment_requests/{id}/
Delete payment request
Endpoint for deleting an existing payment request.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_payment_requests_listBRead-onlyIdempotent
π’ READ-ONLY Β· Payment Requests Β· GET /payment_requests/
List payment requests
Endpoint for retrieving a list of payment requests.
Inputs: page, status, currency, page_size, +8 more.
wafeq_payment_requests_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Payment Requests Β· PATCH /payment_requests/{id}/
Partial update payment request
Endpoint for partially updating an existing payment request.
Inputs: id (required), body, idempotency_key.
wafeq_payment_requests_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Payment Requests Β· GET /payment_requests/{id}/
Retrieve payment request
Endpoint for retrieving a single payment request.
Inputs: id (required).
wafeq_payment_requests_updateCIdempotent
π‘ WRITE Β· updates data Β· Payment Requests Β· PUT /payment_requests/{id}/
Update payment request
Endpoint for updating an existing payment request.
Inputs: id (required), body (required), idempotency_key.
wafeq_payments_createA
π‘ WRITE Β· creates data Β· Payments Β· POST /payments/
Create payment
Endpoint for creating a new payment.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_payments_destroyCDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Payments Β· DELETE /payments/{id}/
Delete payment
Endpoint for deleting an existing payment.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_payments_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Payments Β· GET /payments/{id}/download/
Download payment PDF
Endpoint for downloading a PDF of the payment.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_payments_listCRead-onlyIdempotent
π’ READ-ONLY Β· Payments Β· GET /payments/
List payments
Endpoint for retrieving a list of payments.
Inputs: date, page, contact, project, +9 more.
wafeq_payments_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Payments Β· PATCH /payments/{id}/
Partial update payment
Endpoint for partially updating an existing payment.
Inputs: id (required), body, idempotency_key.
wafeq_payments_retrieveCRead-onlyIdempotent
π’ READ-ONLY Β· Payments Β· GET /payments/{id}/
Retrieve payment
Endpoint for retrieving a single payment.
Inputs: id (required).
wafeq_payments_updateCIdempotent
π‘ WRITE Β· updates data Β· Payments Β· PUT /payments/{id}/
Update payment
Endpoint for updating an existing payment.
Inputs: id (required), body (required), idempotency_key.
wafeq_payslips_createA
π‘ WRITE Β· creates data Β· Payslips Β· POST /payslips/
Create payslip
Endpoint for creating a new payslip.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_payslips_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Payslips Β· DELETE /payslips/{id}/
Delete payslip
Endpoint for deleting an existing payslip.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_payslips_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Payslips Β· GET /payslips/{id}/download/
Download payslip PDF
Endpoint for downloading a PDF of the payslip.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_payslips_listBRead-onlyIdempotent
π’ READ-ONLY Β· Payslips Β· GET /payslips/
List payslips
Endpoint for retrieving a list of payslips.
Inputs: page, branch, project, employee, +7 more.
wafeq_payslips_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Payslips Β· PATCH /payslips/{id}/
Partial update payslip
Endpoint for partially updating an existing payslip.
Inputs: id (required), body, idempotency_key.
wafeq_payslips_pay_items_createB
π‘ WRITE Β· creates data Β· Pay Items Β· POST /payslips/{payslip_id}/pay-items/
Create pay item
Endpoint for creating a new pay item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), payslip_id (required), idempotency_key.
wafeq_payslips_pay_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Pay Items Β· DELETE /payslips/{payslip_id}/pay-items/{id}/
Delete pay item
Endpoint for deleting an existing pay item.
Permanently removes the record.
Inputs: id (required), payslip_id (required), idempotency_key.
wafeq_payslips_pay_items_listCRead-onlyIdempotent
π’ READ-ONLY Β· Pay Items Β· GET /payslips/{payslip_id}/pay-items/
List pay items
Endpoint for retrieving a list of pay items.
Inputs: payslip_id (required), page, page_size.
wafeq_payslips_pay_items_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Pay Items Β· PATCH /payslips/{payslip_id}/pay-items/{id}/
Partial update pay item
Endpoint for partially updating an existing pay item.
Inputs: id (required), payslip_id (required), body, idempotency_key.
wafeq_payslips_pay_items_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Pay Items Β· GET /payslips/{payslip_id}/pay-items/{id}/
Retrieve pay item
Endpoint for retrieving a single pay item.
Inputs: id (required), payslip_id (required).
wafeq_payslips_pay_items_updateBIdempotent
π‘ WRITE Β· updates data Β· Pay Items Β· PUT /payslips/{payslip_id}/pay-items/{id}/
Update pay item
Endpoint for updating an existing pay item.
Inputs: id (required), body (required), payslip_id (required), idempotency_key.
wafeq_payslips_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Payslips Β· GET /payslips/{id}/
Retrieve payslip
Endpoint for retrieving a single payslip.
Inputs: id (required).
wafeq_payslips_updateCIdempotent
π‘ WRITE Β· updates data Β· Payslips Β· PUT /payslips/{id}/
Update payslip
Endpoint for updating an existing payslip.
Inputs: id (required), body (required), idempotency_key.
wafeq_projects_createA
π‘ WRITE Β· creates data Β· Projects Β· POST /projects/
Create project
Endpoint for creating a new project.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_projects_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Projects Β· DELETE /projects/{id}/
Delete project
Endpoint for deleting an existing project.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_projects_listARead-onlyIdempotent
π’ READ-ONLY Β· Projects Β· GET /projects/
List projects
Endpoint for retrieving a list of projects.
Inputs: page, page_size.
wafeq_projects_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Projects Β· PATCH /projects/{id}/
Partial update project
Endpoint for partially updating an existing project.
Inputs: id (required), body, idempotency_key.
wafeq_projects_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Projects Β· GET /projects/{id}/
Retrieve project
Endpoint for retrieving a single project.
Inputs: id (required).
wafeq_projects_updateBIdempotent
π‘ WRITE Β· updates data Β· Projects Β· PUT /projects/{id}/
Update project
Endpoint for updating an existing project.
Inputs: id (required), body (required), idempotency_key.
wafeq_purchase_orders_bill_createA
π‘ WRITE Β· creates data Β· Purchase Orders Β· POST /purchase-orders/{id}/bill/
Convert purchase order to bill
This endpoint can be used to convert a purchase order to a draft bill.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Creates a NEW draft bill from the purchase order. Calling twice creates two bills β pass an idempotency_key if you may retry.
Inputs: id (required).
wafeq_purchase_orders_createA
π‘ WRITE Β· creates data Β· Purchase Orders Β· POST /purchase-orders/
Create purchase order
Endpoint for creating a new purchase order.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_purchase_orders_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Purchase Orders Β· DELETE /purchase-orders/{id}/
Delete purchase order
Endpoint for deleting an existing purchase order.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_purchase_orders_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Purchase Orders Β· GET /purchase-orders/{id}/download/
Download purchase order PDF
Endpoint for downloading a PDF of the purchase order.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_purchase_orders_line_items_createA
π‘ WRITE Β· creates data Β· Purchase Order Line Items Β· POST /purchase-orders/{purchase_order_id}/line-items/
Create purchase order line item
Endpoint for creating a new purchase order line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), purchase_order_id (required), idempotency_key.
wafeq_purchase_orders_line_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Purchase Order Line Items Β· DELETE /purchase-orders/{purchase_order_id}/line-items/{id}/
Delete purchase order line item
Endpoint for deleting an existing purchase order line item.
Permanently removes the record.
Inputs: id (required), purchase_order_id (required), idempotency_key.
wafeq_purchase_orders_line_items_listBRead-onlyIdempotent
π’ READ-ONLY Β· Purchase Order Line Items Β· GET /purchase-orders/{purchase_order_id}/line-items/
List purchase order line items
Endpoint for retrieving a list of purchase order line items.
Inputs: purchase_order_id (required), page, page_size.
wafeq_purchase_orders_line_items_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Purchase Order Line Items Β· PATCH /purchase-orders/{purchase_order_id}/line-items/{id}/
Partial update purchase order line item
Endpoint for partially updating an existing purchase order line item.
Inputs: id (required), purchase_order_id (required), body, idempotency_key.
wafeq_purchase_orders_line_items_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Purchase Order Line Items Β· GET /purchase-orders/{purchase_order_id}/line-items/{id}/
Retrieve purchase order line item
Endpoint for retrieving a single purchase order line item.
Inputs: id (required), purchase_order_id (required).
wafeq_purchase_orders_line_items_updateCIdempotent
π‘ WRITE Β· updates data Β· Purchase Order Line Items Β· PUT /purchase-orders/{purchase_order_id}/line-items/{id}/
Update purchase order line item
Endpoint for updating an existing purchase order line item.
Inputs: id (required), body (required), purchase_order_id (required), idempotency_key.
wafeq_purchase_orders_listCRead-onlyIdempotent
π’ READ-ONLY Β· Purchase Orders Β· GET /purchase-orders/
List purchase orders
Endpoint for retrieving a list of purchase orders.
Inputs: page, branch, status, contact, +9 more.
wafeq_purchase_orders_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Purchase Orders Β· PATCH /purchase-orders/{id}/
Partial update purchase order
Endpoint for partially updating an existing purchase order.
Inputs: id (required), body, idempotency_key.
wafeq_purchase_orders_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Purchase Orders Β· GET /purchase-orders/{id}/
Retrieve purchase order
Endpoint for retrieving a single purchase order.
Inputs: id (required).
wafeq_purchase_orders_updateCIdempotent
π‘ WRITE Β· updates data Β· Purchase Orders Β· PUT /purchase-orders/{id}/
Update purchase order
Endpoint for updating an existing purchase order.
Inputs: id (required), body (required), idempotency_key.
wafeq_quotes_createA
π‘ WRITE Β· creates data Β· Quotes Β· POST /quotes/
Create quote
Endpoint for creating a new quote.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_quotes_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Quotes Β· DELETE /quotes/{id}/
Delete quote
Endpoint for deleting an existing quote.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_quotes_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Quotes Β· GET /quotes/{id}/download/
Download quote PDF
Endpoint for downloading a PDF of the quote.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_quotes_invoice_createA
π‘ WRITE Β· creates data Β· Quotes Β· POST /quotes/{id}/invoice/
Convert quote to invoice
This endpoint can be used to convert a quote to an invoice.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Creates a NEW invoice from the quote. Calling twice creates two invoices β pass an idempotency_key if you may retry.
Inputs: id (required).
wafeq_quotes_line_items_createB
π‘ WRITE Β· creates data Β· Quote Line Items Β· POST /quotes/{quote_id}/line-items/
Create quote line item
Endpoint for creating a new quote line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), quote_id (required), idempotency_key.
wafeq_quotes_line_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Quote Line Items Β· DELETE /quotes/{quote_id}/line-items/{id}/
Delete quote line item
Endpoint for deleting an existing quote line item.
Permanently removes the record.
Inputs: id (required), quote_id (required), idempotency_key.
wafeq_quotes_line_items_listARead-onlyIdempotent
π’ READ-ONLY Β· Quote Line Items Β· GET /quotes/{quote_id}/line-items/
List quote line items
Endpoint for retrieving a list of quote line items.
Inputs: quote_id (required), page, page_size.
wafeq_quotes_line_items_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Quote Line Items Β· PATCH /quotes/{quote_id}/line-items/{id}/
Partial update quote line item
Endpoint for partially updating an existing quote line item.
Inputs: id (required), quote_id (required), body, idempotency_key.
wafeq_quotes_line_items_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Quote Line Items Β· GET /quotes/{quote_id}/line-items/{id}/
Retrieve quote line item
Endpoint for retrieving a single quote line item.
Inputs: id (required), quote_id (required).
wafeq_quotes_line_items_updateCIdempotent
π‘ WRITE Β· updates data Β· Quote Line Items Β· PUT /quotes/{quote_id}/line-items/{id}/
Update quote line item
Endpoint for updating an existing quote line item.
Inputs: id (required), body (required), quote_id (required), idempotency_key.
wafeq_quotes_listCRead-onlyIdempotent
π’ READ-ONLY Β· Quotes Β· GET /quotes/
List quotes
Endpoint for retrieving a list of quotes.
Inputs: page, branch, status, contact, +9 more.
wafeq_quotes_partial_updateAIdempotent
π‘ WRITE Β· updates data Β· Quotes Β· PATCH /quotes/{id}/
Partial update quote
Endpoint for partially updating an existing quote.
Inputs: id (required), body, idempotency_key.
wafeq_quotes_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Quotes Β· GET /quotes/{id}/
Retrieve quote
Endpoint for retrieving a single quote.
Inputs: id (required).
wafeq_quotes_updateCIdempotent
π‘ WRITE Β· updates data Β· Quotes Β· PUT /quotes/{id}/
Update quote
Endpoint for updating an existing quote.
Inputs: id (required), body (required), idempotency_key.
wafeq_reports_balance_sheet_listARead-onlyIdempotent
π’ READ-ONLY Β· Reports Β· GET /reports/balance-sheet/
Balance Sheet
Generate balance sheet report in currency at date with period_count periods to compare and group it by group_by parameter.
PARAMETERS: this report takes date (the 'as of' date) and period_count (0-11 extra comparison periods) β both REQUIRED. It does NOT take a date range; there is no date_from/date_to/date_after/date_before. group_by (month|year) sets the size of the comparison periods.
Inputs: date (required), period_count (required), currency, group_by, +3 more.
wafeq_reports_cash_flow_listARead-onlyIdempotent
π’ READ-ONLY Β· Reports Β· GET /reports/cash-flow/
Cash Flow
Generate cash flow report in currency from date_after to date_before range and group it by group_by parameter.
PARAMETERS: date_after and date_before are both REQUIRED and are the range bounds. There is no date_from/date_to. The same whole-period rule as profit-and-loss applies and is checked before sending.
Inputs: date_after (required), date_before (required), currency, group_by, +3 more.
wafeq_reports_profit_and_loss_listARead-onlyIdempotent
π’ READ-ONLY Β· Reports Β· GET /reports/profit-and-loss/
Profit and Loss
Generate profit and loss report in currency from date_after to date_before range and group it by group_by parameter.
PARAMETERS: date_after and date_before are both REQUIRED and are the range bounds. There is no date_from/date_to. The range must cover whole periods: with group_by=month (the default) it must run from the first day of a month to the last day of a month; with group_by=year it must run 1 January to 31 December. A partial year with group_by=year is rejected β use group_by=month for a year-to-date figure. This server checks the range before sending and tells you the nearest valid one.
Inputs: date_after (required), date_before (required), currency, group_by, +4 more.
wafeq_reports_trial_balance_listARead-onlyIdempotent
π’ READ-ONLY Β· Reports Β· GET /reports/trial-balance/
Trial Balance
Generate trial balance report from from_date to to_date optionally with PNL openings with_pnl_openings and accounts with zero balances include_zero_balances.
PARAMETERS: this report uses from_date and to_date (NOT date_after/date_before, and NOT date_from/date_to). Both are optional; omitting them returns the current financial year. Verified 2026-09-04: the dates ARE honoured when spelled correctly β a narrower range returns a smaller report. Wafeq silently ignores misspelled query parameters rather than erroring, so a wrong name looks like a working call that returns the default period.
Inputs: to_date, from_date, branch__in, contact__in, +4 more.
wafeq_requestADestructive
π΄ DESTRUCTIVE Β· arbitrary API call Β· Escape hatch Β· any method, any path
Call any Wafeq endpoint directly, with full control over method, path, query, body AND headers.
This is the FALLBACK, not the primary interface: every documented endpoint already has its own generated tool with a correct input schema and an accurate safety category. Reach for this only for something the bundled spec does not cover.
It is categorized destructive because the effect cannot be known in advance β the same tool can read a report or delete an invoice. Confirm with the user before any non-GET call.
Writes get an automatic X-Wafeq-Idempotency-Key unless you supply one in headers. Authorization is always set from the server's own credentials and cannot be overridden.
Inputs: path (required), method (required), body, query, +1 more.
wafeq_revenue_recognitions_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Revenue Recognitions Β· DELETE /revenue-recognitions/{id}/
Delete revenue recognition
Endpoint for deleting an existing revenue recognition.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_revenue_recognitions_end_early_createADestructive
π΄ IRREVERSIBLE Β· posts the remaining balance to the ledger Β· Revenue Recognitions Β· POST /revenue-recognitions/{id}/end-early/
End revenue recognition early
Endpoint for terminating a revenue recognition early, recognizing the remaining balance against the provided account.
Terminates a schedule early and recognizes its whole remaining balance immediately. There is no API undo. Run the matching preview_... tool first to see exactly what would be posted.
Inputs: id (required), body (required).
wafeq_revenue_recognitions_listCRead-onlyIdempotent
π’ READ-ONLY Β· Revenue Recognitions Β· GET /revenue-recognitions/
List revenue recognitions
Endpoint for retrieving a list of revenue recognitions.
Inputs: page, duration, page_size, status__in, +5 more.
wafeq_revenue_recognitions_preview_createARead-onlyIdempotent
π’ READ-ONLY Β· preview / simulation Β· Revenue Recognitions Β· POST /revenue-recognitions/preview/
Preview revenue recognition schedule
Endpoint for previewing the revenue recognition events that would be generated for the given schedule, without creating a revenue recognition.
This is a POST, but Wafeq documents it as a simulation: it returns the events that WOULD be generated and writes nothing to the ledger.
Inputs: body (required), duration, status__in, end_date_after, +4 more.
wafeq_revenue_recognitions_preview_end_early_createARead-onlyIdempotent
π’ READ-ONLY Β· preview / simulation Β· Revenue Recognitions Β· POST /revenue-recognitions/{id}/preview-end-early/
Preview early termination
Endpoint for previewing the remaining balance and the posted events that would be reversed by terminating the revenue recognition early at the given date.
This is a POST, but Wafeq documents it as a simulation: it returns the events that WOULD be generated and writes nothing to the ledger.
Inputs: id (required), body (required).
wafeq_revenue_recognitions_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Revenue Recognitions Β· GET /revenue-recognitions/{id}/
Retrieve revenue recognition
Endpoint for retrieving a single revenue recognition.
Inputs: id (required).
wafeq_simplified_invoices_createB
π‘ WRITE Β· creates data Β· Simplified Invoices Β· POST /simplified-invoices/
Create simplified invoice
Endpoint for creating a new simplified invoice.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_simplified_invoices_destroyBDestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Simplified Invoices Β· DELETE /simplified-invoices/{id}/
Delete simplified invoice
Endpoint for deleting an existing simplified invoice.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_simplified_invoices_download_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· returns a PDF Β· Simplified Invoices Β· GET /simplified-invoices/{id}/download/
Download simplified invoice PDF
Endpoint for downloading a PDF of the simplified invoice.
Returns the document as base64-encoded PDF bytes plus its size and content type. Nothing is modified.
Inputs: id (required).
wafeq_simplified_invoices_line_items_createA
π‘ WRITE Β· creates data Β· Simplified Invoice Line Items Β· POST /simplified-invoices/{invoice_id}/line-items/
Create simplified invoice line item
Endpoint for creating a new simplified invoice line item.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), invoice_id (required), idempotency_key.
wafeq_simplified_invoices_line_items_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Simplified Invoice Line Items Β· DELETE /simplified-invoices/{invoice_id}/line-items/{id}/
Delete simplified invoice line item
Endpoint for deleting an existing simplified invoice line item.
Permanently removes the record.
Inputs: id (required), invoice_id (required), idempotency_key.
wafeq_simplified_invoices_line_items_listBRead-onlyIdempotent
π’ READ-ONLY Β· Simplified Invoice Line Items Β· GET /simplified-invoices/{invoice_id}/line-items/
List simplified invoice line items
Endpoint for retrieving a list of simplified invoice line items.
Inputs: invoice_id (required), page, page_size.
wafeq_simplified_invoices_line_items_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Simplified Invoice Line Items Β· PATCH /simplified-invoices/{invoice_id}/line-items/{id}/
Partial update simplified invoice line item
Endpoint for partially updating an existing simplified invoice line item.
Inputs: id (required), invoice_id (required), body, idempotency_key.
wafeq_simplified_invoices_line_items_retrieveBRead-onlyIdempotent
π’ READ-ONLY Β· Simplified Invoice Line Items Β· GET /simplified-invoices/{invoice_id}/line-items/{id}/
Retrieve simplified invoice line item
Endpoint for retrieving a single simplified invoice line item.
Inputs: id (required), invoice_id (required).
wafeq_simplified_invoices_line_items_updateCIdempotent
π‘ WRITE Β· updates data Β· Simplified Invoice Line Items Β· PUT /simplified-invoices/{invoice_id}/line-items/{id}/
Update simplified invoice line item
Endpoint for updating an existing simplified invoice line item.
Inputs: id (required), body (required), invoice_id (required), idempotency_key.
wafeq_simplified_invoices_listBRead-onlyIdempotent
π’ READ-ONLY Β· Simplified Invoices Β· GET /simplified-invoices/
List simplified invoices
Endpoint for retrieving a list of simplified invoices.
Inputs: page, branch, contact, project, +7 more.
wafeq_simplified_invoices_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Simplified Invoices Β· PATCH /simplified-invoices/{id}/
Partial update simplified invoice
Endpoint for partially updating an existing simplified invoice.
Inputs: id (required), body, idempotency_key.
wafeq_simplified_invoices_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Simplified Invoices Β· GET /simplified-invoices/{id}/
Retrieve simplified invoice
Endpoint for retrieving a single simplified invoice.
Inputs: id (required).
wafeq_simplified_invoices_tax_authority_report_createADestructive
π΄ IRREVERSIBLE Β· files the document with an external tax authority Β· Simplified Invoices Β· POST /simplified-invoices/{id}/tax-authority/report/
Report simplified invoice to tax authority
Report the simplified invoice to the tax authority for processing and validation.
Submits the document outside your organization for clearance/reporting. It CANNOT be recalled or undone through this API. Confirm with the user before calling, and check the document's contents first.
Inputs: id (required), idempotency_key.
wafeq_simplified_invoices_updateCIdempotent
π‘ WRITE Β· updates data Β· Simplified Invoices Β· PUT /simplified-invoices/{id}/
Update simplified invoice
Endpoint for updating an existing simplified invoice.
Inputs: id (required), body (required), idempotency_key.
wafeq_tax_rates_listBRead-onlyIdempotent
π’ READ-ONLY Β· Tax Rates Β· GET /tax-rates/
List tax rates
Endpoint for retrieving a list of tax rates.
Inputs: page, tax_type, page_size, external_id, +4 more.
wafeq_units_of_measure_createB
π‘ WRITE Β· creates data Β· Unit Of Measures Β· POST /units-of-measure/
Create unit of measure
Endpoint for creating a new unit of measure.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_units_of_measure_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Unit Of Measures Β· DELETE /units-of-measure/{id}/
Delete unit of measure
Endpoint for deleting an existing unit of measure.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_units_of_measure_listBRead-onlyIdempotent
π’ READ-ONLY Β· Unit Of Measures Β· GET /units-of-measure/
List unit of measures
Endpoint for retrieving a list of unit of measures.
Inputs: page, page_size.
wafeq_units_of_measure_partial_updateCIdempotent
π‘ WRITE Β· updates data Β· Unit Of Measures Β· PATCH /units-of-measure/{id}/
Partial update unit of measure
Endpoint for partially updating an existing unit of measure.
Inputs: id (required), body, idempotency_key.
wafeq_units_of_measure_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Unit Of Measures Β· GET /units-of-measure/{id}/
Retrieve unit of measure
Endpoint for retrieving a single unit of measure.
Inputs: id (required).
wafeq_units_of_measure_updateBIdempotent
π‘ WRITE Β· updates data Β· Unit Of Measures Β· PUT /units-of-measure/{id}/
Update unit of measure
Endpoint for updating an existing unit of measure.
Inputs: id (required), body (required), idempotency_key.
wafeq_upload_fileA
π‘ WRITE Β· creates data Β· Files Β· POST /files/
Create file
Endpoint for creating a new file. Upload a file using multipart/form-data.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Send the file with file_base64 plus filename (and optionally content_type); this server builds the multipart/form-data body for you. For a file already on the machine running this server, pass file_path instead.
Inputs: filename (required), file_path, file_base64, content_type.
wafeq_upload_file_rawA
π‘ WRITE Β· creates data Β· Files Β· POST /files/raw/
Create file (advance)
Create file in advance mode by sending raw binary file content directly in the request body. You must include a Content-Disposition header with the filename.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Advanced upload: sends the bytes as the raw request body with a Content-Disposition header. Prefer upload_file unless you specifically need raw mode. Provide file_base64 + filename, or file_path.
Inputs: filename (required), file_path, file_base64, content_type.
wafeq_warehouses_createA
π‘ WRITE Β· creates data Β· Warehouses Β· POST /warehouses/
Create warehouse
Endpoint for creating a new warehouse.
Not idempotent β calling twice creates two records. Pass idempotency_key (or let the server generate one) to make a retry safe.
Inputs: body (required), idempotency_key.
wafeq_warehouses_destroyADestructiveIdempotent
π΄ DESTRUCTIVE Β· deletes Β· Warehouses Β· DELETE /warehouses/{id}/
Delete warehouse
Endpoint for deleting an existing warehouse.
Permanently removes the record.
Inputs: id (required), idempotency_key.
wafeq_warehouses_listBRead-onlyIdempotent
π’ READ-ONLY Β· Warehouses Β· GET /warehouses/
List warehouses
Endpoint for retrieving a list of warehouses.
Inputs: page, page_size.
wafeq_warehouses_partial_updateBIdempotent
π‘ WRITE Β· updates data Β· Warehouses Β· PATCH /warehouses/{id}/
Partial update warehouse
Endpoint for partially updating an existing warehouse.
Inputs: id (required), body, idempotency_key.
wafeq_warehouses_retrieveARead-onlyIdempotent
π’ READ-ONLY Β· Warehouses Β· GET /warehouses/{id}/
Retrieve warehouse
Endpoint for retrieving a single warehouse.
Inputs: id (required).
wafeq_warehouses_updateCIdempotent
π‘ WRITE Β· updates data Β· Warehouses Β· PUT /warehouses/{id}/
Update warehouse
Endpoint for updating an existing warehouse.
Inputs: id (required), body (required), idempotency_key.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
TDQS
Scored across 253 tools
Each of the ~250 tools targets a specific resource-action pair (e.g., list, create, retrieve, update, destroy, partial_update), and resource names in tool names make most selections unambiguous. A few intentional overlaps existβwafeq_upload_file vs wafeq_upload_file_raw, journal_line_items vs account_ledger, and the wafeq_request escape hatchβbut their descriptions clearly delineate when to use each.
The overwhelming majority follow a consistent wafeq_<resource>_<action> snake_case pattern with standardized verbs (list/create/retrieve/update/destroy/partial_update). Minor deviations exist for special tools (wafeq_upload_file, wafeq_account_ledger, wafeq_request) but these are few and intentional.
253 tools is an extreme count for a single MCP server, even for a full accounting API. This volume will overwhelm agent context and make tool selection slow and error-prone, pushing the score to the bottom of the scale. A broader API is better served by focused servers per domain (e.g., invoicing, payroll, reports).
The surface provides full CRUD plus domain actions for nearly every resource: PDF downloads, tax-authority reporting, draft/posted transitions, quote-to-invoice and purchase-order-to-bill conversions, and previews for amortizations and revenue recognitions. Minor gaps exist (organization is retrieve-only, tax_rates are list-only), but the core accounting workflows are well covered.
Maintenance
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Malaysian SME accounting, e-Invoice and payroll for your AI. 77 tools; writes are approved drafts.
The official hosted MCP server for the Unipile API. Your coding agent reads the exact API contract for LinkedIn (Classic, Sales Navigator, Recruiter), WhatsApp, Instagram, Telegram, Gmail, Outlook, IMAP and Google/Outlook Calendar, writes your integration in your stack, and tests each call on your own connected accounts. Five tools cover every route: search-endpoints, get-endpoint, list-endpoints, list-specs, execute-request. Key: a scoped Account API key in the X-API-KEY header, optional for reading the docs.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides seamless interaction with Workato's API through custom AI tools, enabling management of recipes, connections, connectors, folders, and activity logs.4MIT
- AlicenseBqualityBmaintenanceA Model Context Protocol (MCP) server for the Holded Invoice API. This server allows AI assistants like Claude to interact with Holded's invoicing, contacts, products, and more.119103 npm20MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for Watermelon.ai that exposes all 13 public API endpoints as tools, enabling AI assistants to manage contacts, conversations, messages, custom fields, and webhooks.MIT
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol (MCP) server for SuperFaktura invoicing system. Enables AI assistants to interact with SuperFaktura API for managing invoices, clients, and expenses.Apache 2.0