---
title: "Data conventions"
description: "Dates, units, nulls and point-in-time fields in Tapetide API responses."
canonical: "https://developers.tapetide.com/data-conventions/"
---

# Data conventions

These rules hold across every endpoint unless the reference for a field says otherwise.

## Dates and times

| Kind | Format | Example |
| --- | --- | --- |
| Trading date | `YYYY-MM-DD`, the IST calendar date of the session | `2026-10-14` |
| Timestamp | ISO-8601 in UTC | `2026-10-16T05:57:16Z` |
| Month | `YYYY-MM`, IST | `2026-10` |
| Financial period label | Month and year the period ends | `Jun 2026` |

`meta.as_of` is when the response was assembled. A field like `updated_at` or `snapshot_ts` is when the underlying value was observed. Quote both when freshness matters.

## Units

| Quantity | Unit |
| --- | --- |
| Prices, values, P&L | INR, as numbers |
| Market capitalisation and statement figures | INR crore unless a field says otherwise |
| Percentages | Numbers where `1.5` means 1.5% (`change_pct`, `iv_pct`, `delivery_pct`) |
| Volume, open interest | Shares or contracts, as integers |

## Null is not zero

A missing value is `null`. It means the figure is not published or not available for that row. It is never a stand-in for `0`. Treat `null` as unknown: exclude it from averages, do not plot it as zero, and do not compute a return across it.

## Symbols

-   Paths take NSE symbols such as `RELIANCE`, `TCS`, `HDFCBANK`. Search by name, BSE code or ISIN with `GET /v1/stocks?q=`.
-   Percent-encode `&`: `M&M` is `/v1/stocks/M%26M/quote`.
-   Responses carry `symbol` and, where relevant, `isin`. Internal ids are not part of the contract.

## Point-in-time fields

Historical research must use only what was known on each date. Tapetide exposes the fields that make that possible:

-   **Financial statements** carry an `availability` array per section: each period’s `available_from` date and a `basis` of `reported` (the actual result-declaration date) or `estimated` (a regulatory-lag estimate when the declaration date is unknown). The values are the latest reported figures and can include later restatements.
-   **Price history** `close` is adjusted for splits and bonuses, not for dividends. `raw_close` is the unadjusted print where available, and `null` where it is not. Never substitute `close` for a missing `raw_close`: the two are on different scales.
-   **Option chains** are end-of-day snapshots stamped with `snapshot_ts`.

See [Build a backtest with point-in-time data](/guides/backtest-point-in-time/).

## Field names

`snake_case`, plural kebab-case paths, and no abbreviations beyond the market’s own (`pe_ttm`, `oi`, `iv`).
