Skip to content
IonWarpTry for free
IonWarp Docs

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 profile
data_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

ParameterTypeKindDescription
limitnumberpageRows to return, 1–100. Defaults to 20.
cursorstringpagenext_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

ParameterTypeKindDescription
idstringpathThe 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.

FieldTypeDescription
objectstringAlways project-profile.
idstringStable object id. Also accepted in place of slug on any path.
slugstringURL-safe name, unique within the collection.
created_atstringISO-8601 timestamp of the first write.
updated_atstringISO-8601 timestamp of the most recent write. The cursor sorts on this.
versionnumberObject schema version.
summarystringTwo or three sentences: what the product is and what it does for whom.
audiencestringWho the product is for, as the repository states it.
stagestringThe stage or status the repository states.
shapestringmulti_product (several products in one repository) | one_product_parts | single_app.
partsarrayThe products or deployable parts — each \{name, does, path, domain, source\}.
viewsarray1-4 'How does it work?' stories — each \{title, steps[], supports[]\}, at most 7 steps.
foldersarrayMain folders (and subfolders of a big one) and what each holds — \{path, text\}; every path exists in the repository.
start_herearrayFiles a new hire opens first — \{path, text\}; every path is a file in the repository.
shiparrayHow a change goes from pull request to users — \{name, text, source\}.
envsarrayThe places the product runs (local, preview, staging, production) — \{name, where, address, source\}.
servicesarrayOutside services the product depends on — \{name, does, source\}.
watch_outarrayRules and traps the repository itself states — \{text, source\}.
glossaryarrayWords a newcomer will hear — \{term, text\}.
runarrayHow to run it locally — \{cmd, text, source\}; every command appears in the repository.
sourcesarrayThe files the profile pass read.
sources_hashstringHash of the read files' contents; unchanged sources skip the next pass for 30 days.
prompt_versionnumberThe profile prompt's version that wrote this object; an older version is rewritten on the next Study even when the sources are unchanged.
head_shastringThe checkout the profile was written from, when known.
refreshed_atstringWhen the profile was last written (ISO 8601).
last_failureobjectThe 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.
refreshobjectThe 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.

On this page

IonWarp logoIonWarp

Ready to build? Connect an agent and go — no credit card needed to start.

Get startedSee our plans