Migrating from v0

Migrating from v0 to v1

/v0 was deprecated in June 2025 and is scheduled to sunset on 2026-12-31. All /v0 responses now carry a Deprecation: true header and a Sunset header naming the shutdown date. New integrations should use /v1 exclusively; existing /v0 integrations must migrate before the sunset date or requests will start failing.

What changed

Side by side

v0 request (query-param auth, city only):

curl 'https://forge-api.dev/v0/weather?city=london&key=fg_live_xxxxxxxx'

v0 response (flat JSON):

{
  "name": "London",
  "country": "United Kingdom",
  "lat": 51.51,
  "lon": -0.13,
  "temp": 18.2,
  "humidity": 72,
  "wind": 14.4,
  "desc": "Partly cloudy",
  "code": 1003,
  "dt": 1752487200
}

v1 request (Bearer auth, same city):

curl 'https://forge-api.dev/v1/weather?city=london' \
  -H 'Authorization: Bearer fg_live_xxxxxxxx'

v1 response (enveloped, richer):

{
  "status": "ok",
  "data": {
    "location": { "name": "London", "country": "United Kingdom", "lat": 51.51, "lon": -0.13 },
    "current": {
      "temp": 18.2,
      "humidity": 72,
      "wind_speed": 14.4,
      "condition": { "code": 1003, "text": "Partly cloudy", "icon": "partly-cloudy" },
      "observed_at": "2026-07-14T10:00:00Z"
    }
  },
  "meta": { "request_id": "req_8f2a1c4e9b3d", "credits_used": 1, "units": "metric", "generated_at": "2026-07-14T10:00:03Z" }
}

Field mapping

v0 fieldv1 equivalentNotes
namedata.location.nameUnchanged meaning.
countrydata.location.countryUnchanged meaning.
lat / londata.location.lat / data.location.lonUnchanged meaning.
tempdata.current.tempv1 also adds feels_like and a Celsius-always temp_c.
humiditydata.current.humidityUnchanged meaning.
winddata.current.wind_speedNow accompanied by wind_deg and wind_dir.
descdata.current.condition.textNow part of a structured condition object.
codedata.current.condition.codeSame numeric condition codes.
dtdata.current.observed_atChanged from unix seconds to ISO 8601.
(n/a)meta.request_id, meta.credits_usedNew in v1; useful for support and billing reconciliation.

Migration checklist

  1. Move your key from the key query parameter into an Authorization: Bearer header.
  2. Update response parsing to read from data.current.* instead of the top level, and check status before assuming success.
  3. Convert dt (unix seconds) consumers to parse the ISO 8601 observed_at string instead.
  4. Add error handling for the structured {status:"error", error:{code,...}} shape described in errors.
  5. Switch traffic over gradually and confirm the Deprecation header disappears from your responses once fully migrated.

Timeline