Series
The workhorse endpoint. One call pattern covers every time series in the catalog: exchange rates, KIBOR, CPI, reserves, GDP, Raast, telecom and the rest.
GET /v1/series/{series_id} 🔑
| Param | Type | Default | Notes |
|---|---|---|---|
from |
date | - | Earliest observation date, inclusive. On Free/Developer it is raised to your history floor |
to |
date | - | Latest observation date, inclusive |
dims |
string | - | Dimension filter key:value, comma-separated for several, e.g. side:offer or city:karachi |
limit |
int | 1000 | 1-10000 |
sort |
asc|desc |
desc |
By date. With desc + limit you get the most recent N points |
format |
json|csv |
json |
CSV is formula-injection-safe |
transform |
string | - | yoy, mom, pct_change, 3ma, index, computed server-side (Transforms) |
vintage |
date | - | Pro/Business: values as first recorded on that date (Vintages) |
curl -H "X-API-Key: pk_live_xxx" \
"https://api.pakdatahub.com/v1/series/rates.kibor.3m?dims=side:offer&limit=2"
{
"success": true,
"series": "rates.kibor.3m",
"meta": { "name": "KIBOR 3-Month", "unit": "percent", "frequency": "daily",
"source": "SBP", "last_updated": "2026-09-24", "transform": null },
"data": [
{ "date": "2026-09-24", "value": 11.75, "dims": { "side": "offer" } },
{ "date": "2026-09-23", "value": 11.75, "dims": { "side": "offer" } }
],
"pagination": { "next_cursor": null, "count": 2 }
}
Response fields
| Field | Type | Meaning |
|---|---|---|
series |
string | The requested id |
meta.name |
string | Human-readable name |
meta.unit |
string | Unit after any transform (e.g. percent for yoy) |
meta.frequency |
string | daily, weekly, monthly, quarterly, half_yearly, annual, irregular |
meta.source |
string | SBP, PBS, PTA, MUFAP |
meta.last_updated |
date | Date of the newest observation we hold |
meta.transform |
string|null | Echo of the applied transform |
data[].date |
date | Observation date (month-end for monthly, quarter-end for quarterly) |
data[].value |
number|null | The value; null where a transform has no partner point |
data[].dims |
object | Dimension tags, e.g. {"side":"offer"}, {"city":"lahore"} |
pagination.count |
int | Rows returned. next_cursor is always null; page by date with from/to |
CSV
curl -H "X-API-Key: pk_live_xxx" \
"https://api.pakdatahub.com/v1/series/fx.rate.avg.usd?format=csv&limit=3"
series,date,value,dims
fx.rate.avg.usd,2026-08-31,277.9187406,{}
fx.rate.avg.usd,2026-07-31,278.2380682,{}
fx.rate.avg.usd,2026-06-30,278.5795536,{}
The content type is text/csv; charset=utf-8. This works directly with pandas.read_csv(url + "&api_key=..."), Excel "From Web" and Google Sheets IMPORTDATA.
Paging long histories
limit goes up to 10,000, which covers every monthly and quarterly series in one call. For long daily series, window by date:
import httpx
key = {"X-API-Key": "pk_live_xxx"}
url = "https://api.pakdatahub.com/v1/series/rates.pkrv.10y"
rows = []
for year in range(2022, 2027):
r = httpx.get(url, params={"from": f"{year}-01-01", "to": f"{year}-12-31",
"sort": "asc", "limit": 10000}, headers=key)
rows += r.json()["data"]
GET /v1/series/{series_id}/latest 🔑
The newest observation, and one row per dimension when the series has dimensions (e.g. both KIBOR bid and offer). It's cached server-side, so it's cheap and ideal for tickers and dashboards. It accepts dims (e.g. dims=side:offer for one row instead of every side) and format=csv.
curl -H "X-API-Key: pk_live_xxx" \
"https://api.pakdatahub.com/v1/series/fx.rate.avg.usd/latest"
{ "success": true, "series": "fx.rate.avg.usd",
"meta": { "name": "Average Exchange rate of Pak Rupees per U.S. Dollar", "unit": "pkr",
"frequency": "monthly", "source": "SBP", "last_updated": "2026-08-31", "transform": null },
"data": [ { "date": "2026-08-31", "value": 277.9187406, "dims": {} } ],
"pagination": { "next_cursor": null, "count": 1 } }
Errors
404: unknown series id. Check with/v1/search.422: bad date, baddimstoken (it must bekey:value), unknown transform, or a transform that doesn't fit the frequency.403:vintageon a plan below Pro.
Popular ids
fx.rate.avg.usd · fx.effective.reer · rates.kibor.3m · rates.policy · rates.pkrv.10y · inflation.cpi.national.yoy · inflation.cpi.urban.food · remittances.total · reserves.total_sbp_reserves · banking.m2 · industry.lsm.qim · payments.raast.total.value · telecom.subscribers.cellular.total · sme.npl_ratio. See the data dictionary for more.