Foresight API quickstart

Create a developer key, request UNRATE observations, and read the stable response envelope.

1. Get a key

Start the Developer checkout at /api/billing/checkout?plan=developer. Use the returned API key as a bearer token.

2. First curl

curl "https://api.creativeforesight.io/v1/observations?indicator=UNRATE&limit=2" \
  -H "Authorization: Bearer $CF_API_KEY"

3. JavaScript

const response = await fetch(
  "https://api.creativeforesight.io/v1/observations?indicator=UNRATE&limit=2",
  { headers: { Authorization: `Bearer ${process.env.CF_API_KEY}` } },
);

if (!response.ok) {
  throw new Error(await response.text());
}

const body = await response.json();
for (const row of body.data) {
  console.log(row.period_start, row.value, row.revision, row.is_preliminary);
}
console.log(body.meta.indicator, body.meta.region, body.meta.unit);

4. Python

import os
import requests

response = requests.get(
    "https://api.creativeforesight.io/v1/observations",
    params={"indicator": "UNRATE", "limit": 2},
    headers={"Authorization": f"Bearer {os.environ['CF_API_KEY']}"},
    timeout=30,
)
response.raise_for_status()

body = response.json()
for row in body["data"]:
    print(row["period_start"], row["value"], row["revision"], row["is_preliminary"])
print(body["meta"]["indicator"], body["meta"]["region"], body["meta"]["unit"])

Response shape

GET /v1/observations returns { data, meta }. Each observation includes period bounds, a numeric value, revision number, preliminary flag, and source update timestamp.

{
  "data": [
    {
      "period_start": "2026-05-01",
      "period_end": null,
      "period_type": "month",
      "value": 4.2,
      "revision": 0,
      "is_preliminary": false,
      "source_updated_at": "2026-06-06T12:00:00.000Z"
    }
  ],
  "meta": {
    "indicator": "UNRATE",
    "region": "US",
    "unit": "percent",
    "total": 1,
    "limit": 2,
    "offset": 0
  }
}