Exchange rate API

The USD and EUR rates from the homepage as JSON, for apps built in Suriname. Free to use: ask for a token and you're set.

Request a token

Authentication

Every request needs a bearer token in the Authorization header. Tokens are issued by hand: ask dulamari on WhatsApp.

Authorization: Bearer <your-token>

Endpoint

GEThttps://koers.dulamari.com/api/

Returns the latest rate for every bank, the average buy and sell across all banks, and the latest fuel prices. There is one endpoint and it always returns the full dataset.

  • Rates have up to 3 decimals. Trailing zeros are dropped, so 37.4 means 37.400.
  • If a bank's latest scrape failed, you get its last good rate; updated_at shows when it was recorded.
  • All timestamps are Suriname time (UTC−3), formatted YYYY-MM-DD HH:MM:SS.

Example request

curl -H "Authorization: Bearer <your-token>" \
     https://koers.dulamari.com/api/

Example response

Shortened to two banks; the real response lists all of them.

{
    "banks": [
        {
            "bank": "cbvs",
            "name": "CBvS",
            "usd": { "buy": 37.35, "sell": 37.754 },
            "eur": { "buy": 41.75, "sell": 42.338 },
            "updated_at": "2026-11-09 11:17:57",
            "published_at": "2026-11-09 10:00:00"
        },
        {
            "bank": "cme",
            "name": "CME",
            "usd": { "buy": 37.4, "sell": 37.7 },
            "eur": { "buy": 40.8, "sell": 41.85 },
            "updated_at": "2026-11-09 10:00:01",
            "published_at": "2026-11-09 10:00:01"
        }
    ],
    "average": {
        "usd": { "buy": 37.29, "sell": 37.792 },
        "eur": { "buy": 41.538, "sell": 42.282 }
    },
    "fuel": {
        "gasoline": 48.32,
        "diesel": 53.27,
        "currency": "SRD",
        "unit": "liter",
        "price_date": "2026-11-09",
        "updated_at": "2026-11-09 10:00:01"
    },
    "updated_at": "2026-11-09 11:17:57"
}

Response fields

FieldTypeMeaning
banks[]arrayOne entry per bank or exchange.
bankstringShort id, e.g. cbvs, finabank.
namestringDisplay name.
usd.buy, eur.buynumberSRD the bank pays you for 1 USD or EUR.
usd.sell, eur.sellnumberSRD you pay the bank for 1 USD or EUR.
updated_atstringWhen we recorded the rate.
published_atstringWhen the bank published it. Only CBvS gives its own time; for the others it equals updated_at.
averageobjectAverage buy and sell across all banks, per currency.
fuelobject | nullGasoline and diesel in SRD per liter (source: GOw2). null when unavailable.
updated_at (top level)stringThe newest updated_at of all banks.

Rate limits

Rates refresh at 6:00, 8:00, 10:00, 12:30 and 15:00 SRT, so each token gets up to 100 requests per day. The count resets at midnight SRT. Polling more often won't return newer data.

Every response tells you what's left:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97

Errors

Errors come back as JSON with an error message.

StatusMeaning
200Success, JSON body returned.
401Missing, malformed or invalid bearer token.
404No rate data available right now.
429Daily limit reached. The Retry-After header gives the seconds until reset.
500Server or database error.

Ready to build?

Send a short note on WhatsApp about your app and you'll get a token.

Request a token