Raw schema
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"route",
"ensemble",
"explicit"
],
"description": "\"route\": Ephemeris picks the best model for the data, falling back to a small ensemble if it fails. \"ensemble\": run all compatible models and blend them; best calibration, highest cost. \"explicit\": run the single model named in `model`."
},
"model": {
"description": "Required when mode is \"explicit\". Must be a name returned by list_models.",
"type": "string",
"minLength": 1
},
"series": {
"minItems": 1,
"maxItems": 64,
"type": "array",
"items": {
"type": "object",
"properties": {
"values": {
"anyOf": [
{
"minItems": 1,
"type": "array",
"items": {
"type": "number"
}
},
{
"minItems": 1,
"type": "array",
"items": {
"minItems": 1,
"type": "array",
"items": {
"type": "number"
}
}
}
],
"description": "Observed history, oldest first. A flat number array is one univariate series. A nested array is one multivariate series with one inner array per variate, all the same length."
},
"freq": {
"description": "Pandas-style sampling frequency such as \"H\", \"D\", \"W\", \"15min\" or \"M\". Improves routing and seasonal handling; omit if unknown.",
"type": "string",
"minLength": 1
},
"covariates": {
"type": "object",
"properties": {
"past": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {
"type": "number"
}
},
"description": "Named historical channels, each the same length as the series context."
},
"future": {
"description": "Known-future channels, each exactly `horizon` long. Every future channel must also appear in `past`.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {
"type": "number"
}
}
}
},
"required": [
"past"
],
"description": "Optional exogenous covariates. Only models with `covariates: true` in list_models can use them. In route and ensemble mode the panel narrows to those models; in explicit mode, naming a model without covariate support is an error."
}
},
"required": [
"values"
]
},
"description": "One to 64 series forecast in one request. All share horizon and quantiles."
},
"horizon": {
"description": "Number of future steps to forecast, 1 to 4096. Defaults to 64. Some models stop short of this (max_horizon in list_models): route and ensemble skip them, explicit mode rejects the request.",
"type": "integer",
"minimum": 1,
"maximum": 4096
},
"context_len": {
"description": "Most recent points per variate to feed the model and bill for, 1 to 16384. Defaults to 256. Values beyond the model's context cap are truncated at the cap.",
"type": "integer",
"minimum": 1,
"maximum": 16384
},
"quantiles": {
"description": "Up to 21 quantile levels strictly between 0 and 1, for example [0.1, 0.5, 0.9]. The response keys forecasts by these as decimal strings.",
"maxItems": 21,
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0,
"exclusiveMaximum": 1
}
},
"top_k": {
"description": "Ensemble only: cap on how many models participate.",
"type": "integer",
"minimum": 1,
"maximum": 16
},
"combine": {
"description": "Ensemble only. \"mixture\" averages the predictive distributions (default); \"vincentize\" averages the quantiles.",
"type": "string",
"enum": [
"mixture",
"vincentize"
]
},
"idempotency_key": {
"description": "Client-chosen key, 8 to 128 characters of letters, numbers, dot, underscore, colon or hyphen. A retry with the same key and identical body replays the stored result without charging again.",
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
}
},
"required": [
"mode",
"series"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}