Getting model/assumption names tied to an econ run via API?

Hey all,

Hoping someone’s figured this out — I’m trying to pull the assumption model names (pricing, expenses, stream properties, etc.) that were used in a specific econ run, and I’m running out of endpoints to try.

Basically, I can see that qualifiers exist (e.g. "Default") but can’t find where the API exposes the mapping of qualifier → model ID/name. In the CC UI, I can add which model is assigned to each qualifier in the scenario setup to the Oneline, so I’m hoping I can do this via the API also.

Is there an endpoint I’m missing? Would love to be able to store “this run used Pricing Model X, Expenses Model Y” alongside the oneliner outputs we’re pulling.

Thanks!

Tracy

1. Get the econ run and its scenario context:
GET /v1/econ-runs, or
GET /v1/projects/:projectId/scenarios/:scenarioId/econ-runs
These return econ run documents.
2. Get the combo / qualifier setup for the scenario:
Scenario combos store qualifiers as { assumption, qualifierName }.
The docs show examples like pricing -> Default, expenses -> Default, streamProperties -> Default, etc.
Important caveat: if combos were not explicitly saved, the docs say the combos “will not be stored anywhere after the scenario is run.”
3. Resolve each { assumption, qualifierName } to the actual econ model assignment:
Use the econ model assignments endpoint:


GET /v1/projects/{projectId}/econ-models/{econName}/{econModelId}/assignments

That endpoint supports filtering by scenarios, and wells.
Valid econName values include pricing, expenses, stream-properties, capex, general-options, production-taxes, riskings, etc.
4. Get model names from the econ model endpoints:
• Project-level models: GET /v1/projects/:projectId/econ-models
• Company-level models: GET /v1/econ-models
These return econ model documents, which is where you can resolve model IDs to names.
So the join path is roughly:

econRun
  -> scenarioId
  -> saved scenario combo / selected qualifier per assumption
  -> econ model assignments filtered by scenario + qualifierName
  -> econ model document to get model name

Note:

  • If the scenario assignments changed after the run, the assignments endpoint may reflect the current assignment state rather than the historical state at run time.

Thanks for the detailed walkthrough. I followed each step but the join path isn’t returning what the UI shows, so hoping you can confirm whether this is a limitation or whether I’m calling the wrong endpoint.

(Full transparency: I worked through the diagnostics with Claude, which also helped format this reply. All API calls, IDs, and responses below are from my actual environment.)

Test case:

  • Project ID: 63084b80fcf8460013c92992 (PTOG Master)

  • Scenario ID: 67a00d629958039a2191be5c (PTOG Type Wells - Latest)

  • Econ Run ID: 69de6385353e3f15221c1f69

In the UI scenario grid, every well shows a populated model name under the “Default” qualifier for Pricing, Expenses, Capex, Stream Properties, etc. — exactly what I want to read via the API.

What I tried (matching your steps):

Step 1 — Get the econ run.
GET /v1/projects/{pid}/scenarios/{sid}/econ-runs/{runId} returns:

  • {"id": "69de6385...", "runDate": "2026-04-14T15:55:49Z", "status": "complete", "tags": [], "outputParams": {...}, "project": "63084b...", "scenario": "67a00d..."}
    

No embedded combo/qualifier object.

Step 2 — Get the scenario combos/qualifiers.
GET /v1/projects/{pid}/scenarios/{sid}/qualifiers returns:

  • {"capex": ["Default"], "dates": ["Default"], "expenses": ["Default"],
     "pricing": ["Default"], "differentials": ["Default"], "streamProperties": ["Default"], "productionTaxes": ["Default"], "risking": ["Default"], ...}
    

Good — qualifier names retrieved.

GET /v1/projects/{pid}/scenarios/{sid}/combos → 404 “Method does not exist”

Step 3 — Resolve assignment per (econName, modelId).
GET /v1/projects/{pid}/econ-models/pricing/{any-pricing-model-id}/assignments?scenarios={sid} returns [] (empty list) for every model I probed across all 8 econ types (45 pricing models, 36 capex, 16 expenses, 5 stream-properties, etc., across both project-level and company-level econ-models).

An unfiltered probe ?take=5 returns 0–1 rows total per type — nowhere near the 535 wells visible in the UI grid for this scenario.

Step 4 — Get model names.
GET /v1/projects/{pid}/econ-models and GET /v1/econ-models both work fine and return all model definitions with id and name. So step 4 is fine — but I have nothing from step 3 to look up.

Other things I tried:

  • GET /v1/projects/{pid}/scenarios/{sid}/well-assignments returns only {“wells”: [, , …]} — no model bindings.

  • GET /v1/projects/{pid}/scenarios/{sid}/well-assignments/{wellId} → 404.

  • GET /v1/econ-models/pricing?well={wellId} returns len=0 for every well I tried (the docs note this filter only matches unique per-well overrides, not Default-qualifier assignments).

  • POST /v1/projects/{pid}/econ-models/pricing/assignments with {“scenarios”:[sid],“wells”:[wellId]} → 404.

  • GET /v1/projects/{pid}/scenarios/{sid}/inputs|table|columns|grid|models|assignments → all 404.

  • GET /v1/openapi.json and ~10 other discovery URLs → all 404.

Question:
Is the per-well-per-type model assignment (the data shown in the UI scenario grid under the Default qualifier) exposed via the public API? If yes, which endpoint returns it? If no, is there a CSV/Excel scenario-table export endpoint we can call?

Thanks!