Home Documentation Central Bank Rates Tax Authority Rates Playground Pricing API Status Blog About FAQ Contact Us

Swiss Customs Exchange Rate API: The Daily BAZG Rate as JSON

Reviewed by Madhushan, Fintech Developer — August 2026

Switzerland has an unusual gap: the Swiss National Bank publishes no daily official exchange rate. Its published series are monthly averages. So when a Swiss customs declaration or an import-VAT calculation needs "the official rate for this date", it does not come from the central bank at all — it comes from the Federal Office for Customs and Border Security (BAZG), which publishes a daily rate for exactly that purpose.

This guide covers how that rate works, the timing rule that catches people out, and how to pull it as JSON — 72 currencies against the franc, with history back to 2000.

EUR → CHF — official Swiss Federal Office for Customs and Border Security daily customs rate
Weekly observations, Aug '25 – Aug '26 · Swiss francs per 1 euro
0.92000.9400Aug '25Nov '25Feb '26May '26Aug '260.94562025-08-03: 0.9398 CHF2025-08-10: 0.9502 CHF2025-08-17: 0.9503 CHF2025-08-24: 0.9495 CHF2025-08-31: 0.9457 CHF2025-09-07: 0.9485 CHF2025-09-14: 0.9434 CHF2025-09-21: 0.9435 CHF2025-09-28: 0.9429 CHF2025-10-05: 0.9444 CHF2025-10-12: 0.9422 CHF2025-10-19: 0.9353 CHF2025-10-26: 0.9330 CHF2025-11-02: 0.9369 CHF2025-11-09: 0.9408 CHF2025-11-16: 0.9316 CHF2025-11-23: 0.9378 CHF2025-11-30: 0.9422 CHF2025-12-07: 0.9453 CHF2025-12-14: 0.9420 CHF2025-12-21: 0.9412 CHF2025-12-28: 0.9380 CHF2025-12-31: 0.9383 CHF2026-01-04: 0.9397 CHF2026-01-11: 0.9410 CHF2026-01-18: 0.9414 CHF2026-01-25: 0.9376 CHF2026-02-01: 0.9253 CHF2026-02-08: 0.9252 CHF2026-02-15: 0.9225 CHF2026-02-22: 0.9214 CHF2026-03-01: 0.9216 CHF2026-03-08: 0.9159 CHF2026-03-15: 0.9144 CHF2026-03-22: 0.9214 CHF2026-03-29: 0.9265 CHF2026-04-05: 0.9295 CHF2026-04-12: 0.9335 CHF2026-04-19: 0.9317 CHF2026-04-26: 0.9281 CHF2026-05-03: 0.9260 CHF2026-05-10: 0.9247 CHF2026-05-17: 0.9241 CHF2026-05-24: 0.9230 CHF2026-05-31: 0.9221 CHF2026-06-07: 0.9260 CHF2026-06-14: 0.9299 CHF2026-06-21: 0.9321 CHF2026-06-28: 0.9302 CHF2026-07-05: 0.9279 CHF2026-07-12: 0.9302 CHF2026-07-19: 0.9347 CHF2026-07-26: 0.9388 CHF2026-08-02: 0.9381 CHF2026-08-09: 0.9456 CHF
Source: Swiss Federal Office for Customs and Border Security published rates · chart data from the AllRatesToday API (/api/v1/central-bank/bazg/history?source=EUR&target=CHF).

What BAZG publishes

The timing rule: today's publication is tomorrow's rate

BAZG publishes in the morning, and the rate it publishes applies to the next day. A Friday publication carries Saturday, Sunday and Monday. This is the single most common way to get Swiss customs conversion wrong: if you take the rate published on the day of your declaration, you are one publication ahead of the rate that legally applies.

Our API stores these rates by the date they are valid for, not the date they were published. So a request for a given date returns the rate that was in force on that date, with no arithmetic of your own — and because weekend days are covered explicitly, a Saturday request returns a real answer rather than a fallback.

Get the rates (REST)

curl "https://allratestoday.com/api/v1/central-bank/bazg/latest?source=EUR&target=CHF" \
  -H "Authorization: Bearer YOUR_API_KEY"

The latest table is available on every plan, including the free tier (300 requests/month, no credit card). Add &format=xlsx or &format=csv if the destination is a spreadsheet rather than code.

The npm SDK

npm install bazg-exchange-rate
import { getRate, getRatesForDate } from 'bazg-exchange-rate';

// The official customs rate in force right now
const pair = await getRate('EUR', 'CHF', { apiKey: 'art_live_...' });
console.log(pair.rate, pair.rate_date);

// The rate that applied on a past declaration date
const day = await getRatesForDate('2026-03-20', { apiKey: 'art_live_...' });

Zero dependencies, TypeScript types included, and it runs anywhere fetch exists — Node 18+, Bun, Deno, and edge runtimes.

BAZG or the SNB — which do you need?

Both are official, and they answer different questions. Use BAZG when a Swiss customs declaration, an import-VAT calculation, or any rule that names the customs rate is involved: it is daily and it is the legally applicable number. Use the Swiss National Bank series when you need a monthly average — for period reporting, or for the long historical record, which reaches back to 1914.

They are served by the same API and the same key, so switching is a change of source code in the URL.

Two decades of Swiss history

The series starts in January 2000 and runs unbroken through the euro's introduction, the 2008 crisis, the 2011 franc cap and its removal in 2015 — the day the franc jumped roughly 20% against the euro in minutes. For restating old declarations or auditing historical import valuations, it is the official record for the period rather than a market approximation of it.

FAQ

Which exchange rate applies to Swiss customs declarations?

The rate published by BAZG that is valid for the day of the declaration. BAZG publishes each working morning a rate that takes effect the following day, so a Friday publication covers Saturday, Sunday and Monday.

Is the BAZG rate the same as the Swiss National Bank rate?

No. The SNB publishes monthly average exchange rates and no daily official fixing. BAZG publishes a daily rate, and it is the one Swiss customs declarations and import VAT are calculated with.

How far back do Swiss customs exchange rates go?

The API serves the BAZG series from January 2000 onward — over half a million rates across 72 currencies today, and 83 including currencies retired since 2000.

Official Swiss customs rates, as JSON

The latest table is free — 300 requests/month, no credit card.

Get your free API key

Related Articles