Model Groups

List model groups

get/v1/model-group

Returns every model group accessible to your organisation. A model group bundles together each revision of the same model.

Parameters

timeHorizonstring
Filter to groups on a single time horizon. Accepts the time-horizon key (for example day_ahead).

Returns

idstring
Unique model group identifier.
namestring
Human-readable name for the model group.
latestRevisionnumber
Highest revision number currently published in the group.
publicboolean
Whether the model group is publicly accessible. Private groups are visible only to the owning organisation.
createdAtstring
ISO 8601 timestamp at which the model group was created.
timeHorizonTimeHorizonSummary
The time horizon this model group belongs to.
modelsModelGroupModelSummary[]
Non-archived model revisions in this group, sorted newest first.

Error codes

400Bad Request
The timeHorizon filter is not a known time-horizon key.
401Unauthorized
Missing or invalid bearer token.
GET /v1/model-group
curl "https://api.v2.pd4castr.com.au/v1/model-group?timeHorizon=day_ahead" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
[
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Demand Forecast",
    "latestRevision": 3,
    "public": false,
    "createdAt": "2025-08-01T10:00:00.000Z",
    "timeHorizon": {
      "name": "Day Ahead",
      "shortName": "DA",
      "key": "day_ahead"
    },
    "models": [
      {
        "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "revision": 3,
        "createdAt": "2026-05-01T08:00:00.000Z"
      },
      {
        "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
        "revision": 2,
        "createdAt": "2026-03-15T08:00:00.000Z"
      },
      {
        "id": "d4e5f6a7-b8c9-0123-def0-234567890123",
        "revision": 1,
        "createdAt": "2026-01-20T08:00:00.000Z"
      }
    ]
  },
  {
    "id": "c3d4e5f6-7890-abcd-ef12-34567890a1b2",
    "name": "Price Forecast",
    "latestRevision": 5,
    "public": true,
    "createdAt": "2025-06-14T10:00:00.000Z",
    "timeHorizon": {
      "name": "Day Ahead",
      "shortName": "DA",
      "key": "day_ahead"
    },
    "models": [
      {
        "id": "e5f6a7b8-c9d0-1234-ef01-345678901234",
        "revision": 5,
        "createdAt": "2026-05-20T08:00:00.000Z"
      }
    ]
  }
]

Get the latest model revision

get/v1/model-group/:id/latest-model

Convenience endpoint that returns the highest-revision model in the group.

Parameters

idstring

required

Unique model group 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
Model group not found, or contains no models.
GET /v1/model-group/:id/latest-model
curl "https://api.v2.pd4castr.com.au/v1/model-group/a1b2c3d4-e5f6-7890-abcd-ef1234567890/latest-model" \
  -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 group's models

get/v1/model-group/:id/models

Returns every model revision that belongs to the model group, ordered by revision.

Parameters

idstring

required

Unique model group 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
Model group not found.
GET /v1/model-group/:id/models
curl "https://api.v2.pd4castr.com.au/v1/model-group/a1b2c3d4-e5f6-7890-abcd-ef1234567890/models" \
  -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 group

get/v1/model-group/:id

Returns a single model group by its unique id.

Parameters

idstring

required

Unique model group identifier.

Returns

idstring
Unique model group identifier.
namestring
Human-readable name for the model group.
latestRevisionnumber
Highest revision number currently published in the group.
publicboolean
Whether the model group is publicly accessible. Private groups are visible only to the owning organisation.
createdAtstring
ISO 8601 timestamp at which the model group was created.
timeHorizonTimeHorizonSummary
The time horizon this model group belongs to.
modelsModelGroupModelSummary[]
Non-archived model revisions in this group, sorted newest first.

Error codes

401Unauthorized
Missing or invalid bearer token.
404Not Found
No model group exists with the given id.
GET /v1/model-group/:id
curl "https://api.v2.pd4castr.com.au/v1/model-group/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer $PD4CASTR_TOKEN"
Response
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Demand Forecast",
  "latestRevision": 3,
  "public": false,
  "createdAt": "2025-08-01T10:00:00.000Z",
  "timeHorizon": {
    "name": "Day Ahead",
    "shortName": "DA",
    "key": "day_ahead"
  },
  "models": [
    {
      "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "revision": 3,
      "createdAt": "2026-05-01T08:00:00.000Z"
    },
    {
      "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "revision": 2,
      "createdAt": "2026-03-15T08:00:00.000Z"
    },
    {
      "id": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "revision": 1,
      "createdAt": "2026-01-20T08:00:00.000Z"
    }
  ]
}