What this covers
This guide explains the Progression V2 nation projects endpoints:
GET /api/nations/[id]/projectsPOST /api/nations/[id]/projects/startPOST /api/nations/[id]/projects/fund
Shared behavior
- Auth required (session cookie).
- You must own the nation in
[id]. - Tick timing is authoritative server-side.
`GET /api/nations/[id]/projects`
Returns project state in progression-config order.
Data includes:
nationId,worldId,currentTicklaborCurrent,laborMaxprojects[]with:projectKey,namestatus:ACTIVE | COMPLETE | CANCELLED | MISSINGprogressMilli,requiredWorkMilli,percentCompletefunding.laborStartCostisFunded(whether the project builder has been started)startedAtTick,completedAtTick
`POST /api/nations/[id]/projects/start`
Starts the next eligible project in progression order.
- No request body required.
- Server selects the next startable project.
- New/started project gets
status=ACTIVEandstartedAtTick=currentTick.
Typical failures:
PROJECT_PREREQ_NOT_METNO_ELIGIBLE_PROJECT
`POST /api/nations/[id]/projects/fund`
Starts or extends active project funding by spending labor.
Request body:
``json { "projectKey": "era_project_state", "days": 1 } ``
days is optional and defaults to 1.
Success returns:
projectKeylaborStartCostappliedFundingDayslaborCurrentBefore,laborCurrentAfterfundedUntilTickfundedTicksRemaining
Common blockers:
PROJECT_KEY_INVALIDPROJECT_NOT_FOUNDPROJECT_NOT_ACTIVEPROJECT_PREFUND_CAP_REACHEDINSUFFICIENT_LABOR
Labor semantics
Funding uses **labor-paid windows** tied to ticks.
- Funding applies in day-sized windows (
days), each costing the configured labor start cost. - First successful fund call starts funding coverage; additional calls extend coverage.
- Coverage cannot be stacked beyond the configured prefund cap (
PROJECT_PREFUND_CAP_REACHED). - Project progress advances on ticks while funding coverage remains.