Skip to content

Python

AbsTime resolves natural language time expressions for AI systems.

Built for agents, assistants, and workflows that need accurate time resolution.

This library provides convenient access to the AbsTime REST API from Python.

Terminal window
pip install abstime
import os
from abstime import AbsTime
client = AbsTime(api_key=os.environ["ABSTIME_API_KEY"])
result = client.resolve(
text="the last Friday of this month at 2 pm",
ref_time="2026-04-09T17:30:00Z",
ref_timezone="America/Los_Angeles",
)
print(result.time)
print(result.view)
# 2026-04-24T21:00:00Z
# Apr 24, 2026 2 PM

Use the same request contract shown throughout the docs:

FieldMeaningUseInstead of
textNatural language time expressiontwo days before ChristmasSchedule a meeting with Lily two days before Christmas.
ref_timeUTC reference time2026-04-09T17:30:00Z2026-04-09T10:30:00-07:00
ref_timezoneIANA reference timezoneAmerica/Los_AngelesPST
FieldMeaningExampleUse
timeResolved UTC timestamp2026-04-24T21:00:00ZStore, compare, or pass to downstream systems
viewHuman-readable local timeApr 24, 2026 2 PMShow the result in user interfaces
confidenceResolution confidence signalC0Guide result presentation and handling

Understand confidence:

  • C0: a clear resolution; safe to use directly.
  • C1: less obvious but the most reasonable resolution; still safe to use directly.
  • C2: sometimes arguable; user confirmation is recommended.

When the library is unable to connect to the API, for example due to a network failure or timeout, an abstime.APIConnectionError is raised.

When the API returns a non-success status code, a subclass of abstime.AbsTimeError is raised.

import abstime
client = abstime.AbsTime()
try:
result = client.resolve(
text="the last Friday of this month at 2 pm",
ref_time="2026-04-09T17:30:00Z",
ref_timezone="America/Los_Angeles",
)
except abstime.InputError as exc:
print(f"Invalid input: {exc}")
except abstime.RateLimitError as exc:
print(f"Request ID: {exc.request_id}")
except abstime.APIConnectionError:
print("The API could not be reached.")

Error codes are as follows:

Status CodeError
400InputError
401AuthenticationError
403PermissionDeniedError
429RateLimitError
>=500InternalError
N/AAPIConnectionError

All successful responses provide a request_id from the X-Request-Id response header.

print(result.request_id)

For failed requests, catch the error and read exc.request_id:

import abstime
try:
client.resolve(
text="the last Friday of this month at 2 pm",
ref_time="2026-04-09T17:30:00Z",
ref_timezone="America/Los_Angeles",
)
except abstime.AbsTimeError as exc:
print(exc.request_id)

The client retries certain transient failures once by default with a short backoff.

Requests time out after 15 seconds by default.

You can configure both when creating the client.

client = abstime.AbsTime(
timeout=5,
max_retries=0,
)

Import AsyncAbsTime instead of AbsTime and use await with each call:

import asyncio
from abstime import AsyncAbsTime
client = AsyncAbsTime()
async def main() -> None:
result = await client.resolve(
text="the last Friday of this month at 2 pm",
ref_time="2026-04-09T17:30:00Z",
ref_timezone="America/Los_Angeles",
)
print(result.time)
asyncio.run(main())

The synchronous and asynchronous clients are otherwise identical.

  • Python 3.9+