Skip to main content

Econ Report Settings API Reference

The Econ Report Settings API lets you create, read, update, and delete saved economics report aggregation settings. An econ report setting is a small, flat configuration: a name, an ordered list of criteria to aggregate economics reports by, and two aggregation-total toggles.

All endpoints are rooted at:

/v1/econ-report-settings

Key Concepts​

  • Econ report settings are company-scoped, not user- or project-scoped: GET returns every setting in the tenant, and PUT/PATCH/DELETE can target any setting regardless of who created it. createdBy is stamped from the requesting user on create, but it is an audit field only.
  • headers is an ordered, order-significant list of aggregation criteria, at most 5. Order reflects aggregation priority, matching the priority list in the ComboCurve UI.
  • Each entry in headers must be one of: a valid well-header key (as listed in Available Header Keys Reference; most are snake_case, but some legacy keys are camelCase like chosenKeyID), one of three special criteria (econ_prms_reserves_category, econ_prms_reserves_sub_category, econ_group), or a project-custom-header key slot (e.g. _project_custom_header, _project_custom_header_1).
  • allWellsAgg and rollUpEachLevel are optional booleans. If omitted on create, they are not stored; reads always apply defaults: allWellsAgg defaults to true, rollUpEachLevel defaults to false.
  • name must be unique company-wide for API writes only. POST rejects a duplicate name; PUT/PATCH match an existing setting by name (there is no id in the write body).
  • This is a flat document: a name, an ordered headers list, and two boolean toggles.

Endpoints​

MethodPathDescriptionLimit
HEAD/v1/econ-report-settingsReturn count headers only–
GET/v1/econ-report-settingsList econ report settings (paginated)200/page
GET/v1/econ-report-settings/:idGet a single econ report setting by ID–
POST/v1/econ-report-settingsCreate new econ report settings100/call
PUT/v1/econ-report-settingsUpsert by name100/call
PATCH/v1/econ-report-settingsPartial update by name100/call
DELETE/v1/econ-report-settings/:idDelete a single econ report setting by ID–

Query Parameters (GET / HEAD)​

ParameterTypeDescription
skipnumberRecords to skip for pagination (default: 0)
takenumberRecords to return per page (default: 25, max: 200)
cursorstringCursor token from a previous response for cursor pagination
idstringFilter by one or more IDs (comma-separated)
namestringFilter by name
createdAtstringFilter by creation date
updatedAtstringFilter by last-updated date

Top-Level Fields​

FieldTypeWritableRequiredDescription
idstringNo–ID of this econ report setting (read-only)
namestringYesYesDisplay name. Must contain at least one non-whitespace character. No max length. Unique company-wide for API writes.
headersarray of stringYesNoOrdered list of aggregation criteria, at most 5. See headers.
allWellsAggbooleanYesNoInclude the aggregation grand total. Defaults to true when not set.
rollUpEachLevelbooleanYesNoInclude the aggregation subtotal at each level. Defaults to false when not set.
createdBystringNo–ID of the user who created this record (read-only)
createdAtstring (ISO)No–Creation timestamp (read-only)
updatedAtstring (ISO)No–Last-updated timestamp (read-only)

There is no createdByName field: the API returns the raw createdBy user ID only.


headers​

An ordered array of strings identifying the criteria to aggregate the economics report by. Order matters: it reflects aggregation priority, the same as the priority list in the ComboCurve UI.

Each entry must be one of:

KindExamplesNotes
Well-header keywell_name, county, custom_string_0snake_case well-header key; camelCase well field names used elsewhere in the external API are rejected (wellName is invalid)
Special criterionecon_prms_reserves_category, econ_prms_reserves_sub_category, econ_groupAggregation criteria that are not well-header keys
Project-custom-header slot_project_custom_header, _project_custom_header_1, …Accepted by name pattern only; the API does not verify the slot is configured on any specific project
{
"headers": ["well_name", "county", "econ_prms_reserves_category"]
}
At most 5 headers

headers accepts at most 5 entries, matching the ComboCurve UI's limit.

Not the same as the UI picker

The API validates that each key is a recognized well-header, special criterion, or custom-header slot. It does not mirror every ComboCurve UI picker restriction, and it does not check whether a project-custom-header slot is actually configured.

Full header key list

For the complete list of every well-header key accepted by this API, grouped by data type, see Available Header Keys Reference at the end of this page.


Verb Semantics (PUT vs PATCH)​

VerbField absent from bodyField present in body
POST/PUTheaders treated as an empty list; allWellsAgg/rollUpEachLevel not stored (read defaults apply)Value is set exactly as provided
PATCHStored value is left untouchedValue is set exactly as provided (each field updates independently)

PUT and PATCH both match the target record by name (there is no id in the write body). PUT inserts if no match is found; PATCH returns a 404 result entry if no match is found and never inserts.


Validation Rules Summary​

RuleDetail
nameRequired, must contain at least one non-whitespace character, no max length
Unknown top-level fieldsRejected. If present, id is silently ignored; createdBy, createdAt, and updatedAt are not writable.
headersOptional array of non-empty strings, at most 5 items
Each headers[i]Must be a valid well-header key, one of the three special criteria, or a project-custom-header key slot
allWellsAgg / rollUpEachLevelOptional booleans
name uniqueness (create)POST rejects a name that already exists in the tenant, and rejects duplicate names within the same batch
name match count (upsert/patch)If a name matches more than one existing record, PUT/PATCH return a collision error for that record instead of guessing
PATCH on unmatched nameReturns a 404 result entry; never inserts

Examples​

Create an econ report setting​

POST /v1/econ-report-settings
[
{
"name": "My Report Setting",
"headers": ["well_name", "county", "econ_prms_reserves_category"],
"allWellsAgg": true,
"rollUpEachLevel": false
}
]

Response (207 Multi-Status):

{
"results": [
{ "code": 201, "status": "Created", "message": "Successfully created econ report setting" }
],
"successCount": 1,
"failedCount": 0
}

Get an econ report setting​

GET /v1/econ-report-settings/6650a1b2c3d4e5f6a7b8c9d0

Response:

{
"id": "6650a1b2c3d4e5f6a7b8c9d0",
"name": "My Report Setting",
"headers": ["well_name", "county", "econ_prms_reserves_category"],
"allWellsAgg": true,
"rollUpEachLevel": false,
"createdBy": "65fe1a2b3c4d5e6f7a8b9c0d",
"createdAt": "2026-05-11T15:00:00.000Z",
"updatedAt": "2026-05-11T15:00:00.000Z"
}

Partial update (PATCH)​

PATCH /v1/econ-report-settings
[
{ "name": "My Report Setting", "rollUpEachLevel": true }
]

Only rollUpEachLevel changes; headers and allWellsAgg are left untouched.

Replace headers entirely (PUT)​

PUT /v1/econ-report-settings
[
{ "name": "My Report Setting", "headers": ["econ_group"] }
]

Because allWellsAgg/rollUpEachLevel are omitted, they are not stored by this write; reads fall back to the defaults (true / false) unless a previous write had set them.


Error Responses​

400 Bad Request​

{
"results": [
{
"errors": [
{
"message": "'not_a_real_header' is not a valid report header key",
"field": "headers",
"location": "[0].headers[0]"
}
]
}
],
"successCount": 0,
"failedCount": 1
}

404 Not Found​

{
"message": "Econ report setting not found",
"code": 404
}

Known Limitations​

  1. Header-key validation is membership-only, not full UI parity. The API checks that each headers[] entry is a recognized well-header key, special criterion, or custom-header slot; it does not mirror every ComboCurve UI picker restriction, or verify that a custom-header slot is actually configured on any project.
  2. Name uniqueness is enforced only on API writes. Settings created through the ComboCurve UI can still share a name; a PUT/PATCH against a duplicated name returns a collision error rather than guessing which record to update.
  3. GET returns every company-shared setting in the tenant, including ones created in the UI. This is the intended scope, not a filtering gap.
  4. allWellsAgg / rollUpEachLevel defaults are applied only on read. A setting created without them is returned with the defaults applied, but those defaults are not written back unless you set the fields explicitly.
  5. PUT and PATCH match by name; DELETE is by ID only. There is no bulk delete.

Available Header Keys Reference​

Every key accepted by headers[] validation, across all three accepted kinds (well-header keys, special criteria, and project-custom-header slots). This is the complete accepted key universe: 425 keys (372 well-header keys + 3 special criteria + 50 project-custom-header slots).

Membership only, not UI parity

A key appearing here means it will pass validation, not that it is a meaningful or commonly used report criterion. Some accepted well-header keys are rarely useful for aggregation; see Known Limitations #1.

Special criteria​

Aggregation criteria accepted by name that are not well-header fields:

KeyMeaning
econ_prms_reserves_categoryPRMS reserves category assigned to the well's econ run
econ_prms_reserves_sub_categoryPRMS reserves sub-category assigned to the well's econ run
econ_groupThe well's econ group (scenario/combo grouping)

Project-custom-header slots​

Every _project_custom_header* slot name is accepted by name pattern only; the API does not verify the slot is configured on any specific project. There are 50 slots, following one naming pattern:

PatternRangeCount
_project_custom_headerthe base slot, no suffix1
_project_custom_header_<n><n> = 1 through 4949

Well-header keys​

Every well-header key accepted by headers[] validation, grouped by data type (372 keys).

String headers (string, 78 keys)

KeyLabel
abstractAbstract
allocation_typeAllocation Type
api10API 10
api12API 12
api14API 14
aries_idARIES ID
basinBasin
blockBlock
chosenKeyIDChosen ID Key
combo_nameEcon Scenario & Combo
completion_designCompletion Design
countryCountry
countyCounty/Parish
current_operatorCurrent Operator
current_operator_aliasCurrent Operator Alias
current_operator_codeCurrent Operator Code
current_operator_tickerCurrent Operator Ticker
dataPoolData Pool
dataSourceData Source
dataSourceCustomNameCustom Data Source
districtDistrict
drillinginfo_idDI ID
elevation_typeElevation Type
fieldField
first_frac_vendorFrac Vendor (1st Job)
first_treatment_typeTreatment Type (1st Job)
flow_pathFlow Path
fluid_typeFluid Type
gas_gathererGas Gatherer
geohash(no display label)
hole_directionHole Direction
ihs_idIHS ID
inptIDINPT ID
landing_zoneLanding Zone
lease_nameLease Name
lease_numberLease Number
monthly_or_daily(no display label)
mostRecentImportDescImport Name
mostRecentImportTypeImport Type
ngl_gatherer(no display label)
oil_gathererOil Gatherer
pad_namePad Name
parent_child_any_zoneParent Child Any Zone
parent_child_same_zoneParent Child Same Zone
phdwin_idPhdWin ID
playPlay
previous_operatorPrevious Operator
previous_operator_aliasPrevious Operator Alias
previous_operator_codePrevious Operator Code
previous_operator_tickerPrevious Operator Ticker
primary_productPrimary Product
prms_reserves_categoryPRMS Reserves Category
prms_reserves_sub_categoryPRMS Reserves Sub Category
prms_resources_classPRMS Reserves Class
production_methodProduction Method
proppant_mesh_sizeProp Mesh Size
proppant_typeProp Type
rangeRange
recovery_methodRecovery Method
refrac_frac_vendorFrac Vendor (Refrac)
refrac_treatment_typeTreatment Type (Refrac)
rigRig Name
rseg_idRSEG ID
sectionSection
spgci_idSPGCI ID
stateState
statusStatus
subplaySubplay
surveySurvey
target_formationTarget Formation
tgs_idTGS ID
toe_in_landing_zoneToe In Landing Zone
toe_upToe Up
townshipTownship
type_curve_areaType Curve Area
well_nameWell Name
well_numberWell Number
well_typeWell Type

Numeric headers (number, 180 keys)

KeyLabel
acre_spacingAcre Same Zone Spacing
azimuthAzimuth
before_income_tax_cash_flowBefore Income Tax Cash Flow
bg(no display label)
bo(no display label)
bubble_point_press(no display label)
casing_idCasing ID
choke_sizeChoke Size
cum_boeCum BOE
cum_boe_per_perforated_intervalCum BOE/Perf LL
cum_gasCum Gas
cum_gas_per_perforated_intervalCum Gas/Perf LL
cum_gorCum GOR
cum_mmcfgeCum MMCFGE
cum_mmcfge_per_perforated_intervalCum MMCFGE/Perf LL
cum_oilCum Oil
cum_oil_per_perforated_intervalCum Oil/Perf LL
cum_waterCum Water
cum_water_per_perforated_intervalCum Water/Perf LL
dew_point_press(no display label)
distance_from_base_of_zoneDistance From Base Of Zone
distance_from_top_of_zoneDistance From Top Of Zone
drainage_areaDrainage Area
elevationElevation
first_12_boeFirst 12 BOE
first_12_boe_per_perforated_intervalFirst 12 BOE/Perf LL
first_12_gasFirst 12 Gas
first_12_gas_per_perforated_intervalFirst 12 Gas/Perf LL
first_12_gorFirst 12 GOR
first_12_mmcfgeFirst 12 MMCFGE
first_12_mmcfge_per_perforated_intervalFirst 12 MMCFGE/Perf LL
first_12_oilFirst 12 Oil
first_12_oil_per_perforated_intervalFirst 12 Oil/Perf LL
first_12_waterFirst 12 Water
first_12_water_per_perforated_intervalFirst 12 Water/Perf LL
first_6_boeFirst 6 BOE
first_6_boe_per_perforated_intervalFirst 6 BOE/Perf LL
first_6_gasFirst 6 Gas
first_6_gas_per_perforated_intervalFirst 6 Gas/Perf LL
first_6_gorFirst 6 GOR
first_6_mmcfgeFirst 6 MMCFGE
first_6_mmcfge_per_perforated_intervalFirst 6 MMCFGE/Perf LL
first_6_oilFirst 6 Oil
first_6_oil_per_perforated_intervalFirst 6 Oil/Perf LL
first_6_waterFirst 6 Water
first_6_water_per_perforated_intervalFirst 6 Water/Perf LL
first_additive_volumeAdditive Vol (1st Job)
first_cluster_countCluster Count (1st Job)
first_discount_cash_flowFirst Discount Cash Flow
first_fluid_per_perforated_intervalTotal Fluid/Perf LL (1st Job)
first_fluid_volumeTotal Fluid (1st Job)
first_max_injection_pressureMax Injection Pressure (1st Job)
first_max_injection_rateMax Injection Rate (1st Job)
first_prop_weightTotal Prop (1st Job)
first_proppant_per_fluidTotal Prop/Fluid (1st Job)
first_proppant_per_perforated_intervalTotal Prop/Perf LL (1st Job)
first_stage_countStage Count (1st Job)
first_test_flow_tbg_pressFirst Test Flow TBG Press
first_test_gas_volFirst Test Gas Vol
first_test_gorFirst Test Gor
first_test_oil_volFirst Test Oil Vol
first_test_water_volFirst Test Water Vol
footage_in_landing_zoneFootage In Landing Zone
formation_thickness_meanFormation Thickness Mean
fracture_conductivity(no display label)
gas_breakevenGas Break Even
gas_c1(no display label)
gas_c2(no display label)
gas_c3(no display label)
gas_co2(no display label)
gas_h2(no display label)
gas_h2o(no display label)
gas_h2s(no display label)
gas_he(no display label)
gas_ic4(no display label)
gas_ic5(no display label)
gas_n2(no display label)
gas_nc10(no display label)
gas_nc4(no display label)
gas_nc5(no display label)
gas_nc6(no display label)
gas_nc7(no display label)
gas_nc8(no display label)
gas_nc9(no display label)
gas_o2(no display label)
gas_shrunk_eurGas Shrunk EUR
gas_shrunk_eur_over_pllGas Shrunk EUR/PLL
gas_specific_gravityGas Specific Gravity
gross_perforated_intervalGross Perforated Interval
ground_elevationGround Elevation
heelLatitudeHeel Latitude
heelLongitudeHeel Longitude
horizontal_spacingHorizontal Spacing
hz_well_spacing_any_zoneHz Well Spacing Any Zone
hz_well_spacing_same_zoneHz Well Spacing Same Zone
initial_respressInitial Respress
initial_restempInitial Restemp
irrIRR
landing_zone_baseLanding Zone Base
landing_zone_topLanding Zone Top
last_12_boeLast 12 BOE
last_12_boe_per_perforated_intervalLast 12 BOE/Perf LL
last_12_gasLast 12 Gas
last_12_gas_per_perforated_intervalLast 12 Gas/Perf LL
last_12_gorLast 12 GOR
last_12_mmcfgeLast 12 MMCFGE
last_12_mmcfge_per_perforated_intervalLast 12 MMCFGE/Perf LL
last_12_oilLast 12 Oil
last_12_oil_per_perforated_intervalLast 12 Oil/Perf LL
last_12_waterLast 12 Water
last_12_water_per_perforated_intervalLast 12 Water/Perf LL
last_month_boeLast Month BOE
last_month_boe_per_perforated_intervalLast Month BOE/Perf LL
last_month_gasLast Month Gas
last_month_gas_per_perforated_intervalLast Month Gas/Perf LL
last_month_gorLast Month GOR
last_month_mmcfgeLast Month MMCFGE
last_month_mmcfge_per_perforated_intervalLast Month MMCFGE/Perf LL
last_month_oilLast Month Oil
last_month_oil_per_perforated_intervalLast Month Oil/Perf LL
last_month_waterLast Month Water
last_month_water_per_perforated_intervalLast Month Water/Perf LL
lateral_lengthLateral Length
lower_perforationLower Perforation
matrix_permeabilityMatrix Permeability
measured_depthMeasured Depth
midpointLatitudeMidpoint Latitude
midpointLongitudeMidpoint Longitude
month_producedMonths Produced
ngl_shrunk_eurNGL EUR
ngl_shrunk_eur_over_pllNGL EUR/PLL
nri_oilNRI Oil
num_treatment_recordsNum Treatment Records
oil_api_gravityOil API Gravity
oil_breakevenOil Break Even
oil_shrunk_eurOil Shrunk EUR
oil_shrunk_eur_over_pllOil Shrunk EUR/PLL
oil_specific_gravityOil Specific Gravity
payout_durationPayout Duration
percent_in_zonePercent In Zone
perf_lateral_lengthPerf Lateral Length
porosityPorosity
refrac_additive_volumeAdditive Vol (Refrac)
refrac_cluster_countCluster Count (Refrac)
refrac_fluid_per_perforated_intervalTotal Fluid/Perf LL (Refrac)
refrac_fluid_volumeTotal Fluid (Refrac)
refrac_max_injection_pressureMax Injection Pressure (Refrac)
refrac_max_injection_rateMax Injection Rate (Refrac)
refrac_prop_weightTotal Prop (Refrac)
refrac_proppant_per_fluidTotal Prop/Fluid (Refrac)
refrac_proppant_per_perforated_intervalTotal Prop/Perf LL (Refrac)
refrac_stage_countStage Count (Refrac)
rs(no display label)
sgGas Saturation
soOil Saturation
stage_spacingStage Spacing
surfaceLatitudeSurface Latitude
surfaceLongitudeSurface Longitude
swWater Saturation
thicknessThickness
toeLatitudeToe Latitude
toeLongitudeToe Longitude
total_additive_volumeAdditive Vol (All Jobs)
total_cluster_countTotal Cluster (All Jobs)
total_fluid_per_perforated_intervalTotal Fluid/Perf LL (All Jobs)
total_fluid_volumeTotal Fluid (All Jobs)
total_prop_weightTotal Prop (All Jobs)
total_proppant_per_fluidTotal Prop/Fluid (All Jobs)
total_proppant_per_perforated_intervalTotal Prop/Perf LL (All Jobs)
total_stage_countTotal Stages (All Jobs)
true_vertical_depthTrue Vertical Depth
tubing_depthTubing Depth
tubing_idTubing ID
undiscounted_roiUndisc ROI
upper_perforationUpper Perforation
vertical_spacingVertical Spacing
vt_well_spacing_any_zoneVt Well Spacing Any Zone
vt_well_spacing_same_zoneVt Well Spacing Same Zone
wi_oilWI Oil
zi(no display label)

Date headers (date, 18 keys)

KeyLabel
completion_end_dateCompletion End Date
completion_start_dateCompletion Start Date
date_rig_releaseDate Rig Release
drill_end_dateDrill End Date
drill_start_dateDrill Start Date
econ_first_production_dateEcon First Prod Date
econ_run_dateEcon Run Date
first_prod_dateFirst Prod Date
first_prod_date_daily_calcFirst Prod Date Daily
first_prod_date_monthly_calcFirst Prod Date Monthly
gas_analysis_date(no display label)
last_prod_date_dailyLast Prod Date Daily
last_prod_date_monthlyLast Prod Date Monthly
mostRecentImportDateImport Date
permit_datePermit Date
refrac_dateRefrac Date
spud_dateSpud Date
tilTIL

Boolean headers (boolean, 5 keys)

KeyLabel
copiedCopied Well
genericCreated Well
has_dailyHas Daily Data
has_directional_surveyHas Directional Survey
has_monthlyHas Monthly Data

Company custom headers (slot keys are always valid, regardless of whether a tenant has renamed them)

Key rangeCountType
custom_string_0 – custom_string_3435string
custom_number_0 – custom_number_1920number
custom_date_0 – custom_date_1920date
custom_bool_0 – custom_bool_45boolean

Other accepted keys (rarely useful as report criteria) (mixed, 11 keys)

KeyLabel
chosenIDChosen ID
closest_well_any_zoneClosest Well ID Any Zone
closest_well_same_zoneClosest Well ID Same Zone
copiedFrom(no display label)
heelLocation(no display label)
location(no display label)
midpointLocation(no display label)
mostRecentImport(no display label)
project(no display label)
toeLocation(no display label)
wells_collection_items(no display label)