# mearef — Middle Eastern government reference data No account. No API key. No signup. Pay per call with x402. Clean, cited JSON for Middle Eastern government reference values — central-bank policy rates, VAT, minimum wages, CPI inflation, corporate & personal income tax, and public holidays across 9 countries. Every response includes the official source URL, effective date, last_confirmed date and a stale flag. ## If you sell over x402, start here Making a cross-border digital sale? Before you settle, know who accounts for the VAT: - POST https://mearef.dev/v1/vat/determine {seller_country, buyer_country, buyer_type?} → place of supply, who accounts for VAT, rate basis, registration trigger — each cited to the statute (EU / UK / South Africa). Wallet-only buyer with no tax id → treated as B2C and flagged. Out-of-scope country pairs are refused FREE (422), never guessed. $0.10/call. ## Sources & licence Every value is compiled from official government sources — central banks, finance and labour ministries, revenue authorities, statistical offices — and each response cites the exact official source URL it was verified against. Independent service, not affiliated with any government. Verify against the cited official source before legal or financial use. ## How to call a paid endpoint (x402) 1. Call the endpoint with no payment. You get HTTP 402. The payment challenge is in the base64-encoded `payment-required` RESPONSE HEADER (the body is an empty `{}`); decode it to see price, asset (USDC), network (eip155:8453 = Base) and pay-to address. 2. Sign the payment with any x402 client — @x402/fetch wraps fetch and does steps 1-3 automatically. 3. Retry with the signed X-PAYMENT header. You get HTTP 200 + the data; the settlement receipt is returned in the PAYMENT-RESPONSE header. Bad input is rejected FREE (4xx before the payment gate) — you never pay to fail. Free, no payment: https://mearef.dev/catalog · https://mearef.dev/llms.txt · https://mearef.dev/openapi.json · public holidays. ## Pricing ladder - $0.001/call — any single series value, its history, or the change feed - $0.02 — full regional snapshot (/v1/all) · VAT breakdown · working-days calculator - $0.05 — minimum-wage compliance check · income-tax computation - $0.10 — gross-to-net payroll (NG, KE) · cross-border VAT determination · webhook alerts Licensed tiers / API keys: api@3l-groupconsulting.co.za ## Machine-readable discovery - x402 resource map: https://mearef.dev/.well-known/x402.json - Agent card: https://mearef.dev/.well-known/agent.json - OpenAPI: https://mearef.dev/openapi.json - MCP server (streamable HTTP): https://mearef.dev/mcp — tools: list_series, get_public_holidays (free); get_series, get_series_history, get_snapshot (paid via x402 or api_key) ## Calendar coverage, and what we refuse Holiday calendars currently span 2026. Coverage is not uniform and the API tells you so rather than guessing: - A range outside a country's covered years is refused FREE (422, `calendar_coverage_exhausted`) with the exact covered period. We do not extrapolate: moving feasts, weekend-substitution days and ad-hoc proclamations are not derivable from prior years, so counting uncovered days would silently treat public holidays as working days. - For 9 calendars in this region the horizon is PERMANENT, not a backlog (`calendar_not_publishable_in_advance`, `permanent: true`). Islamic dates are confirmed by moon sighting days ahead; Hebrew and lunisolar festival dates are gazetted annually. Those responses name the specific blocking holidays and say what you can do instead — so do not queue a retry expecting the year to appear. - Some entries carry `date: null` with a `pending_window`: the holiday is statutory but the date is not yet gazetted. We publish the placeholder rather than inventing a date. - Holiday entries may carry a `note` explaining how that day behaves in that specific year (substitution, transfer, or why it was NOT moved). The `name` field is the stable holiday name and is safe to match on across years; `note` is the year-specific commentary. ## What we refuse to answer (and never charge for) Refusals are the point of this service, not a limitation of it. Every one below is FREE — validated before the payment gate, so you are never charged for a question we know we cannot answer well: - Out-of-coverage calendar ranges (above). - Countries where no single statutory rate exists (e.g. a VAT regime mid-transition) — refused with the explanation rather than collapsed to one misleading number. - Out-of-scope country pairs on /v1/vat/determine. - Settlement dates where we hold no verified convention for the market, or where the convention was not in force on the trade date — `no_verified_convention` / `convention_not_in_force_on_trade_date`, never a guessed cycle. Some series are deliberately ABSENT for the same reason: where a rate could not be verified against its own statute we omit the series rather than estimate it, and the endpoint 404s. ## Point-in-time reads (?as_at=YYYY-MM-DD) Any series accepts `?as_at=` and returns the value that was IN FORCE on that date, not today's. Back-dated payroll recalculation and prior-year filings need this, and picking the right row out of a full history yourself is a derivation that fails quietly — the wrong row still looks plausible. - GET https://mearef.dev/v1/{country}/{series}?as_at=2023-06-15 The answer carries `as_at`, `point_in_time: true` and `superseded_on`, so a historical value can never be mistaken for a live one. IT REFUSES RATHER THAN FALLING BACK: ask for a date before the earliest value we hold, or one after a value lapsed with no recorded successor, and you get a FREE 422 naming the earliest date we do hold. Returning the current value for a 2023 question would be the wrong number in the right shape. Bad dates are rejected free too, before the payment gate. ## Provenance — the evidence behind every citation - GET https://mearef.dev/provenance (free) — fleet-wide snapshot coverage - GET https://mearef.dev/provenance/{country}/{series} (free) — the sources behind one endpoint Citing a source is a claim. We fetch each cited document, record a sha256 over the exact bytes, and re-check daily, so you can see WHEN we verified against it and whether it has CHANGED since. Two things surface that a last-verified date cannot: rot (the document no longer resolves) and drift (it still resolves but its bytes changed, meaning the page you would follow no longer says what we read). Failure states are distinguished honestly — `gone` (404/410) is not the same as `blocked_to_automation` (the host refuses bots; a person can still open it), and we do not claim a live source is dead. We publish the fingerprint, not the mirrored document. ## Accuracy record - https://mearef.dev/accuracy — documented cases where widely-published reference values are wrong, each traced to the governing instrument, AND every error we have found in our own served data. The second half is the point: a vendor publishing only other people's mistakes is marketing. ## Human-readable pages - https://mearef.dev/countries — every country held - https://mearef.dev/{country} — e.g. /za — all series with values, sources and freshness - https://mearef.dev/{country}/{series} — e.g. /za/vat — value, what it means, earlier values, provenance - https://mearef.dev/sitemap.xml ## Series - GET /v1/ae/policy-rate — United Arab Emirates: CBUAE Base Rate (Overnight Deposit Facility) - GET /v1/ae/vat — United Arab Emirates: VAT standard rate - GET /v1/ae/minimum-wage — United Arab Emirates: Statutory minimum wage - GET /v1/ae/public-holidays — United Arab Emirates: Public holidays (free) - GET /v1/ae/cpi — United Arab Emirates: CPI inflation (year-on-year) - GET /v1/ae/corporate-tax — United Arab Emirates: Corporate Tax (headline rate) - GET /v1/ae/income-tax — United Arab Emirates: Personal income tax - GET /v1/bh/policy-rate — Bahrain: CBB Key Policy Rate — one-week deposit rate - GET /v1/bh/vat — Bahrain: Value-added tax (VAT) — standard rate - GET /v1/bh/minimum-wage — Bahrain: Statutory national minimum wage - GET /v1/bh/public-holidays — Bahrain: Official public holidays (free) - GET /v1/bh/cpi — Bahrain: Consumer Price Index (latest month) - GET /v1/bh/corporate-tax — Bahrain: General corporate income tax rate - GET /v1/bh/income-tax — Bahrain: Personal income tax - GET /v1/il/policy-rate — Israel: Bank of Israel interest rate - GET /v1/il/vat — Israel: VAT standard rate (מס ערך מוסף) - GET /v1/il/minimum-wage — Israel: National minimum wage - GET /v1/il/public-holidays — Israel: Public holidays (free) - GET /v1/il/cpi — Israel: CPI inflation (year-on-year) - GET /v1/il/corporate-tax — Israel: Corporate income tax rate - GET /v1/il/income-tax — Israel: Personal income tax brackets - GET /v1/iq/policy-rate — Iraq: CBI Policy Rate (سعر السياسة النقدية) - GET /v1/iq/vat — Iraq: Value-added tax (VAT) - GET /v1/iq/minimum-wage — Iraq: National minimum wage (الحد الأدنى للأجور) - GET /v1/iq/public-holidays — Iraq: Public holidays (free) - GET /v1/iq/cpi — Iraq: Consumer Price Index (latest month) - GET /v1/iq/corporate-tax — Iraq: Corporate income tax rate - GET /v1/iq/income-tax — Iraq: Personal income tax (progressive bands) - GET /v1/jo/policy-rate — Jordan: CBJ Main Policy Rate (سعر الفائدة الرئيسي للبنك المركزي) - GET /v1/jo/vat — Jordan: General Sales Tax (GST) — standard rate - GET /v1/jo/minimum-wage — Jordan: National minimum wage (الحد الأدنى للأجور) - GET /v1/jo/public-holidays — Jordan: Public holidays 2026 (free) - GET /v1/jo/cpi — Jordan: Consumer Price Index (latest month) - GET /v1/jo/corporate-tax — Jordan: Corporate income tax rate (legal persons) — general rate - GET /v1/jo/income-tax — Jordan: Personal income tax brackets (natural persons) - GET /v1/kw/policy-rate — Kuwait: CBK Discount Rate - GET /v1/kw/vat — Kuwait: Value-added tax (VAT) - GET /v1/kw/minimum-wage — Kuwait: National minimum wage (private and oil sector) - GET /v1/kw/public-holidays — Kuwait: Public holidays (free) - GET /v1/kw/cpi — Kuwait: Consumer Price Index (latest month) - GET /v1/kw/corporate-tax — Kuwait: Corporate income tax rate (foreign-owned share) - GET /v1/kw/income-tax — Kuwait: Personal income tax - GET /v1/om/policy-rate — Oman: CBO Repo Rate (interest rate on repurchase operations with the Central Bank of Oman) - GET /v1/om/vat — Oman: Value Added Tax (VAT) — standard rate - GET /v1/om/minimum-wage — Oman: Minimum wage for Omani nationals in the private sector - GET /v1/om/public-holidays — Oman: Official public holidays (free) - GET /v1/om/cpi — Oman: Consumer Price Index — annual inflation rate (latest month) - GET /v1/om/corporate-tax — Oman: Corporate income tax — standard rate - GET /v1/om/income-tax — Oman: Personal income tax - GET /v1/qa/policy-rate — Qatar: QCB Deposit Rate (QCBDR) - GET /v1/qa/vat — Qatar: Value-added tax (VAT) - GET /v1/qa/minimum-wage — Qatar: National non-discriminatory minimum wage - GET /v1/qa/public-holidays — Qatar: Public holidays (free) - GET /v1/qa/cpi — Qatar: Consumer Price Index (latest month) - GET /v1/qa/corporate-tax — Qatar: Corporate income tax rate - GET /v1/qa/income-tax — Qatar: Personal income tax - GET /v1/sa/policy-rate — Saudi Arabia: SAMA Repo Rate - GET /v1/sa/vat — Saudi Arabia: Value Added Tax (standard rate) - GET /v1/sa/minimum-wage — Saudi Arabia: Minimum wage for Saudi nationals (Saudization / Nitaqat) - GET /v1/sa/public-holidays — Saudi Arabia: Public holidays (free) - GET /v1/sa/cpi — Saudi Arabia: Consumer Price Index inflation (year-on-year) - GET /v1/sa/corporate-tax — Saudi Arabia: Corporate income tax rate - GET /v1/sa/income-tax — Saudi Arabia: Personal income tax History: GET /v1/{country}/{series}/history?from=YYYY-MM-DD&to=YYYY-MM-DD — e.g. GET /v1/ae/policy-rate/history?from=2026-01-01 Changes + freshness (FREE, unmetered): GET /v1/changes?since=YYYY-MM-DD — what changed, plus how many of our 63 series were re-verified against their official source in the last 1/7/30/90 days, and which one has gone longest without a check. `since` is optional (defaults to 30 days). ## Answers (computed verdicts, POST JSON) - POST /v1/answers/wage-check {country, amount, period, schedule?} — at/above/below the statutory minimum? Pass "schedule" to be measured against a sectoral/zonal/grade floor instead of the general one (Kenya 55, South Africa 24); omit it and we say so, because "above the national floor" is not "compliant". Keys: GET /catalog ($0.05) - POST /v1/answers/vat {country, amount, mode?, band?} — net/tax/gross breakdown incl. levy components. Pass "band" for a statutory reduced/zero/super-reduced rate; we publish what each band covers in the authority's own words but do not classify supplies into bands. Keys: GET /catalog ($0.02) - POST /v1/answers/working-days {country, from, to} — working days, holidays hit, next working day ($0.02) - POST /v1/answers/income-tax {country, taxable_income} — statutory income tax + per-bracket workings ($0.05) - POST /v1/answers/settlement-date {trade_date, calendars[], business_days | market + instrument_class} — settlement/value date: T+n business days across one or more national statutory calendars intersected, with a per-day trail, each calendar's basis and source, and the market cycle cited to its primary instrument where we hold one ($0.05). Cited cycles and what we deliberately refuse to cite: GET /settlement-conventions (free) - POST /v1/vat/determine {seller_country, buyer_country, buyer_type?} — cross-border VAT treatment of a digital-services sale: place of supply, who accounts, rate basis, registration trigger, with the applied rule cited to the statute. EU, UK, South Africa; unknown buyer → B2C-default, flagged; out-of-scope pairs refused FREE (422), never guessed, never charged ($0.10)