Temporis Documentation

Forecasting, as an API.

Temporis turns your time series into probabilistic forecasts. Stream your numbers in, describe how they should be read with a data profile, and call one endpoint to generate forecasts of what comes next — no models to train, no infrastructure to run.

The shape of a Temporis workflow

Everything in Temporis revolves around three nouns. Once they click, the whole API follows naturally.

Data source
A named stream you push raw observations into — like a table of (timestamp, name, value) rows. One data source can hold many series.
Data profile
A saved recipe that tells Temporis how to read a data source: which series, at what interval, how much history, and how to clean it. This is what you forecast against.
Prediction
One call to /v1/predict with a data profile returns several possible futures, each a full trajectory of values going forward.

You manage data sources and data profiles in the Temporis dashboard, and you do the high-volume work — sending data and requesting forecasts — through the API documented here.

A first taste

Sending observations and asking for a forecast looks like this:

# 1. Send observations to a data source
curl -X POST "https://api.temporis.co/v1/data_sources/ingest" \
  -H "Authorization: Bearer $TEMPORIS_TOKEN" \
  --json '{
    "data_source": "store_metrics",
    "records": [
      { "timestamp": 1716249600, "name": "orders", "value": 42 },
      { "timestamp": 1716253200, "name": "orders", "value": 51 }
    ]
  }'

# 2. Ask a data profile for the next steps
curl -X POST "https://api.temporis.co/v1/predict" \
  -H "Authorization: Bearer $TEMPORIS_TOKEN" \
  --json '{
    "data_profile": "hourly_orders",
    "count": 5,
    "temperature": 1.0,
    "top_p": 0.9
  }'
import os, requests

BASE = "https://api.temporis.co"
headers = {"Authorization": f"Bearer {os.environ['TEMPORIS_TOKEN']}"}

# 1. Send observations to a data source
requests.post(f"{BASE}/v1/data_sources/ingest", headers=headers, json={
    "data_source": "store_metrics",
    "records": [
        {"timestamp": 1716249600, "name": "orders", "value": 42},
        {"timestamp": 1716253200, "name": "orders", "value": 51},
    ],
}).raise_for_status()

# 2. Ask a data profile for the next steps
forecast = requests.post(f"{BASE}/v1/predict", headers=headers, json={
    "data_profile": "hourly_orders",
    "count": 5,
    "temperature": 1.0,
    "top_p": 0.9,
}).json()

print(forecast["predictions"][0]["data"])
const BASE = "https://api.temporis.co";
const headers = {
  "Authorization": `Bearer ${process.env.TEMPORIS_TOKEN}`,
  "Content-Type": "application/json",
};

// 1. Send observations to a data source
await fetch(`${BASE}/v1/data_sources/ingest`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    data_source: "store_metrics",
    records: [
      { timestamp: 1716249600, name: "orders", value: 42 },
      { timestamp: 1716253200, name: "orders", value: 51 },
    ],
  }),
});

// 2. Ask a data profile for the next steps
const res = await fetch(`${BASE}/v1/predict`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    data_profile: "hourly_orders",
    count: 5,
    temperature: 1.0,
    top_p: 0.9,
  }),
});
const forecast = await res.json();
console.log(forecast.predictions[0].data);
New to time-series forecasting?

Start with How forecasting works. It explains the mental model behind Temporis before you touch the API, and the rest of the docs will read more easily for it.

Where to go next