# Duo Data Utilities – DST Transitions

> Duo Data Utilities – DST Transitions is a paid API for AI agents from api.duoleads.com, paid per call via x402, $0.05/call, status unknown (last checked 2026-10-02).

Lists daylight-saving time transitions for an IANA time zone over a date range, returning the exact shift instants, UTC offsets before/after, direction, and current DST state.

## Facts

- Endpoint: GET https://api.duoleads.com/v1/time/dst?utm_source=zero.xyz
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/duo-data-utilities-dst-transitions-d0a25e5a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_dfddhmJVCX1gydhDg770e

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability duo-data-utilities-dst-transitions-d0a25e5a
```

Example prompt: What are all the DST transitions for Europe/Amsterdam over the next two years starting from today — give me the exact moment each shift happens, the offsets before and after, and whether clocks jump forward or back?

## When to prefer this

Choose this endpoint when you need precise, structured DST transition data for any IANA time zone — including exact UTC instants of shifts, offsets before and after, and the direction of change. Prefer it over manual timezone libraries when operating in an agent environment without native TZ database access, or when you need a deterministic, auditable, API-delivered answer with pricing metadata. Well-suited for scheduling agents, calendar tools, and internationalization workflows.

## Known failure modes

- Invalid or unknown IANA time zone ID returns an error rather than an empty response
- Invalid date format for 'from' parameter causes a validation error
- Years parameter outside the 1-10 range may be rejected
- Malformed query parameters return HTTP 400
- Payment not included or insufficient triggers HTTP 402

## How this service works

List the daylight-saving transitions for an IANA time zone over a date range: the exact instant of each shift, the offset before and after, and whether local clocks jump forward or back. Returns the current offset and DST state, and the next transition from a given instant. Zones without DST return an empty transition list rather than an error.

## Output

A JSON object containing: the IANA zone name, whether it observes DST, the current offset and DST state, the next upcoming transition (with exact UTC instant, local times before/after, offsets before/after, abbreviations, and delta in seconds), and a full list of transitions over the requested date range. Zones without DST return an empty transitions array and observes_dst: false.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "zone"
     ],
     "properties": {
      "from": {
       "type": "string",
       "maxLength": 64,
       "description": "Start of the range: RFC 3339 or YYYY-MM-DD. Default now."
      },
      "zone": {
       "type": "string",
       "maxLength": 64,
       "description": "IANA time zone id."
      },
      "years": {
       "type": "string",
       "default": "2",
       "pattern": "^[+-]?\\d+$",
       "maxLength": 64,
       "description": "Length of the range in years, 1-10. Default 2."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "ok",
      "route",
      "version",
      "data",
      "meta"
     ],
     "properties": {
      "ok": {
       "const": true
      },
      "data": {
       "type": "object",
       "required": [
        "zone",
        "observes_dst",
        "current",
        "next",
        "transitions"
       ],
       "properties": {
        "next": {
         "type": [
          "object",
          "null"
         ],
         "required": [
          "at",
          "local_before",
          "local_after",
          "offset_before",
          "offset_after",
          "delta_seconds",
          "direction",
          "abbreviation_before",
          "abbreviation_after"
         ],
         "properties": {
          "at": {
           "type": "string"
          },
          "direction": {
           "type": "string"
          },
          "local_after": {
           "type": "string"
          },
          "local_before": {
           "type": "string"
          },
          "offset_after": {
           "type": "string"
          },
          "delta_seconds": {
           "type": "integer"
          },
          "offset_before": {
           "type": "string"
          },
          "abbreviation_after": {
           "type": "string"
          },
          "abbreviation_before": {
    
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "data": {
   "next": {
    "at": "2026-03-29T01:00:00.000Z",
    "direction": "forward",
    "local_after": "2026-03-29T03:00:00",
    "local_before": "2026-03-29T01:59:59",
    "offset_after": "+02:00",
    "delta_seconds": 3600,
    "offset_before": "+01:00",
    "abbreviation_after": "GMT+2",
    "abbreviation_before": "GMT+1"
   },
   "zone": "Europe/Amsterdam",
   "current": {
    "dst": false,
    "offset": "+01:00",
    "abbreviation": "GMT+1",
    "offset_seconds": 3600
   },
   "transitions": [
    {
     "at": "2026-03-29T01:00:00.000Z",
     "direction": "forward",
     "local_after": "2026-03-29T03:00:00",
     "local_before": "2026-03-29T01:59:59",
     "offset_after": "+02:00",
     "delta_seconds": 3600,
     "offset_before": "+01:00",
     "abbreviation_after": "GMT+2",
     "abbreviation_before": "GMT+1"
    },
    {
     "at": "2026-10-25T01:00:00.000Z",
     "direction": "back",
     "local_after": "2026-10-25T02:00:00",
     "local_before": "2026-10-25T02:59:59",
     "offset_after": "+01:00",
     "delta_seconds": -3600,
     "offset_before": "+02:00",
     "abbreviation_after": "GMT+1",
     "abbreviation_before": "GMT+2"
    }
   ],
   "observes_dst": true
  },
  "meta": {
   "price_usd": "0.05",
   "disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
   "request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
   "computed_at": "2026-09-28T12:00:00.000Z",
   "deterministic": true
  },
  "route": "/v1/time/dst",
  "version": "1.0.0"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/duo-data-utilities-dst-transitions-d0a25e5a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.duoleads.com](https://www.zero.xyz/host/api.duoleads.com/llms.txt)
