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.
| Resource | Endpoints | Notes |
|---|---|---|
| Type curves | GET, HEAD /v2/projects/{projectId}/type-curvesGET /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-curvesPOST, PATCH /v2/projects/{projectId}/type-curves/batchDELETE /v2/projects/{projectId}/type-curves and DELETE .../{id} | Single and batch create and update, plus delete. |
| Fits | GET /v2/projects/{projectId}/type-curves/{id}/fitsPUT /v2/projects/{projectId}/type-curves/{id}/fits | PUT writes fit segments. |
| Volumes | GET /v2/projects/{projectId}/type-curves/{id}/volumes | Type curve volumes. |
| Wells | GET, HEAD /v2/projects/{projectId}/type-curves/{id}/wellsGET .../wells/head | Wells in the type curve. |
| Normalization | GET, PUT /v2/projects/{projectId}/type-curves/{id}/normalization | Read and write normalization. |
| Lookup tables | GET, HEAD, POST /v2/projects/{projectId}/type-curves/lookup-tablesPOST, PUT .../lookup-tables/batchGET, PUT, DELETE .../lookup-tables/{id} | Full lookup table management. |
Also in V2:
- Batch writes (
POSTandPATCH .../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. econFieldsare 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)
| Endpoint | Description |
|---|---|
POST /v1/projects/{projectId}/scenarios/{scenarioId}/run | Start 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)
| Endpoint | Description |
|---|---|
GET, PUT, DELETE /v1/projects/{projectId}/scenarios/{scenarioId}/assignments/models | Read, set and remove model assignments on a scenario. |
PUT, DELETE /v1/projects/{projectId}/scenarios/{scenarioId}/assignments/econ-models | Set and remove econ-model assignments. (GET on this path already existed.) |
GET /v1/projects/{projectId}/scenarios/{scenarioId}/well-assignments/incrementals | Read incrementals on scenario well assignments, addressed by incrementalIndex. |
- The model assignments
PUTaccepts an optional?addWellsToForecastquery parameter. - Scenario qualifier upsert and delete endpoints were fixed.
Combos
- New optional field
facilityNetworkNameon 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}/wellsGET /v1/projects/{projectId}/forecasts/{id}/wells/head
Forecast outputs
- New field
slopeValueon forecast output segments: the actual rate change per day (BBL/D/D). Populated for linear segments only. slopeclarified: it is the sign of the slope (-1 declining, 0 flat, 1 increasing). UseslopeValuefor 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 ornull.
Forecast volumes
- Custom streams are now supported for parametric forecasts.
Economics
Econ report settings (new)
| Endpoint | Description |
|---|---|
GET, HEAD /v1/econ-report-settings | List report settings. |
GET /v1/econ-report-settings/{id} | Fetch one. |
POST, PUT, PATCH /v1/econ-report-settings | Create 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
curtailmentrows accept a newcategoryvalue,facility_capacity. It applies at the facility level and restrictskeytooil,gasorwater,criteriatoentire_well_life,datesorseasonal, andunittobbl_per_dayormcf_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) orafit. Models saved without one are returned asbfit. AFIT is calculated only when General Options has Income Tax turned on. - BOE processing: the doubled-up nesting of
rowson 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
afitOilBreakevenandafitGasBreakeven, which are blank unless the pricing Break Even category isafitand Income Tax is on. - Production taxes: flat (
entire_well_life) periods are stored asFlat. SendingFlat,\['Flat'\]or omittingperiodall 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-timeinstead ofdate.
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.
| Endpoint | Description |
|---|---|
GET, HEAD /v1/shapefiles | List 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/shapefiles | Create 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/shapefiles | Update 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}/features | Read 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:
POST /v1/shapefiles/uploadsreturns a signed URL, valid for 30 minutes.PUTthe zip to that URL. It must hold one shapefile (.shp,.shx,.dbf, optionally.prj) and be at most 260 MB.POST /v1/shapefiles/uploads/{uploadId}imports it within 24 hours. An upload can be imported once; repeating the request returns409with the originaljobId. Poll thejobIdit 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.
| Endpoint | Description |
|---|---|
GET, HEAD /v1/formations | List formation summaries for the company. Each record carries scope and projectId. Points are not included. |
PUT /v1/formations | Create or replace company formations by name, asynchronously. |
PATCH /v1/formations | Update name, color, enabled, maxDepth and maxThickness. Scope cannot be changed. |
GET /v1/formations/{id} | Fetch a formation summary. |
GET /v1/formations/{id}/points | Read 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)
| Endpoint | Description |
|---|---|
GET, HEAD /v1/embedded-lookup-tables | List 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-tables | List a project's embedded lookup tables. |
GET /v1/projects/{projectId}/embedded-lookup-tables/{id} | Fetch one project embedded lookup table. |
- Responses include
lookup_byand the custom stream key, and each row carries arowNumber. - Filter by
name,type,createdAtandupdatedAt. Without atypefilter, 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. Returns207 Multi-Statuswith the outcome for each well.
Wells
- New wellbore fields are now exposed:
heelTrueVerticalDepth,midpointTrueVerticalDepth,toeTrueVerticalDepth(FT), plusmidpointLatitudeandmidpointLongitude.
Production Data
Production comments
- Writes accept
chosenIDplusdataSourceinstead ofwell.wellis required unless both are provided, anddataSourcemust be the same for every record in a request. Both fields are filterable and returned on reads. updatedAtis now filterable on the production comments endpoints (/v1/production-commentsand 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
- Moving off V1 Type Curves? The V1 routes sunset on 7 November 2026. Start testing against
/v2if your tenant is enrolled. - Parsing econ monthly results? Handle the date column format and the new custom stream columns.
- Sending expenses with BOE processing rows? Check the corrected
rowsnesting.