Project profile
project_profile.json — the Project Knowledge page's profile: what the project is, how it works, where things live and how a change ships, written by Study from the repository's own files; one object per project.
Base path /api/v1/project-profile on https://ionwarp.com. Authenticate with Authorization: Bearer $DASH_API_KEY and name the project with the Project-ID header. Writes are validated in declared mode; an operation this resource does not declare answers 405 operation_not_supported.
List project profile
GET /api/v1/project-profile
curl "https://ionwarp.com/api/v1/project-profile" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"Show me the project profiledata_query {
"collection": "project_profile"
}Returns a paginated list of project-profile objects, newest first.
{
"object": "list",
"data": [
{
"object": "project-profile",
"id": "obj_123",
"summary": "Acme helps restaurants take orders online and track them in one dashboard.",
"audience": "audience",
"stage": "stage",
"shape": "single_app",
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
limit | number | page | Rows to return, 1–100. Defaults to 20. |
cursor | string | page | next_cursor from the previous page. |
Retrieve a project-profile
GET /api/v1/project-profile/learning-tests-run-under-bun
curl "https://ionwarp.com/api/v1/project-profile/learning-tests-run-under-bun" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"What is this project and how does it work?data_get {
"collection": "project_profile",
"object_id": "learning-tests-run-under-bun"
}Returns the project-profile object.
{
"object": "project-profile",
"id": "obj_123",
"summary": "Acme helps restaurants take orders online and track them in one dashboard.",
"audience": "audience",
"stage": "stage",
"shape": "single_app",
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
id | string | path | The project-profile's id or slug. |
What comes back (read-only)
Every project-profile carries the envelope below. The fields under it are computed or stamped by the platform — they are returned, never sent.
| Field | Type | Description |
|---|---|---|
object | string | Always project-profile. |
id | string | Stable object id. Also accepted in place of slug on any path. |
slug | string | URL-safe name, unique within the collection. |
created_at | string | ISO-8601 timestamp of the first write. |
updated_at | string | ISO-8601 timestamp of the most recent write. The cursor sorts on this. |
version | number | Object schema version. |
summary | string | Two or three sentences: what the product is and what it does for whom. |
audience | string | Who the product is for, as the repository states it. |
stage | string | The stage or status the repository states. |
shape | string | multi_product (several products in one repository) | one_product_parts | single_app. |
parts | array | The products or deployable parts — each \{name, does, path, domain, source\}. |
views | array | 1-4 'How does it work?' stories — each \{title, steps[], supports[]\}, at most 7 steps. |
folders | array | Main folders (and subfolders of a big one) and what each holds — \{path, text\}; every path exists in the repository. |
start_here | array | Files a new hire opens first — \{path, text\}; every path is a file in the repository. |
ship | array | How a change goes from pull request to users — \{name, text, source\}. |
envs | array | The places the product runs (local, preview, staging, production) — \{name, where, address, source\}. |
services | array | Outside services the product depends on — \{name, does, source\}. |
watch_out | array | Rules and traps the repository itself states — \{text, source\}. |
glossary | array | Words a newcomer will hear — \{term, text\}. |
run | array | How to run it locally — \{cmd, text, source\}; every command appears in the repository. |
sources | array | The files the profile pass read. |
sources_hash | string | Hash of the read files' contents; unchanged sources skip the next pass for 30 days. |
prompt_version | number | The profile prompt's version that wrote this object; an older version is rewritten on the next Study even when the sources are unchanged. |
head_sha | string | The checkout the profile was written from, when known. |
refreshed_at | string | When the profile was last written (ISO 8601). |
last_failure | object | The last profile pass that failed — \{code, message, at\}; cleared by the next pass that succeeds or finds the profile current. Present without a summary when no profile was ever written. |
refresh | object | The last refresh's receipt: status, reason, model, and how many items were dropped and why. |
Errors
Failures use { error: { type, code, message, param } }. The full code table is generated at Error Codes.