Models

List models

get/v1/model

Returns models accessible to your organisation. Includes your organisation's private models plus any public models published by other organisations.

Parameters

archivedboolean
Include archived models in the result. Defaults to false.
timeHorizonstring
Filter to models on a single time horizon. Accepts the time-horizon key (for example day_ahead).

Returns

idstring
Unique model identifier.
modelGroupIdstring
Identifier of the model group this model belongs to.
namestring
Stable model identifier slug.
displayNamestring
Human-readable display name.
notesstring | null
Notes from the model's publisher. Returned only to members of the owning organisation; null otherwise.
descriptionstring
Short human-readable description of the model.
revisionnumber
Model revision number. Increments each time a new revision is published into the same model group.
dockerImagestring
Container image reference for the model. Returned only to members of the owning organisation; an empty string otherwise.
createdAtstring
ISO 8601 timestamp at which the model was created.
runMode"AUTOMATIC" | "ON_DEMAND"
How the model is triggered. AUTOMATIC runs on a schedule; ON_DEMAND only when explicitly invoked.
horizonTimeHorizon
The model's forecast time horizon.
modelMetadataobject
Free-form metadata about the model. Shape varies per model.
outputVariablesOutputVariable[]
Output variables produced by the model, including chart display configuration.
outputSpecificationColumnSpecification[]

deprecated

Deprecated. Always returned as an empty array. Use outputVariables instead.
inputsModelInputSpecification[] | null
Inputs the model accepts, if any.
datasetsModelDatasetSpecification[] | null
Datasets bound to the model, if any.
archivedboolean
Whether the model is archived. Archived models are excluded from GET /v1/model unless archived=true.
enabledboolean
Whether the model is enabled. When enabled, the model runs according to its configuration; when disabled, it does not run.
tagsstring[]
Tags associated with the model.
sensitivitiesSensitivitySpecification[]
Sensitivity configurations available for the model.
inputAggregationsInputAggregation[]
Input aggregations available for the model.
outputFileFormat"json" | "csv" | "parquet"
Format the model's run output is delivered in.
displayTimezonestring
IANA timezone identifier used to display forecast results.
forecastVariableForecastVariableSpecification
Variable being forecast by the model.
isOwnerboolean
True when the requesting user's organisation owns the model.

Error codes

401Unauthorized
Missing or invalid bearer token.
GET /v1/model
curl "https://api.v2.pd4castr.com.au/v1/model?archived=false&timeHorizon=day_ahead" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
[
  {
    "id": "d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
    "modelGroupId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "demand-forecast-r3",
    "displayName": "Demand Forecast (30min)",
    "notes": "Retraining cadence: weekly.",
    "description": "Day-ahead electricity demand forecast for NEM regions.",
    "revision": 3,
    "dockerImage": "registry.pd4castr.com.au/acme/demand-forecast:r3",
    "createdAt": "2026-01-09T10:00:00.000Z",
    "runMode": "AUTOMATIC",
    "horizon": {
      "name": "Day Ahead",
      "shortName": "DA",
      "key": "day_ahead"
    },
    "modelMetadata": {
      "resolution": "30min"
    },
    "outputVariables": [
      {
        "name": "price",
        "key": "price",
        "type": "float",
        "seriesKey": false,
        "colours": []
      }
    ],
    "outputSpecification": [],
    "inputs": [
      {
        "id": "b2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
        "key": "demand_forecast"
      }
    ],
    "datasets": [
      {
        "id": "c4e1a0d2-9b6c-4f7c-8a1e-2f3c4d5e6f70",
        "key": "historical_demand",
        "source": "e6f3c2b1-7a5d-4c9e-8b2f-1d3e4f5a6b7c",
        "fileFormat": "parquet"
      }
    ],
    "archived": false,
    "enabled": true,
    "tags": [
      "demand",
      "nem"
    ],
    "sensitivities": [
      {
        "id": "7c1d6c9f-0a8e-4f7c-9b6c-3a4f2c1c1f8d",
        "name": "High demand",
        "key": "high_demand"
      }
    ],
    "inputAggregations": [
      {
        "id": "9a2c1e7b-4d3f-4a8c-b1e2-5f6a7c8d9e0f",
        "name": "Solar & Wind",
        "key": "solar-wind"
      }
    ],
    "outputFileFormat": "json",
    "displayTimezone": "Australia/Sydney",
    "forecastVariable": {
      "name": "Price",
      "shortName": "price",
      "key": "price"
    },
    "isOwner": true
  },
  {
    "id": "a3b5c6d7-2c1a-4f7c-9b6c-3a4f2c1c1f8d",
    "modelGroupId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "demand-forecast-r2",
    "displayName": "Demand Forecast (30min)",
    "notes": "Retraining cadence: weekly.",
    "description": "Day-ahead electricity demand forecast for NEM regions.",
    "revision": 2,
    "dockerImage": "registry.pd4castr.com.au/acme/demand-forecast:r2",
    "createdAt": "2025-11-04T10:00:00.000Z",
    "runMode": "AUTOMATIC",
    "horizon": {
      "name": "Day Ahead",
      "shortName": "DA",
      "key": "day_ahead"
    },
    "modelMetadata": {
      "resolution": "30min"
    },
    "outputVariables": [
      {
        "name": "price",
        "key": "price",
        "type": "float",
        "seriesKey": false,
        "colours": []
      }
    ],
    "outputSpecification": [],
    "inputs": [
      {
        "id": "b2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
        "key": "demand_forecast"
      }
    ],
    "datasets": [
      {
        "id": "c4e1a0d2-9b6c-4f7c-8a1e-2f3c4d5e6f70",
        "key": "historical_demand",
        "source": "e6f3c2b1-7a5d-4c9e-8b2f-1d3e4f5a6b7c",
        "fileFormat": "parquet"
      }
    ],
    "archived": false,
    "enabled": true,
    "tags": [
      "demand",
      "nem"
    ],
    "sensitivities": [
      {
        "id": "7c1d6c9f-0a8e-4f7c-9b6c-3a4f2c1c1f8d",
        "name": "High demand",
        "key": "high_demand"
      }
    ],
    "inputAggregations": [
      {
        "id": "9a2c1e7b-4d3f-4a8c-b1e2-5f6a7c8d9e0f",
        "name": "Solar & Wind",
        "key": "solar-wind"
      }
    ],
    "outputFileFormat": "json",
    "displayTimezone": "Australia/Sydney",
    "forecastVariable": {
      "name": "Price",
      "shortName": "price",
      "key": "price"
    },
    "isOwner": true
  }
]

Get a model

get/v1/model/:id

Returns a single model by its unique id.

Parameters

idstring

required

Unique model identifier.

Returns

idstring
Unique model identifier.
modelGroupIdstring
Identifier of the model group this model belongs to.
namestring
Stable model identifier slug.
displayNamestring
Human-readable display name.
notesstring | null
Notes from the model's publisher. Returned only to members of the owning organisation; null otherwise.
descriptionstring
Short human-readable description of the model.
revisionnumber
Model revision number. Increments each time a new revision is published into the same model group.
dockerImagestring
Container image reference for the model. Returned only to members of the owning organisation; an empty string otherwise.
createdAtstring
ISO 8601 timestamp at which the model was created.
runMode"AUTOMATIC" | "ON_DEMAND"
How the model is triggered. AUTOMATIC runs on a schedule; ON_DEMAND only when explicitly invoked.
horizonTimeHorizon
The model's forecast time horizon.
modelMetadataobject
Free-form metadata about the model. Shape varies per model.
outputVariablesOutputVariable[]
Output variables produced by the model, including chart display configuration.
outputSpecificationColumnSpecification[]

deprecated

Deprecated. Always returned as an empty array. Use outputVariables instead.
inputsModelInputSpecification[] | null
Inputs the model accepts, if any.
datasetsModelDatasetSpecification[] | null
Datasets bound to the model, if any.
archivedboolean
Whether the model is archived. Archived models are excluded from GET /v1/model unless archived=true.
enabledboolean
Whether the model is enabled. When enabled, the model runs according to its configuration; when disabled, it does not run.
tagsstring[]
Tags associated with the model.
sensitivitiesSensitivitySpecification[]
Sensitivity configurations available for the model.
inputAggregationsInputAggregation[]
Input aggregations available for the model.
outputFileFormat"json" | "csv" | "parquet"
Format the model's run output is delivered in.
displayTimezonestring
IANA timezone identifier used to display forecast results.
forecastVariableForecastVariableSpecification
Variable being forecast by the model.
isOwnerboolean
True when the requesting user's organisation owns the model.

Error codes

401Unauthorized
Missing or invalid bearer token.
404Not Found
No model exists with the given id.
GET /v1/model/:id
curl "https://api.v2.pd4castr.com.au/v1/model/d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
{
  "id": "d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
  "modelGroupId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "demand-forecast-r3",
  "displayName": "Demand Forecast (30min)",
  "notes": "Retraining cadence: weekly.",
  "description": "Day-ahead electricity demand forecast for NEM regions.",
  "revision": 3,
  "dockerImage": "registry.pd4castr.com.au/acme/demand-forecast:r3",
  "createdAt": "2026-01-09T10:00:00.000Z",
  "runMode": "AUTOMATIC",
  "horizon": {
    "name": "Day Ahead",
    "shortName": "DA",
    "key": "day_ahead"
  },
  "modelMetadata": {
    "resolution": "30min"
  },
  "outputVariables": [
    {
      "name": "price",
      "key": "price",
      "type": "float",
      "seriesKey": false,
      "colours": []
    }
  ],
  "outputSpecification": [],
  "inputs": [
    {
      "id": "b2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
      "key": "demand_forecast"
    }
  ],
  "datasets": [
    {
      "id": "c4e1a0d2-9b6c-4f7c-8a1e-2f3c4d5e6f70",
      "key": "historical_demand",
      "source": "e6f3c2b1-7a5d-4c9e-8b2f-1d3e4f5a6b7c",
      "fileFormat": "parquet"
    }
  ],
  "archived": false,
  "enabled": true,
  "tags": [
    "demand",
    "nem"
  ],
  "sensitivities": [
    {
      "id": "7c1d6c9f-0a8e-4f7c-9b6c-3a4f2c1c1f8d",
      "name": "High demand",
      "key": "high_demand"
    }
  ],
  "inputAggregations": [
    {
      "id": "9a2c1e7b-4d3f-4a8c-b1e2-5f6a7c8d9e0f",
      "name": "Solar & Wind",
      "key": "solar-wind"
    }
  ],
  "outputFileFormat": "json",
  "displayTimezone": "Australia/Sydney",
  "forecastVariable": {
    "name": "Price",
    "shortName": "price",
    "key": "price"
  },
  "isOwner": true
}

List a model's sensitivities

get/v1/model/:id/sensitivities

Returns the sensitivity configurations available for the model.

Parameters

idstring

required

Unique model identifier.

Returns

idstring
Unique sensitivity identifier.
namestring
Human-readable sensitivity name.
keystring
Stable key for identifying this sensitivity across runs.

Error codes

401Unauthorized
Missing or invalid bearer token.
404Not Found
No model exists with the given id.
GET /v1/model/:id/sensitivities
curl "https://api.v2.pd4castr.com.au/v1/model/d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d/sensitivities" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
[
  {
    "id": "7c1d6c9f-0a8e-4f7c-9b6c-3a4f2c1c1f8d",
    "name": "High demand",
    "key": "high_demand"
  },
  {
    "id": "8d2e7d0f-1b9f-5a8d-ac7d-4b5e3d2d2g9e",
    "name": "Low demand",
    "key": "low_demand"
  }
]

Archive a model

post/v1/model/:id/archive

Marks the model as archived. Archived models are excluded from default list responses but keep running on schedule and remain fetchable by id.

Parameters

idstring

required

Unique model identifier.

Returns

The updated model.

idstring
Unique model identifier.
modelGroupIdstring
Identifier of the model group this model belongs to.
namestring
Stable model identifier slug.
displayNamestring
Human-readable display name.
notesstring | null
Notes from the model's publisher. Returned only to members of the owning organisation; null otherwise.
descriptionstring
Short human-readable description of the model.
revisionnumber
Model revision number. Increments each time a new revision is published into the same model group.
dockerImagestring
Container image reference for the model. Returned only to members of the owning organisation; an empty string otherwise.
createdAtstring
ISO 8601 timestamp at which the model was created.
runMode"AUTOMATIC" | "ON_DEMAND"
How the model is triggered. AUTOMATIC runs on a schedule; ON_DEMAND only when explicitly invoked.
horizonTimeHorizon
The model's forecast time horizon.
modelMetadataobject
Free-form metadata about the model. Shape varies per model.
outputVariablesOutputVariable[]
Output variables produced by the model, including chart display configuration.
outputSpecificationColumnSpecification[]

deprecated

Deprecated. Always returned as an empty array. Use outputVariables instead.
inputsModelInputSpecification[] | null
Inputs the model accepts, if any.
datasetsModelDatasetSpecification[] | null
Datasets bound to the model, if any.
archivedboolean
Whether the model is archived. Archived models are excluded from GET /v1/model unless archived=true.
enabledboolean
Whether the model is enabled. When enabled, the model runs according to its configuration; when disabled, it does not run.
tagsstring[]
Tags associated with the model.
sensitivitiesSensitivitySpecification[]
Sensitivity configurations available for the model.
inputAggregationsInputAggregation[]
Input aggregations available for the model.
outputFileFormat"json" | "csv" | "parquet"
Format the model's run output is delivered in.
displayTimezonestring
IANA timezone identifier used to display forecast results.
forecastVariableForecastVariableSpecification
Variable being forecast by the model.
isOwnerboolean
True when the requesting user's organisation owns the model.

Error codes

401Unauthorized
Missing or invalid bearer token.
404Not Found
Model not found or not owned by your organisation.
POST /v1/model/:id/archive
curl -X POST "https://api.v2.pd4castr.com.au/v1/model/d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d/archive" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
{
  "id": "d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
  "modelGroupId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "demand-forecast-r3",
  "displayName": "Demand Forecast (30min)",
  "notes": "Retraining cadence: weekly.",
  "description": "Day-ahead electricity demand forecast for NEM regions.",
  "revision": 3,
  "dockerImage": "registry.pd4castr.com.au/acme/demand-forecast:r3",
  "createdAt": "2026-01-09T10:00:00.000Z",
  "runMode": "AUTOMATIC",
  "horizon": {
    "name": "Day Ahead",
    "shortName": "DA",
    "key": "day_ahead"
  },
  "modelMetadata": {
    "resolution": "30min"
  },
  "outputVariables": [
    {
      "name": "price",
      "key": "price",
      "type": "float",
      "seriesKey": false,
      "colours": []
    }
  ],
  "outputSpecification": [],
  "inputs": [
    {
      "id": "b2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
      "key": "demand_forecast"
    }
  ],
  "datasets": [
    {
      "id": "c4e1a0d2-9b6c-4f7c-8a1e-2f3c4d5e6f70",
      "key": "historical_demand",
      "source": "e6f3c2b1-7a5d-4c9e-8b2f-1d3e4f5a6b7c",
      "fileFormat": "parquet"
    }
  ],
  "archived": true,
  "enabled": true,
  "tags": [
    "demand",
    "nem"
  ],
  "sensitivities": [
    {
      "id": "7c1d6c9f-0a8e-4f7c-9b6c-3a4f2c1c1f8d",
      "name": "High demand",
      "key": "high_demand"
    }
  ],
  "inputAggregations": [
    {
      "id": "9a2c1e7b-4d3f-4a8c-b1e2-5f6a7c8d9e0f",
      "name": "Solar & Wind",
      "key": "solar-wind"
    }
  ],
  "outputFileFormat": "json",
  "displayTimezone": "Australia/Sydney",
  "forecastVariable": {
    "name": "Price",
    "shortName": "price",
    "key": "price"
  },
  "isOwner": true
}

Unarchive a model

post/v1/model/:id/unarchive

Clears the archived flag; the model returns to default list responses.

Parameters

idstring

required

Unique model identifier.

Returns

The updated model.

idstring
Unique model identifier.
modelGroupIdstring
Identifier of the model group this model belongs to.
namestring
Stable model identifier slug.
displayNamestring
Human-readable display name.
notesstring | null
Notes from the model's publisher. Returned only to members of the owning organisation; null otherwise.
descriptionstring
Short human-readable description of the model.
revisionnumber
Model revision number. Increments each time a new revision is published into the same model group.
dockerImagestring
Container image reference for the model. Returned only to members of the owning organisation; an empty string otherwise.
createdAtstring
ISO 8601 timestamp at which the model was created.
runMode"AUTOMATIC" | "ON_DEMAND"
How the model is triggered. AUTOMATIC runs on a schedule; ON_DEMAND only when explicitly invoked.
horizonTimeHorizon
The model's forecast time horizon.
modelMetadataobject
Free-form metadata about the model. Shape varies per model.
outputVariablesOutputVariable[]
Output variables produced by the model, including chart display configuration.
outputSpecificationColumnSpecification[]

deprecated

Deprecated. Always returned as an empty array. Use outputVariables instead.
inputsModelInputSpecification[] | null
Inputs the model accepts, if any.
datasetsModelDatasetSpecification[] | null
Datasets bound to the model, if any.
archivedboolean
Whether the model is archived. Archived models are excluded from GET /v1/model unless archived=true.
enabledboolean
Whether the model is enabled. When enabled, the model runs according to its configuration; when disabled, it does not run.
tagsstring[]
Tags associated with the model.
sensitivitiesSensitivitySpecification[]
Sensitivity configurations available for the model.
inputAggregationsInputAggregation[]
Input aggregations available for the model.
outputFileFormat"json" | "csv" | "parquet"
Format the model's run output is delivered in.
displayTimezonestring
IANA timezone identifier used to display forecast results.
forecastVariableForecastVariableSpecification
Variable being forecast by the model.
isOwnerboolean
True when the requesting user's organisation owns the model.

Error codes

401Unauthorized
Missing or invalid bearer token.
404Not Found
Model not found or not owned by your organisation.
POST /v1/model/:id/unarchive
curl -X POST "https://api.v2.pd4castr.com.au/v1/model/d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d/unarchive" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
{
  "id": "d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
  "modelGroupId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "demand-forecast-r3",
  "displayName": "Demand Forecast (30min)",
  "notes": "Retraining cadence: weekly.",
  "description": "Day-ahead electricity demand forecast for NEM regions.",
  "revision": 3,
  "dockerImage": "registry.pd4castr.com.au/acme/demand-forecast:r3",
  "createdAt": "2026-01-09T10:00:00.000Z",
  "runMode": "AUTOMATIC",
  "horizon": {
    "name": "Day Ahead",
    "shortName": "DA",
    "key": "day_ahead"
  },
  "modelMetadata": {
    "resolution": "30min"
  },
  "outputVariables": [
    {
      "name": "price",
      "key": "price",
      "type": "float",
      "seriesKey": false,
      "colours": []
    }
  ],
  "outputSpecification": [],
  "inputs": [
    {
      "id": "b2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
      "key": "demand_forecast"
    }
  ],
  "datasets": [
    {
      "id": "c4e1a0d2-9b6c-4f7c-8a1e-2f3c4d5e6f70",
      "key": "historical_demand",
      "source": "e6f3c2b1-7a5d-4c9e-8b2f-1d3e4f5a6b7c",
      "fileFormat": "parquet"
    }
  ],
  "archived": false,
  "enabled": true,
  "tags": [
    "demand",
    "nem"
  ],
  "sensitivities": [
    {
      "id": "7c1d6c9f-0a8e-4f7c-9b6c-3a4f2c1c1f8d",
      "name": "High demand",
      "key": "high_demand"
    }
  ],
  "inputAggregations": [
    {
      "id": "9a2c1e7b-4d3f-4a8c-b1e2-5f6a7c8d9e0f",
      "name": "Solar & Wind",
      "key": "solar-wind"
    }
  ],
  "outputFileFormat": "json",
  "displayTimezone": "Australia/Sydney",
  "forecastVariable": {
    "name": "Price",
    "shortName": "price",
    "key": "price"
  },
  "isOwner": true
}

Trigger a model run

post/v1/model/:id/trigger

Queues an on-demand run of the model, plus a run for each of its sensitivities. Returns the queued jobs immediately; poll the run endpoints for completion.

Parameters

idstring

required

Unique model identifier.

Returns

The queued jobs, one per base run and sensitivity.

idstring
Unique job identifier.
modelIdstring
Identifier of the model the job runs.
triggerProgressIdstring
Opaque identifier for tracking the triggered run's progress.
sensitivityIdstring | null
Sensitivity the job runs, or null for a base run.
modelRunIdstring | null
Identifier of the resulting run once it has been created, or null while the job is still pending.
status"PENDING" | "PROCESSING" | "COMPLETED" | "FAILED" | "CANCELLED"
Current status of the job.
prioritynumber
Queue priority of the job. Lower values run first.
runDatetimestring
ISO 8601 reference datetime that the resulting run forecasts from.
createdAtstring
ISO 8601 timestamp at which the job was created.

Error codes

401Unauthorized
Missing or invalid bearer token.
404Not Found
No model exists with the given id.
POST /v1/model/:id/trigger
curl -X POST "https://api.v2.pd4castr.com.au/v1/model/d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d/trigger" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
[
  {
    "id": "0f6c2b1a-9d3e-4c8a-9f2b-1a2c3d4e5f60",
    "modelId": "d2f4e0c0-1c1a-4f7c-9b6c-3a4f2c1c1f8d",
    "triggerProgressId": "3b9d8c7e-2a1f-4d6b-8e5c-7f0a1b2c3d4e",
    "sensitivityId": null,
    "modelRunId": null,
    "status": "PENDING",
    "priority": 0,
    "runDatetime": "2026-04-12T00:00:00.000Z",
    "createdAt": "2026-04-12T03:14:15.000Z"
  }
]