# Dukascopy — Zapi reference > Dukascopy's free tick and one-minute history, including XAUUSD gold going back to 2003. **Base URL:** `https://api.zapi.ink` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zapi.ink/dashboard/keys. **Response envelope:** `{ content, message, errors }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zapi.ink/api/finance/dukascopy - Endpoint catalog: https://zapi.ink/category/finance - Concise index: https://zapi.ink/llms.txt - Full reference: https://zapi.ink/llms-full.txt --- ## Dukascopy **Category:** finance · **Slug:** `dukascopy` **Detail page:** https://zapi.ink/api/finance/dukascopy Dukascopy's free tick and one-minute history, including XAUUSD gold going back to 2003. **Tags:** dukascopy, forex, gold, xauusd, tick-data, ohlcv ### Instrument List Dukascopy — the instrument manifest behind the historical archive. - **Method:** `GET` - **Endpoint:** `https://api.zapi.ink/v1/finance:dukascopy/instrument-list` - **Cache TTL:** 86400s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | no | Filter on instrument name, symbol or description. Omit for the full list | | `limit` | number | query | no | Items to return. Default 100, max 1000 | **cURL:** ```bash curl "https://api.zapi.ink/v1/finance:dukascopy/instrument-list?query=gold&limit=100" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zapi.ink/v1/finance:dukascopy/instrument-list?query=gold&limit=100", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zapi.ink/v1/finance:dukascopy/instrument-list?query=gold&limit=100", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 33, "items": [ { "tags": [ "" ], "symbol": "GDXUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "GDX.US/USD", "description": "VanEck Vectors Gold Miners ETF", "baseCurrency": "GDX.US", "quoteCurrency": "USD", "h1HistoryStart": "2017-03-01T18:00:00.000Z", "m1HistoryStart": "2017-03-01T18:12:00.000Z", "tickHistoryStart": "2017-03-01T18:13:24.243Z" }, { "tags": [ "" ], "symbol": "GDXJUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "GDXJ.US/USD", "description": "VanEck Vectors Junior Gold Miners ETF ", "baseCurrency": "GDXJ.US", "quoteCurrency": "USD", "h1HistoryStart": "2017-03-01T18:00:00.000Z", "m1HistoryStart": "2017-03-01T18:12:00.000Z", "tickHistoryStart": "2017-03-01T18:13:02.678Z" }, { "tags": [ "" ], "symbol": "GLDUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "GLD.US/USD", "description": "SPDR Gold Shares ETF", "baseCurrency": "GLD.US", "quoteCurrency": "USD", "h1HistoryStart": "2017-03-01T18:00:00.000Z", "m1HistoryStart": "2017-03-01T18:12:00.000Z", "tickHistoryStart": "2017-03-01T18:13:07.724Z" }, { "tags": [ "" ], "symbol": "GSUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "GS.US/USD", "description": "Goldman Sachs Group Inc/The", "baseCurrency": "GS.US", "quoteCurrency": "USD", "h1HistoryStart": "2017-03-01T18:00:00.000Z", "m1HistoryStart": "2017-03-01T18:12:00.000Z", "tickHistoryStart": "2017-03-01T18:12:59.163Z" }, { "tags": [ "" ], "symbol": "IGLNUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "IGLN.US/USD", "description": "iShares Physical Gold ETC - IGLN", "baseCurrency": "IGLN.US", "quoteCurrency": "USD", "h1HistoryStart": "2024-03-11T07:00:00.000Z", "m1HistoryStart": "2024-03-11T07:50:00.000Z", "tickHistoryStart": "2024-03-11T07:50:00.000Z" }, { "tags": [ "" ], "symbol": "RGLDUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "RGLD.US/USD", "description": "ROYAL GOLD INC", "baseCurrency": "RGLD.US", "quoteCurrency": "USD", "h1HistoryStart": "2022-05-13T14:00:00.000Z", "m1HistoryStart": "2022-05-13T14:04:00.000Z", "tickHistoryStart": "2022-05-13T14:04:53.418Z" }, { "tags": [ "" ], "symbol": "SGLDUSUSD", "pipValue": 0.01, "priceStep": 0.001, "instrument": "SGLD.US/USD", "description": "Invesco Physical Gold ETC", "baseCurrency": "SGLD.US", "quoteCurrency": "USD", "h1HistoryStart": "2024-03-18T05:00:00.000Z", "m1HistoryStart": "2024-03-18T05:00:00.000Z", "tickHistoryStart": "2024-03-18T05:00:04.000Z" }, { "tags": [ "" ], "symbol": "XAUAED", "pipValue": 0.01, "priceStep": 0.001, "instrument": "XAU/AED", "description": "Gold vs UAE Dirham", "baseCurrency": "XAU", "quoteCurrency": "AED", "h1HistoryStart": "2024-09-17T09:00:00.000Z", "m1HistoryStart": "2024-09-17T09:39:00.000Z", "tickHistoryStart": "2024-09-17T09:39:43.255Z" } ], "query": "gold", "total": 33, "dataset": "instruments", "hasMore": false, "provider": "dukascopy" } ``` --- ### M1 Candles Dukascopy — one-minute OHLC history from the public tick archive. - **Method:** `GET` - **Endpoint:** `https://api.zapi.ink/v1/finance:dukascopy/m1-candles` - **Cache TTL:** 604800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `instrument` | string | query | yes | Instrument name or archive symbol, e.g. XAU/USD or XAUUSD | | `from` | string | query | yes | First UTC day to include, YYYY-MM-DD | | `to` | string | query | no | Last UTC day to include, YYYY-MM-DD. Defaults to `from`. A long range can come back partial — resume from `nextFrom` when `hasMore` is true | | `side` | enum(bid|ask) | query | no | Quote side the candles are built from. Default bid | **cURL:** ```bash curl "https://api.zapi.ink/v1/finance:dukascopy/m1-candles?instrument=XAU%2FUSD&from=2024-01-15&to=2024-01-17&side=bid" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zapi.ink/v1/finance:dukascopy/m1-candles?instrument=XAU%2FUSD&from=2024-01-15&to=2024-01-17&side=bid", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zapi.ink/v1/finance:dukascopy/m1-candles?instrument=XAU%2FUSD&from=2024-01-15&to=2024-01-17&side=bid", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "to": "2024-01-15", "from": "2024-01-15", "side": "bid", "count": 1440, "items": [ { "low": 2046.815, "date": "2024-01-15T00:00:00.000Z", "high": 2047.675, "open": 2047.525, "close": 2046.935, "volume": 0.01064, "timestamp": 1705276800000 }, { "low": 2046.695, "date": "2024-01-15T00:01:00.000Z", "high": 2047.005, "open": 2046.855, "close": 2046.915, "volume": 0.00878, "timestamp": 1705276860000 }, { "low": 2046.935, "date": "2024-01-15T00:02:00.000Z", "high": 2047.445, "open": 2046.945, "close": 2047.035, "volume": 0.00876, "timestamp": 1705276920000 }, { "low": 2046.885, "date": "2024-01-15T00:03:00.000Z", "high": 2047.155, "open": 2046.985, "close": 2046.945, "volume": 0.00465, "timestamp": 1705276980000 }, { "low": 2046.445, "date": "2024-01-15T00:04:00.000Z", "high": 2047.015, "open": 2047.015, "close": 2046.445, "volume": 0.00717, "timestamp": 1705277040000 }, { "low": 2046.345, "date": "2024-01-15T00:05:00.000Z", "high": 2046.818, "open": 2046.465, "close": 2046.745, "volume": 0.00798, "timestamp": 1705277100000 }, { "low": 2046.155, "date": "2024-01-15T00:06:00.000Z", "high": 2046.748, "open": 2046.695, "close": 2046.265, "volume": 0.01471, "timestamp": 1705277160000 }, { "low": 2045.675, "date": "2024-01-15T00:07:00.000Z", "high": 2046.355, "open": 2046.255, "close": 2045.735, "volume": 0.01739, "timestamp": 1705277220000 } ], "symbol": "XAUUSD", "dataset": "m1-candles", "hasMore": false, "nextFrom": null, "provider": "dukascopy", "instrument": "XAU/USD", "daysCovered": 1, "rateLimited": false } ``` --- ### Ticks Dukascopy — raw ticks for one UTC hour, straight from the public archive. - **Method:** `GET` - **Endpoint:** `https://api.zapi.ink/v1/finance:dukascopy/ticks` - **Cache TTL:** 604800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `instrument` | string | query | yes | Instrument name or archive symbol, e.g. XAU/USD or XAUUSD | | `date` | string | query | yes | UTC day of the hour block, YYYY-MM-DD | | `hour` | number | query | yes | UTC hour block, 0-23 | **cURL:** ```bash curl "https://api.zapi.ink/v1/finance:dukascopy/ticks?instrument=XAU%2FUSD&date=2024-01-15&hour=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zapi.ink/v1/finance:dukascopy/ticks?instrument=XAU%2FUSD&date=2024-01-15&hour=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zapi.ink/v1/finance:dukascopy/ticks?instrument=XAU%2FUSD&date=2024-01-15&hour=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "date": "2024-01-15", "hour": 10, "count": 4022, "items": [ { "ask": 2055.235, "bid": 2054.925, "date": "2024-01-15T10:00:00.113Z", "spread": 0.31, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312800113 }, { "ask": 2055.245, "bid": 2054.935, "date": "2024-01-15T10:00:00.867Z", "spread": 0.31, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312800867 }, { "ask": 2055.285, "bid": 2054.985, "date": "2024-01-15T10:00:01.219Z", "spread": 0.3, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312801219 }, { "ask": 2055.345, "bid": 2055.045, "date": "2024-01-15T10:00:01.370Z", "spread": 0.3, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312801370 }, { "ask": 2055.295, "bid": 2055.005, "date": "2024-01-15T10:00:03.629Z", "spread": 0.29, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312803629 }, { "ask": 2055.325, "bid": 2055.035, "date": "2024-01-15T10:00:03.932Z", "spread": 0.29, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312803932 }, { "ask": 2055.315, "bid": 2055.015, "date": "2024-01-15T10:00:03.985Z", "spread": 0.3, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312803985 }, { "ask": 2055.335, "bid": 2055.035, "date": "2024-01-15T10:00:04.089Z", "spread": 0.3, "askVolume": 0.00012, "bidVolume": 0.00012, "timestamp": 1705312804089 } ], "symbol": "XAUUSD", "dataset": "ticks", "provider": "dukascopy", "instrument": "XAU/USD" } ``` --- ### Sentiment Index Dukascopy — the current retail long/short split across the whole quoted universe. - **Method:** `GET` - **Endpoint:** `https://api.zapi.ink/v1/finance:dukascopy/sentiment-index` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `type` | enum(swfx|ccy) | query | no | Universe keying. `swfx` quotes by traded pair (EUR/USD), `ccy` by underlying (0700.HK). Default swfx | | `query` | string | query | no | Filter on instrument name. Omit for the whole universe | | `limit` | number | query | no | Items to return. Default 100, max 1000 | **cURL:** ```bash curl "https://api.zapi.ink/v1/finance:dukascopy/sentiment-index?type=swfx&query=EUR&limit=100" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zapi.ink/v1/finance:dukascopy/sentiment-index?type=swfx&query=EUR&limit=100", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zapi.ink/v1/finance:dukascopy/sentiment-index?type=swfx&query=EUR&limit=100", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "asOf": "2026-08-21T02:00:00.000Z", "type": "swfx", "count": 100, "items": [ { "instrument": "0700.HK/HKD", "longPercent": 72.23, "instrumentId": "35136", "shortPercent": 27.77, "netShortPercent": -44.46 }, { "instrument": "AON.US/USD", "longPercent": 70.14, "instrumentId": "86258", "shortPercent": 29.86, "netShortPercent": -40.28 }, { "instrument": "AOS.US/USD", "longPercent": 72.21, "instrumentId": "86362", "shortPercent": 27.79, "netShortPercent": -44.42 }, { "instrument": "ARKI.US/USD", "longPercent": 70.08, "instrumentId": "99630", "shortPercent": 29.92, "netShortPercent": -40.16 }, { "instrument": "ASML.NL/EUR", "longPercent": 72.43, "instrumentId": "72048", "shortPercent": 27.57, "netShortPercent": -44.86 }, { "instrument": "AUD/CAD", "longPercent": 26.38, "instrumentId": "2050", "shortPercent": 73.62, "netShortPercent": 47.24 }, { "instrument": "AUD/CHF", "longPercent": 55.87, "instrumentId": "2052", "shortPercent": 44.13, "netShortPercent": -11.74 }, { "instrument": "AUD/DKK", "longPercent": 70.94, "instrumentId": "2256", "shortPercent": 29.06, "netShortPercent": -41.88 } ], "query": null, "total": 312, "dataset": "sentiment-index", "provider": "dukascopy" } ``` --- ### Sentiment History Dukascopy — how retail crowding sat at four fixed look-backs: now, 6 hours, - **Method:** `GET` - **Endpoint:** `https://api.zapi.ink/v1/finance:dukascopy/sentiment-history` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | no | Filter on instrument name; the slash is optional. Omit for the whole universe | | `limit` | number | query | no | Items to return. Default 100, max 1000 | **cURL:** ```bash curl "https://api.zapi.ink/v1/finance:dukascopy/sentiment-history?query=EUR%2FUSD&limit=100" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zapi.ink/v1/finance:dukascopy/sentiment-history?query=EUR%2FUSD&limit=100", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zapi.ink/v1/finance:dukascopy/sentiment-history?query=EUR%2FUSD&limit=100", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 1, "items": [ { "last": { "longPercent": 28.64, "shortPercent": 71.36, "netShortPercent": 42.72 }, "oneDay": { "longPercent": 30.96, "shortPercent": 69.04, "netShortPercent": 38.08 }, "fiveDays": { "longPercent": 37.07, "shortPercent": 62.93, "netShortPercent": 25.86 }, "sixHours": { "longPercent": 29.89, "shortPercent": 70.11, "netShortPercent": 40.22 }, "instrument": "EUR/USD", "nameTruncated": false } ], "query": "EUR/USD", "total": 1, "dataset": "sentiment-history", "provider": "dukascopy" } ``` --- _Generated: 2026-09-25T14:30:14.239Z_