Exports V2 Migration Guide
POST /v1/exports stops responding on 2027-01-04. V1 responses already carry the header
Sunset: Mon, 04 Jan 2027 00:00:00 GMT.
Export files are kept for 7 days after the export runs, for V1 and V2. After that they are deleted and their links stop working.
Why
A V1 request only returns data if someone has already run the export in the ComboCurve UI. With V2 you start the export yourself over the API, poll its status, and download the files when it finishes. No UI step is needed.
Endpoint mapping
V1 exportType | V2 endpoint |
|---|---|
dailyForecastVolumeExport | POST /v2/exports/forecast-volumes with forecast.resolution: "daily" |
monthlyForecastVolumeExport | POST /v2/exports/forecast-volumes with forecast.resolution: "monthly" |
dailyProductionVolumeExport | POST /v2/exports/forecast-volumes with only production.resolution: "daily" |
monthlyProductionVolumeExport | POST /v2/exports/forecast-volumes with only production.resolution: "monthly" |
dailyCombinedVolumeExport | POST /v2/exports/forecast-volumes with forecast and production at "daily" and mergeForecastAndProduction: true |
monthlyCombinedVolumeExport | POST /v2/exports/forecast-volumes with forecast and production at "monthly" and mergeForecastAndProduction: true |
econMonthlyExport | POST /v2/exports/econ-monthly |
V2 also offers POST /v2/exports/forecast-parameters and POST /v2/exports/econ-one-liners, which
have no V1 equivalent.
How a V2 export works
- Start the export.
POSTto the endpoint above. The response contains ajobId. - Poll the status.
GET /v2/exports/<resource>/{jobId}untilstatusissuccessful(forecast exports) orcomplete(econ exports). Stop onfailed. Forecast exports never reportcompleted;successfulis the only success state. - Download.
result.fileUrlsholds signed links to the Parquet files. UseexpirationHourson the status request to choose how long the links stay valid (default 24). - Download right away. The files are deleted 7 days after the export runs, whatever the link's expiry.
A status request for an export older than 7 days reports failed with an error message. Start a
new export instead.
Field changes
| V1 field | V2 field |
|---|---|
projectId | projectId |
forecastId | forecastId |
scenarioId | scenarioId |
econRunId | runId |
fileType | fileType (still only parquet) |
expirationHours | expirationHours, now a query parameter on the status request |
Forecast volumes also need mergeForecastAndProduction: true for the combined exports, false
otherwise. Include forecast, production or both, each with a resolution.
Examples
Daily forecast volumes
POST /v2/exports/forecast-volumes
{
"projectId": "5e5981b9e23dae0012624d72",
"forecastId": "61a4d175f1da1800136c4b21",
"mergeForecastAndProduction": false,
"forecast": { "resolution": "daily" }
}
Econ monthly
POST /v2/exports/econ-monthly
{
"projectId": "5e5981b9e23dae0012624d72",
"scenarioId": "6494d5049a4f6b0a3491c309",
"runId": "ecf8763db8ac41efb9bbf311"
}
Both return { "jobId": "..." }. Poll GET /v2/exports/forecast-volumes/{jobId} or
GET /v2/exports/econ-monthly/{jobId}.