Versions
Every push of changed bytes creates a new immutable version (an object). The versions of one prop form a lineage, and the entry points at one of them as its current version (object_id on the entry, also called the face). Old versions are never overwritten.
| Method and path | Scope | Purpose |
|---|---|---|
GET /lineages/{lineage_id} |
read | Version history |
POST /entries/{entry_id}/restore |
write | Make an earlier version current |
Lineage ids look like guid:6F9619FF8B86D011B42D00C04FC964FF (anchored on an Unreal package GUID) or ph:0b6e4c1f9a2d4f0e8c7b5a3d2e1f0a9b (assigned by Prophouse). URL-encode the colon if your client needs it (guid%3A...).
GET /lineages/{lineage_id}
Section titled “GET /lineages/{lineage_id}”{ "lineage_id": "guid:6F9619FF8B86D011B42D00C04FC964FF", "entry": { "id": 412, "name": "SM_Barrel_Rusty", "object_id": 1880, "status": "active" }, "objects": [ { "id": 1880, "content_hash": "9f2c...e41a", "lineage_anchor": "stamp", "parent_object_id": 1502, "variant_label": null, "asset_class": "StaticMesh", "asset_name": "SM_Barrel_Rusty", "origin_path": "/Game/Props/Industrial/SM_Barrel_Rusty", "blob_size": 1048576, "source_ext": null, "engine_version": "5.8.0", "package_guid": "6F9619FF8B86D011B42D00C04FC964FF", "pack": { "id": 3, "name": "Industrial Yard" }, "published_by": { "id": 7, "name": "<user>", "display_name": "Sam Rigger" }, "date_ingested": "2026-07-20T09:11:40Z", "is_face": true } ]}| Field | Description |
|---|---|
objects |
Every version in the lineage, oldest first. |
entry |
The entry showing this lineage, or null if none does. |
parent_object_id |
The version this one was made from. Together these form the version tree. |
lineage_anchor |
How the version joined the lineage: guid, stamp, minted or user_attached. |
variant_label |
Set when the version was pushed as a variant. |
is_face |
true for the entry’s current version. |
Unknown lineage: 404 LINEAGE_NOT_FOUND.
To download any version, use its content_hash with Downloads. To see review state or comments pinned to a version, match on object_id in Reviews and Comments.
POST /entries/{entry_id}/restore
Section titled “POST /entries/{entry_id}/restore”Make an earlier version the entry’s current version.
curl -X POST -H "Authorization: Bearer $PH_KEY" -H "Content-Type: application/json" \ -d '{"object_id": 1502}' \ https://api.prophouse.dev/api/v1/entries/412/restore| Field | Type | Description |
|---|---|---|
object_id |
integer, required | A version from the entry’s own lineage. |
Returns the full entry detail. Restoring does not create a new version: the entry simply points at the old one again, with that version’s metadata, thumbnail and review state. It records an entry.restore event in the activity feed. Restoring the version that is already current changes nothing.
| Error | Cause |
|---|---|
404 ENTRY_NOT_FOUND |
Unknown entry. |
404 OBJECT_NOT_FOUND |
Unknown version. |
409 LINEAGE_CONFLICT |
The version belongs to a different lineage (details.entry_lineage_id, details.object_lineage_id). |
409 LOCKED |
Someone else has the prop checked out. The message names them, and details.holder and details.lock describe the lock. Admins and the lock holder are not blocked. |
If you hold the lock yourself, restoring moves your lock’s base_object_id to the restored version, so your next check-in is fenced on it; see Check-out locks.
Anyone pushing on top of the old current version after a restore gets 409 STALE_FACE if they sent expected_face_object_id; see Push a new version.
