Skip to content
Dark MatterDark Matter
EnergyGuides

Compose a multi-owner pool

End-to-end guide for energy aggregation: DemandSpec -> AllocationPlan -> CapacityPool -> tranches -> waterfall.

The full aggregation DSL:

DemandSpec -> AllocationPlan -> CapacityPool -> PoolTranche -> PoolWaterfallExecution

1) Generate allocation plan

curl -sS -X POST "$DMTR_API/v1/energy/demand/demand-hyperscaler-2027-q2-latam/allocation-plan" \
  -H "Authorization: Bearer $DMTR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "solver_strategy": "greedy_score",
    "max_components": 4,
    "tenantOfacScreenedAt": "2026-04-30",
    "estimatedProjectValueUsd": 800000000
  }'

Save the returned plan_id, components[], and aggregate_mw.

2) Create pool from plan

curl -sS -X POST "$DMTR_API/v1/energy/pools" \
  -H "Authorization: Bearer $DMTR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pool_id": "pool-latam-2027-001",
    "pool_type": "geographically_distributed",
    "status": "binding",
    "components": [
      {
        "slot_id": "slot-pampa-jv-phase1",
        "position_id": "pos-pampa-jv-phase1",
        "owner_participant_id": "joule-frontier-fund-i",
        "contributing_mw": 200,
        "entry_date": "2027-01-15",
        "exit_terms": {
          "lock_period_months": 24,
          "exit_notice_months": 6,
          "exit_penalty_schedule": [{ "months_remaining_min": 12, "penalty_pct": 0.08 }]
        }
      },
      {
        "slot_id": "slot-elchocon-phase1",
        "position_id": "pos-elchocon-phase1",
        "owner_participant_id": "neuquen-hydro-consortium",
        "contributing_mw": 300,
        "entry_date": "2027-01-15",
        "exit_terms": {
          "lock_period_months": 24,
          "exit_notice_months": 6,
          "exit_penalty_schedule": [{ "months_remaining_min": 12, "penalty_pct": 0.08 }]
        }
      }
    ],
    "aggregate_mw": 500,
    "governing_agreement_id": "ga-latam-pool-001",
    "waterfall_strategy": "pro_rata_mw",
    "availability_aggregation": "strict",
    "regulatory_posture": "per_component_passthrough",
    "effective_stage_gate": "permits",
    "contract_structure": "single_pool_contract"
  }'

3) Sign pool (issues encumbrances)

curl -sS -X POST "$DMTR_API/v1/energy/pools/pool-latam-2027-001/sign" \
  -H "Authorization: Bearer $DMTR_KEY"

4) Add tranches

curl -sS -X POST "$DMTR_API/v1/energy/pools/pool-latam-2027-001/tranches" \
  -H "Authorization: Bearer $DMTR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tranche_id": "tranche-senior-001",
    "seniority": 0,
    "notional_mw_share": 350,
    "mw_share_pct": 0.7,
    "payment_priority_rank": 0,
    "default_treatment": "absorb_shortfall_first"
  }'
curl -sS -X POST "$DMTR_API/v1/energy/pools/pool-latam-2027-001/tranches" \
  -H "Authorization: Bearer $DMTR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tranche_id": "tranche-junior-001",
    "seniority": 1,
    "notional_mw_share": 150,
    "mw_share_pct": 0.3,
    "payment_priority_rank": 1,
    "default_treatment": "absorb_shortfall_first"
  }'

5) Execute waterfall

curl -sS -X POST "$DMTR_API/v1/energy/pools/pool-latam-2027-001/waterfall" \
  -H "Authorization: Bearer $DMTR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "period_label": "2027-06",
    "available_usd": "1000000"
  }'

6) Dissolve pool

/dissolve returns 409 if the pool is not executed or if any pool-level contract remains non-terminal.

curl -sS -X POST "$DMTR_API/v1/energy/pools/pool-latam-2027-001/dissolve" \
  -H "Authorization: Bearer $DMTR_KEY"
Edit this page on GitHub

Last reviewed: June 12, 2026

Was this page helpful?