Sign a tolling CapacityContract
Wire a tolling contract — capacity payment, variable payment, dispatch authority, fuel supply chain, force majeure regime, resource adequacy pledge.
Prerequisites
- A
ComputeSlotregistered and at the FINANCE/BUILD gate or beyond - Buyer and seller
participant_ids in the Identity Graph - Counsel-reviewed terms aligned to the standard contractual atoms (see CapacityContract)
Step 1 — Construct the contract payload
Tolling = buyer supplies fuel, dispatches the asset, pays a capacity payment + variable per-MWh fee.
{
"contract_id": "ccx-pampa-jv-phase1-tenant-001",
"contract_type": "tolling",
"status": "executed",
"slot_id": "slot-pampa-jv-phase1",
"seller_participant_id": "joule-spv-pampa-001",
"buyer_participant_id": "hyperscaler-tenant-001",
"contract_capacity_mw": 200,
"heat_rate_btu_per_kwh": 7800,
"dispatch_authority": "buyer",
"delivery_points": [
{ "kind": "energy", "point_name": "Pampa JV — on-site CCGT busbar (132 kV behind-the-meter)", "voltage_kv": 132 },
{ "kind": "gas", "point_name": "Wellhead direct — Rincón de Aranda Pad 1 separator outlet", "pressure_psig": 600 }
],
"fuel_supply_chain": [
{
"dependency_kind": "PGA",
"counterparty": "Pampa Energía S.A. — Rincón de Aranda upstream",
"contract_reference": "PGA-PAMPA-RDA-2027",
"cure_period_days": 10,
"failure_treats_unit_unavailable": true
}
],
"capacity_payment": {
"monthly_payment_usd": "5000000",
"payment_per_mw_month_usd": "25000",
"availability_threshold_pct": 0.92,
"heat_rate_target_btu_per_kwh": 7800,
"heat_rate_adjustment_per_pct": 1
},
"variable_payment": {
"per_mwh_usd": "4.5",
"fuel_cost_passthrough": false
},
"outage_regime": {
"forced_outage_notice_window_minutes": 30,
"planned_outage_advance_notice_days": 60
},
"force_majeure": {
"day_for_day_extension": true,
"termination_threshold_days": 365
},
"settlement_path": "bilateral_private",
"tolling_currency": "USD_onshore_via_RIGI_carve_out",
"cfe_obligation": "none",
"regulatory_corpus_id": "AR@2026-05-06.1",
"delivery_period_start": "2027-06-01",
"delivery_period_end": "2032-05-31"
}Behind-the-meter / off-grid note. This example omits a
resource_adequacy_pledgebecause the slot is structured as off-grid (no SADI interconnect). There is no CAMMESA-administered RA program available to a load that does not consume from the system. Off-grid revenue flows entirely through the bilateral CapacityContract; in-front-of-meter / Autogenerador structures with SADI interconnect would addresource_adequacy_pledgereferencing an applicable program (MAT_THERMAL,MAT_ER, or equivalent). See the Argentina corpus reference for the full enumeration and theAR_R1open counsel-review item.
Step 2 — Submit
curl -X POST https://sandbox-api.dmtr.ai/v1/energy/contracts \
-H "Authorization: Bearer $DMTR_KEY" \
-H "Content-Type: application/json" \
-d @contract.jsonStep 3 — Pledge the corresponding Encumbrance on the Position
When the contract carries a resource_adequacy_pledge (in-front-of-meter / Autogenerador structures), reference an encumbrance id and add it to the underlying Position's encumbrances array so the core rights engine sees the pledge:
curl -X PATCH https://sandbox-api.dmtr.ai/v1/positions/pos-pampa-jv-phase1 \
-d '{
"encumbrances": [{
"encumbrance_id": "enc-pampa-001",
"type": "pledge",
"holder": "hyperscaler-tenant-001",
"created_at": "2027-01-15",
"obligation_reference": "ccx-pampa-jv-phase1-tenant-001"
}]
}'Step 4 — Issue dispatch notices once in delivery
curl -X POST https://sandbox-api.dmtr.ai/v1/energy/contracts/ccx-pampa-jv-phase1-tenant-001/dispatch-notice \
-d '{
"dispatch_id": "dn-2027-06-01-001",
"issued_at": "2027-06-01T08:00:00Z",
"effective_at": "2027-06-01T08:30:00Z",
"instruction": "ramp_to_setpoint",
"target_mw": 180,
"ramp_rate_mw_per_min": 5
}'Settlement calculation
Compute capacity payments using the @dmtr/energy/settlement module:
import { computeAvailability, computeMonthlyCapacityPayment } from "@dmtr/energy/settlement";
const avail = computeAvailability(
{ contract_capacity_mw: 200, available_mw_by_hour: hourly },
contract.capacity_payment.availability_threshold_pct,
);
const payment = computeMonthlyCapacityPayment(contract, avail, "2027-06", measuredHeatRate);
// → reduced_monthly_capacity_payment_usd, capacity_price_adjustment_factor, heat_rate_adjustment_factorSee CapacityContract for the underlying formulas.
Related guides
- File the permit stack
- Run an RFP as a tenant (the buyer's side of the same negotiation)
- Sublease a slot (secondary tenant transfer)