Skip to content
Connect an agent

Build

Time zones

Schedule a post at the time a person said, in their own time zone, and let Flung work out the instant. Every time is kept in UTC; a zone only says how a time is read and shown.

TL;DR

QuestionAnswer
What does Flung store?Every time in UTC. Answers give publishAt in UTC, ending in Z.
Can I send a local time?Yes: publishAt: "2026-11-03T09:00", with no offset, and an optional timeZone such as Europe/Athens.
Which zone is used without timeZone?The person's own for an app a person approved and for an agent signed in, the workspace's default for an API key, else UTC.
How do I see what was used?Each post has publishAtLocal and timeZone beside publishAt. Who is calling says the caller's zone and the time there now.
Do times with an offset still work?Yes, exactly as before: 2026-11-03T09:00:00+02:00 and 2026-11-03T07:00:00Z are instants as they stand.
What if the clocks change at that time?A skipped time moves forward by the gap, a repeated one takes the earlier instant, and the answer has a warnings entry.

Two ways to give a time

publishAt takes either form, on Schedule a post, Change a scheduled post and Schedule a post from a template:

You sendFlung reads it as
2026-11-03T07:00:00ZThat instant, 07:00 UTC.
2026-11-03T09:00:00+02:00That instant, 07:00 UTC: the offset says where.
2026-11-03T09:00 with timeZone: "Europe/Athens"09:00 in Athens that day, 07:00 UTC in November.
2026-11-03T09:00 alone09:00 in the caller's zone, as below.

A local time is the clock on the wall: the same 09:00 in Athens is 07:00 UTC in winter and 06:00 UTC in summer, and Flung follows the change for you. Send a local time when a person said "9am"; send an instant when your own system already has one.

timeZone is an IANA name, such as Europe/Athens, America/New_York, Australia/Sydney or Asia/Kathmandu. Abbreviations such as EET and bare offsets such as +02:00 are not zones, and are refused with 422 and the code invalid_time_zone. With an instant, timeZone changes nothing about when the post goes; it names the zone publishAtLocal is written in.

The caller's zone

When a request names no timeZone, Flung reads a local time in the first of these that is set:

OrderZoneSet by
1The request's timeZoneYou, on each call.
2The person's ownTheir Account page in the Flung portal. Used for an app a person approved with OAuth, and for an AI agent they signed in.
3The workspace's defaultAn owner, in the workspace's settings in the portal. Used for an API key, which belongs to the workspace, not a person.
4UTCNobody has said a zone.

A person's zone is set the first time they sign in, from where they sign in from, and they can change it at any time; a zone they chose is never replaced. Who is calling answers the zone a call would use, where it came from (timeZoneSource: user, workspace or default), and the time now in UTC (now) and there (nowLocal):

curl
curl -X GET 'https://api.flung.dev/v1/me' \  --header "Authorization: Bearer $FLUNG_API_KEY"

Suggest posting times uses the caller's zone too when you leave out its timeZone, and each time it suggests carries that zone's offset, ready for publishAt.

What comes back

Every post, from creating, changing, reading and listing it, and in webhook payloads, says its time three ways:

FieldExampleMeaning
publishAt2026-11-03T07:00:00.000ZWhen it publishes, in UTC.
publishAtLocal2026-11-03T09:00:00+02:00The same instant as the local time in timeZone, with that day's offset.
timeZoneEurope/AthensThe zone the time was given in. A post from before zones were kept shows the caller's.

Show a person publishAtLocal, and compare and sort by publishAt.

When the clocks change

Twice a year, many zones skip an hour or repeat one. In Athens the clocks go from 03:00 to 04:00 on the last Sunday of March, and from 04:00 back to 03:00 on the last Sunday of October.

You send, in Europe/AthensThat dayFlung scheduleswarnings
2026-03-29T03:3003:30 never happens04:30 local, 01:30Z: moved forward by the gaplocal_time_skipped
2026-10-25T03:3003:30 happens twiceThe first one, still on summer time, 00:30Zlocal_time_ambiguous
2026-10-25T04:00Once02:00ZNone

A warnings entry has a code and a message for a person, and appears only on the answer that created or changed the post. To pick the second 03:30 of a repeated hour, send it with its offset, 2026-10-25T03:30:00+02:00.

AI agents

The MCP server works the same way, so an agent never does time-zone arithmetic. Its scheduling tools take publishAt as the local time the person said, and timeZone only when they named a place ("9am Athens time"). The answer gives publishAt in UTC with publishAtLocal and timeZone, so the agent can confirm the time back in the person's own words. The get_time tool says the person's zone and the time there now, for turning "tomorrow morning" into a date. See schedule_post and get_time in the tool reference.

In the portal

On the Account page, the Time zone field shows the zone dates are written in for you, with its offset from UTC and the time there now. It says when it was set from your location; choose another at any time. A workspace's owners set its default zone, for its API keys, in the workspace's settings. Every date and time in the portal is shown in your zone, with the zone's short name where the time matters. To move a scheduled post, open it on the Activity page and choose Change time: pick the new time in your zone, and the field shows it in UTC too before you save.