External API: What's Changed (August – October 2026)

External API: What's Changed (August – October 2026)

A summary of External API changes released through v47.2 (26 October 2026), covering the last three months (since late July) that affect client integrations. Changes are grouped by endpoint family. Internal fixes, performance work and infrastructure changes that don't alter requests or responses are not listed.

Contents

  • Type Curves (V2 and V1 deprecation)
  • Scenarios
  • Forecasts
  • Economics: Models and Reports
  • Map Layers (Shapefiles) and Formations
  • Embedded Lookup Tables
  • Wells and Directional Surveys
  • Production Data
  • Action items

Type Curves

V1 Type Curves: deprecated, sunset 7 November 2026

The /v1/projects/{projectId}/type-curves routes now return Deprecation and Sunset response headers.

  • Sunset date: Saturday, 7 November 2026. V1 stops responding on this date.
  • Read these headers in your client to detect that you are still calling V1.

V2 Type Curves: new, opt-in pre-release

A new /v2/projects/{projectId}/type-curves surface is available in pre-release. Until general availability on 7 November 2026 it responds only to tenants enrolled in the pre-release, and returns 404 Not Found for everyone else. See the Type Curve 2.0 migration guide for the V1 to V2 field and route mapping.

ResourceEndpointsNotes
Type curvesGET, HEAD /v2/projects/{projectId}/type-curves
GET /v2/projects/{projectId}/type-curves/{id}
List and fetch by id. Required properties are listed first in the definitions.
Type curves (write)POST, PATCH /v2/projects/{projectId}/type-curves
POST, PATCH /v2/projects/{projectId}/type-curves/batch
DELETE /v2/projects/{projectId}/type-curves and DELETE .../{id}
Single and batch create and update, plus delete.
FitsGET /v2/projects/{projectId}/type-curves/{id}/fits
PUT /v2/projects/{projectId}/type-curves/{id}/fits
PUT writes fit segments.
VolumesGET /v2/projects/{projectId}/type-curves/{id}/volumesType curve volumes.
WellsGET, HEAD /v2/projects/{projectId}/type-curves/{id}/wells
GET .../wells/head
Wells in the type curve.
NormalizationGET, PUT /v2/projects/{projectId}/type-curves/{id}/normalizationRead and write normalization.
Lookup tablesGET, HEAD, POST /v2/projects/{projectId}/type-curves/lookup-tables
POST, PUT .../lookup-tables/batch
GET, PUT, DELETE .../lookup-tables/{id}
Full lookup table management.

Also in V2:

  • Batch writes (POST and PATCH .../type-curves/batch) now report each record's outcome. A record that fails for any reason other than a duplicate name is reported on its own, instead of the failure hiding which records were saved.
  • econFields are removed from the V2 type curve schema, because the Economics tab no longer exists in Type Curve 2.0.
  • Normalization now applies to all streams.

Scenarios

Run scenario economics (new)

EndpointDescription
POST /v1/projects/{projectId}/scenarios/{scenarioId}/runStart an economics run for a scenario. Returns a job id.
GET /v1/projects/{projectId}/scenarios/{scenarioId}/run/{jobId}Check the status of a run.

scenarioWellAssignmentIds is not accepted in the run request.

Scenario assignments (new)

EndpointDescription
GET, PUT, DELETE /v1/projects/{projectId}/scenarios/{scenarioId}/assignments/modelsRead, set and remove model assignments on a scenario.
PUT, DELETE /v1/projects/{projectId}/scenarios/{scenarioId}/assignments/econ-modelsSet and remove econ-model assignments. (GET on this path already existed.)
GET /v1/projects/{projectId}/scenarios/{scenarioId}/well-assignments/incrementalsRead incrementals on scenario well assignments, addressed by incrementalIndex.
  • The model assignments PUT accepts an optional ?addWellsToForecast query parameter.
  • Scenario qualifier upsert and delete endpoints were fixed.

Combos

  • New optional field facilityNetworkName on combo upsert and read: the name of the facility network assigned to the combo, scoped to the scenario. Omit it or leave it blank for no network. Upserts that set it are rejected for tenants without facility networks enabled.

Forecasts

Forecast wells (new)

  • GET, HEAD /v1/projects/{projectId}/forecasts/{id}/wells
  • GET /v1/projects/{projectId}/forecasts/{id}/wells/head

Forecast outputs

  • New field slopeValue on forecast output segments: the actual rate change per day (BBL/D/D). Populated for linear segments only.
  • slope clarified: it is the sign of the slope (-1 declining, 0 flat, 1 increasing). Use slopeValue for the magnitude.
  • Type curve fields (typeCurve, typeCurveApplySetting) are returned only while a forecast's segments still come from the applied type curve. After a manual edit they are omitted or null.

Forecast volumes

  • Custom streams are now supported for parametric forecasts.

Economics

Econ report settings (new)

EndpointDescription
GET, HEAD /v1/econ-report-settingsList report settings.
GET /v1/econ-report-settings/{id}Fetch one.
POST, PUT, PATCH /v1/econ-report-settingsCreate and update.
DELETE /v1/econ-report-settings/{id}Delete.

Expenses models

  • Custom streams: expenses accept custom stream rows. Only $/Unit (dollarPerUnit) is supported as the value unit.
  • volumeThreshold: a new row criterion on expenses for tiered ("blocked") volume pricing. Each row's value is the lower bound of a tier, the last row is unbounded, and every tier below the well's volume contributes to an average unit cost. Valid on expenses only.
  • Shrinkage: BOE and Total Fluid processing expenses now accept an optional shrinkageCondition (defaults to unshrunk). NGL and Drip Condensate processing reject it.
  • Operations models: the curtailment rows accept a new category value, facility_capacity. It applies at the facility level and restricts key to oil, gas or water, criteria to entire_well_life, dates or seasonal, and unit to bbl_per_day or mcf_per_day. Rows with this category are rejected for tenants without facility constraints enabled.
  • Pricing models: the Break Even row has a new optional category, bfit (default) or afit. Models saved without one are returned as bfit. AFIT is calculated only when General Options has Income Tax turned on.
  • BOE processing: the doubled-up nesting of rows on the BOE processing field is fixed. Review any payload that worked around it.

Econ results

  • One-liners: added the missing company custom stream columns (Well Head Volume, Sales Volume, WI, NRI, First Reversion WI and NRI, Shrinkage, Price, Differential), and afitOilBreakeven and afitGasBreakeven, which are blank unless the pricing Break Even category is afit and Income Tax is on.
  • Production taxes: flat (entire_well_life) periods are stored as Flat. Sending Flat, \['Flat'\] or omitting period all produce the same result.
  • Monthly econ results: columns now match the current economics output, including company and project custom stream price and revenue columns. The date column values in the response are now documented as date-time instead of date.

Map Layers (Shapefiles) and Formations

Map layers (shapefiles) (new)

Company-wide routes at /v1/shapefiles, and the same set scoped to a project at /v1/projects/{projectId}/shapefiles. Heatmap layers are not available through the API.

EndpointDescription
GET, HEAD /v1/shapefilesList the company's map layers (company layers and every project's). Each record lists every project the layer belongs to. HEAD returns the count in X-Query-Count.
POST /v1/shapefilesCreate a layer from a GeoJSON FeatureCollection. Asynchronous: returns 202 with a job id. A name already in use returns 409 with the existing layer's id as conflictingId.
PATCH /v1/shapefilesUpdate layer metadata (name, description, color, scope, projectIds). This is how a layer is shared with more projects or removed from some. One record per layer; results are returned for each.
GET /v1/shapefiles/{id}Fetch a layer's metadata.
GET /v1/shapefiles/{id}/featuresRead a layer's features as GeoJSON (WGS84), paginated, in original order.
DELETE /v1/shapefiles/{id}Delete a layer everywhere, asynchronously. Returns 202 with a job id.
GET /v1/shapefiles/jobs/{jobId}Status of an upload, create or delete job. A successful upload's result has the new layer's id.

Uploading a shapefile zip is a three-step flow:

  1. POST /v1/shapefiles/uploads returns a signed URL, valid for 30 minutes.
  2. PUT the zip to that URL. It must hold one shapefile (.shp, .shx, .dbf, optionally .prj) and be at most 260 MB.
  3. POST /v1/shapefiles/uploads/{uploadId} imports it within 24 hours. An upload can be imported once; repeating the request returns 409 with the original jobId. Poll the jobId it returns.

The project routes (/v1/projects/{projectId}/shapefiles) offer list, create, upload, features, fetch and delete. Metadata updates (PATCH) are only available on the company route.

Formations (new)

Company-wide routes at /v1/formations, and project-scoped at /v1/projects/{projectId}/formations.

EndpointDescription
GET, HEAD /v1/formationsList formation summaries for the company. Each record carries scope and projectId. Points are not included.
PUT /v1/formationsCreate or replace company formations by name, asynchronously.
PATCH /v1/formationsUpdate name, color, enabled, maxDepth and maxThickness. Scope cannot be changed.
GET /v1/formations/{id}Fetch a formation summary.
GET /v1/formations/{id}/pointsRead a formation's points.
DELETE /v1/formations/{id}Delete a company formation. Project formations are deleted from the project route.
GET /v1/formations/jobs/{jobId}Status of an import started with PUT: what was written, overlaps found, and any rows skipped.

Embedded Lookup Tables

Embedded lookup tables (new, read-only)

EndpointDescription
GET, HEAD /v1/embedded-lookup-tablesList company embedded lookup tables. HEAD returns the count.
GET /v1/embedded-lookup-tables/{id}Fetch one company embedded lookup table.
GET, HEAD /v1/projects/{projectId}/embedded-lookup-tablesList a project's embedded lookup tables.
GET /v1/projects/{projectId}/embedded-lookup-tables/{id}Fetch one project embedded lookup table.
  • Responses include lookup_by and the custom stream key, and each row carries a rowNumber.
  • Filter by name, type, createdAt and updatedAt. Without a type filter, the list includes every type the tenant can use.

Wells and Directional Surveys

Directional surveys

  • New POST /v1/directional-surveys/batch: upsert several directional surveys in one request. Returns 207 Multi-Status with the outcome for each well.

Wells

  • New wellbore fields are now exposed: heelTrueVerticalDepth, midpointTrueVerticalDepth, toeTrueVerticalDepth (FT), plus midpointLatitude and midpointLongitude.

Production Data

Production comments

  • Writes accept chosenID plus dataSource instead of well. well is required unless both are provided, and dataSource must be the same for every record in a request. Both fields are filterable and returned on reads.
  • updatedAt is now filterable on the production comments endpoints (/v1/production-comments and the project-scoped /v1/projects/{projectId}/production-comments).

Daily and monthly production

  • Production data can no longer be created against a facility id. Only real wells are accepted.

Action items

  1. Moving off V1 Type Curves? The V1 routes sunset on 7 November 2026. Start testing against /v2 if your tenant is enrolled.
  2. Parsing econ monthly results? Handle the date column format and the new custom stream columns.
  3. Sending expenses with BOE processing rows? Check the corrected rows nesting.