Guides / Launch a PowerYield offering
Copy page as MarkdownJoin the sandbox waitlist
GuideEARLY ACCESS

Launch a PowerYield offering

Turn an operating project into units the world can own. This assumes the project has cleared both gates: the data gate and the legal one.

Prerequisites

· project.status is operating

· data_assurance is L2 or L3

· asset_readiness is investment_ready — title, offtake, SPV, insurance and permits verified by a licensed partner, and settlement rails and custody in place

· T2 · Certified Partner, and T3 if you are marketing to investors yourself

· A settlement account configured for the project, and legal review of your offering terms in each jurisdiction you list

⚠ Signed telemetry is half the requirement

Reaching L2 is the fast half and the one you control. Reaching investment_ready involves documents, a licensed verifier, and other people's calendars. Start it in parallel with the gateway install, not after — teams that sequence them serially lose a month they did not budget for.

01Model the waterfall before you commit to it

curl -X POST https://sandbox.api.arkreen.com/v1/distributions:simulate \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "project_id": "prj_8fK2mQ",
    "period": { "start": "2026-07-01", "end": "2026-07-31" },
    "waterfall": [
      { "recipient": "opex_reserve", "type": "percent", "value": 18.0 },
      { "recipient": "operator",     "type": "percent", "value": 7.0, "org_id": "org_9dK2" },
      { "recipient": "protocol_fee", "type": "percent", "value": 2.5 },
      { "recipient": "unit_holders", "type": "residual" }
    ]
  }'

Simulation runs your proposed split against real historical generation for that project. Run it across at least twelve months — including the worst one. The waterfall is immutable once the offering opens, and a split that works in July and fails in November is a problem you want to find now.

⚠ percent is of remaining, not gross

Worked example, 164140 minor gross: opex_reserve 18% → 29545, leaving 134595; operator 7% of that → 9421, leaving 125174; protocol_fee 2.5% of that → 3129; residual → 122045. Computing all three against gross instead yields 119001 for holders — a 3,044 minor difference on one epoch, in the same direction, every epoch.

02Create the offering

curl -X POST https://sandbox.api.arkreen.com/v1/offerings \
  -H "Authorization: Bearer $TOKEN" -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "project_id": "prj_8fK2mQ",
    "unit": { "type": "power_yield", "capacity_w": 100 },
    "total_units": 3000,
    "unit_price_minor": 12000,
    "currency": "USD",
    "settlement_asset": { "chain": "polygon", "token": "USDC" },
    "distribution": { "frequency": "monthly", "waterfall": [ ... ] },
    "compliance": {
      "min_data_assurance": "L2",
      "required_asset_readiness": "investment_ready",
      "eligible_jurisdictions": ["SG","HK","AE","CH"],
      "excluded_jurisdictions": ["US"],
      "investor_type": "accredited",
      "transfer_restriction": "whitelist"
    },
    "lockup_days": 180,
    "opens_at": "2026-09-01T00:00:00Z"
  }'

total_units should equal installed_capacity_w ÷ 100. Issuing fewer means you retain the remainder; issuing more is rejected.

03Compliance review

Offerings enter pending_review. We verify that your declared jurisdictions are consistent with the legal opinions on file and that the waterfall recipients are all verified organizations. We do not opine on your terms.

04Open

curl -X POST https://sandbox.api.arkreen.com/v1/offerings/off_9tW4:open -H "Authorization: Bearer $TOKEN"

On open, the ERC-1155 token id is minted, ComplianceGate rules are written on-chain, and the offering becomes discoverable at GET /v1/offerings. The waterfall is now immutable.

05Watch it fill

Webhooks: offering.opened · subscription.settled · offering.filled

Done when

offering.status is filled or closed and positions exist.

Common problems

insufficient_assurance on create

data_assurance dropped between review and creation. Check GET /v1/projects/{id}/assurance for the trigger and for assurance_state — if it reads provisional_downgrade you have 14 days and a remediation endpoint, not a dead project.

insufficient_readiness on create

data_assurance is fine and asset_readiness is not. This is a document or a rail, not a meter. The assurance detail response names the missing item under asset_readiness.blocking.

waterfall_invalid

Almost always a missing or duplicated residual entry. There must be exactly one, last.

Simulation shows unit_holders near zero in some months

Your fixed and percent entries are consuming everything. Disclose it or restructure — but do it before opening, because you cannot afterward.