> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pineyard.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Timestamps & durations

> Dates are ISO 8601 in UTC. Call durations are in milliseconds.

## Timestamps

Timestamps in responses are **ISO 8601 strings in UTC** with millisecond precision:

```json theme={null}
"createdAt": "2026-10-14T09:30:12.345Z"
```

Send timestamps in requests the same way (ISO 8601). Include a `Z` or an explicit offset.

## Durations

**Call durations are in milliseconds.** Fields ending in `Ms` are milliseconds:

| Field | Meaning |
| - | - |
| `durationMs` | Length of a call (or of a webhook delivery attempt or workflow run). |
| `avgDurationMs` | Average call length in analytics. |
| `latencyMs`, `waitMs`, `avgMs` | Latencies and waits. |

### Fields in other units

The unit is part of every field name except for two speech-analysis fields (noted below). Don't assume
milliseconds for these:

| Field | Unit |
| - | - |
| `billDurationSeconds`, `billsecSeconds`, `billingIncrementSeconds` | seconds (billing) |
| `averageDurationSeconds`, `avgCallDurationSeconds` | seconds (campaign summaries) |
| `maxCallDurationSecs`, `durationSecs` (background audio), `timeoutSeconds` (functions) | seconds |
| `incompleteCallSeconds`, `messageRetryIntervalSeconds`, `messageRetryDelaysSeconds`, `messageRetryWindowSeconds` | seconds |
| `cooldownMinutes`, `retryDelaysMinutes`, `incompleteRetryIntervalMinutes`, `incompleteRetryDelaysMinutes` | minutes |
| `churnIntervalHours`, `churnDelaysHours` | hours |
| Speech analysis: `durationSeconds`, `averageDuration`, `totalDuration`, transcript `start` / `end` | seconds |
| Query filters `minDurationSec`, `maxDurationSec` | seconds |

## Money

Wallet amounts (for example `amountMicro`, `balanceAfter`) are **strings** in micro-units of the currency, so they
keep full precision. Parse them as decimals or big integers, not floats.

## Campaign time zones and calling windows

* `timezone` is an IANA time zone name such as `Asia/Kolkata` or `America/New_York`. When it is not set, campaigns
  use `Asia/Kolkata`.
* `dailyWindowStart` and `dailyWindowEnd` are local times in `HH:MM` format in the campaign's time zone. The start is
  inclusive and the end exclusive. Without them, calls are placed between 09:00 and 21:00 local time.
* Voice calls are placed only between 09:00 and 21:00 local time, even if the window you set is wider, unless
  Pineyard has agreed a different range for your workspace.
* Windows cannot cross midnight. A start at or after the end means the window is closed.
* `dialDays` lists the allowed weekdays, `0` = Sunday through `6` = Saturday, in the campaign's time zone.
* `scheduledStartAt` and `scheduledEndAt` are absolute ISO 8601 timestamps.

## Date filters and reporting days

* Date-range filters (`from`, `to`) take ISO 8601 timestamps. On `GET /calls` both ends are inclusive.
* Preset periods such as `today` or `last_7_days` (call exports, wallet ledger), the `today` analytics filter and
  daily analytics buckets use **India Standard Time** (`Asia/Kolkata`) calendar days.
* `GET /analytics/heatmap` accepts a `tz` parameter (default `UTC`) to bucket by hour in your time zone.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.