API docs

Public JSON for agents, scripts, and small integrations. No account or API key needed.

What I am doing now

The same activities shown on my /now page, returned as structured JSON. Updates appear after the site deploys.

Read the /now page →Open JSON ↗

Request

GET /api/now

English is the default. Add ?lang=zh for Chinese or ?lang=en for English. No other query parameters are supported.

curl --fail --silent --show-error 'https://leodeng.dev/api/now'

Example response

This example shows one event. The actual response includes every event, including paused and finished activities.

{
  "schemaVersion": 1,
  "url": "https://leodeng.dev/now",
  "language": "en",
  "updatedAt": "2026-10-24T13:13:19+08:00",
  "detailsFormat": "markdown",
  "events": [
    {
      "id": "ipad-2-home-assistant",
      "title": "iPad 2 + Home Assistant",
      "status": "active",
      "startedAt": null,
      "updatedAt": "2026-10-24T13:13:19+08:00",
      "finishedAt": null,
      "details": "Working on compatibility between my iPad 2 and my Home Assistant server."
    }
  ]
}

Response fields

FieldMeaning
schemaVersionResponse format version. Currently 1.
urlThe human-readable /now page in the requested language. Resolve relative links in details against this URL.
languageThe language of title and details: en or zh.
updatedAtWhen the content was last edited, in ISO 8601 format. This is not the request time.
detailsFormatAlways markdown. Details are source text, without rendered HTML.
events[]All activities. Each has id, title, status, startedAt, updatedAt, finishedAt, and details.
events[].idStable activity identifier for matching activities between requests.
events[].statusactive: building now; recurring: ongoing activity; paused: on hold; finished: completed.
events[].startedAt / updatedAt / finishedAtEvent dates use ISO 8601 with a timezone offset when available. Missing dates are null. Preserve the supplied timezone.

Use it from an agent

Fetch the JSON, then filter events by status. For example, this lists the activities I am actively building:

curl --fail --silent --show-error 'https://leodeng.dev/api/now' \
  | jq '.events[] | select(.status == "active") | {id, title, details}'

HTTP behavior

GET returns JSON. HEAD returns the same response headers without a body. OPTIONS is supported for browser requests. Cross-origin reads are allowed. Responses may be cached for up to 60 seconds; polling once a minute is plenty.

Invalid query parameters return 400 with a JSON error. Unsupported methods return 405 with an Allow header. This endpoint is read-only.