/api/artifacts
/api/artifacts
Returns every artifact the player owns, with its lifecycle state (studying / active / idle) and its full static definition inlined. The top level is a bare array.
Method
GET
Response Structure
[
{
"id": 38108,
"userId": 428,
"artifactDefId": 79,
"planetId": null,
"hubId": null,
"status": "studying",
"activationStartedAt": null,
"activationEndsAt": null,
"activationJobId": null,
"expiresAt": null,
"expirationJobId": null,
"acquiredAt": "2026-08-26T08:15:50.315Z",
"studyPlanetId": 42432,
"studyStartedAt": "2026-08-26T09:30:59.449Z",
"studyEndsAt": "2026-08-26T10:30:59.449Z",
"studyJobId": "artifact-study-428-38108-1787736659453",
"definition": {
"id": 79,
"key": "dimensional_sieve",
"name": "Dimensional Sieve",
"description": "Filters materials across dimensional barriers, finding rare resources hidden from normal sensors.",
"tier": "epic",
"scope": "global",
"effectType": "rare_resource_bonus",
"effectValue": 0.2,
"effectResource": null,
"activationCostOre": 8000,
"activationCostSilicates": 6000,
"activationCostHydrogen": 2000,
"activationCostAlloys": 0,
"activationCostEnergy": 0,
"activationTime": 14400,
"duration": 259200
}
}
]
Notes
statusdrives which actions apply; the study and activation timers are separate (studyStartedAt/studyEndsAtvsactivationStartedAt/activationEndsAt).definition.scopeisplanetorglobal;planetIdis set for a planet-scoped artifact that is currently active somewhere.expiresAtis when an active effect lapses;durationin the definition is that lifetime in seconds.- Every mutation endpoint below re-fetches this list in the client, so treat it as the single source of truth for artifact state.
Live Verification
- Verified 2026-08-26 on
s0:GET /api/artifacts->200. - Example above is a real response with every array truncated to its first item.
- Live array sizes at capture time:
(root)=20.