Sections

Projects (website)

Used by the website. These routes don't accept an API key.

GET/projects/{project_id}/activity

Every write to the project, newest first: by the member, the assistant or a connected AI tool. Pending

Website sign-in only

assistant actions are included (status=pending), so they can be confirmed from the project page too.

Parameters
NameInTypeDescription
project_id *pathinteger
limitqueryinteger Default: 25
cursorquerystring | null
statusquerystring | null
Response: ProjectActivity
FieldTypeDescription
actions *object[]
next_cursor *string | null
total *integer
curl
curl 'https://api.papervantage.com/projects/1/activity' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

GET/projects/{project_id}/activity/declaration

A draft AI-use declaration (markdown) built from the project's activity log

Website sign-in only
Parameters
NameInTypeDescription
project_id *pathinteger

Response: any

curl
curl 'https://api.papervantage.com/projects/1/activity/declaration' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

GET/projects/{project_id}/environment

Each environment file's state (current / outdated / modified / missing) and whether an upgrade is offered

Website sign-in only
Parameters
NameInTypeDescription
project_id *pathinteger

Response: any

curl
curl 'https://api.papervantage.com/projects/1/environment' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

GET/projects/{project_id}/environment/download

The environment as a zip, to unpack into a local folder (Claude Code, Codex, opencode read it from there)

Website sign-in only

Members with project files get the project's real files (seeded first); anyone else the rendered files.

Parameters
NameInTypeDescription
project_id *pathinteger

Response: any

curl
curl 'https://api.papervantage.com/projects/1/environment/download' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

GET/projects/{project_id}/environment/file

Read Environment File

Website sign-in only
Parameters
NameInTypeDescription
project_id *pathinteger
path *querystring

Response: any

curl
curl 'https://api.papervantage.com/projects/1/environment/file?path=%3Cpath%3E' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

PUT/projects/{project_id}/environment/file

The member edits AGENTS.md (or another environment file) on the project page: written and trusted, so the

Website sign-in only

in-paper assistant reads it. Accepting a "<path>.proposed" change is done the same way.

Parameters
NameInTypeDescription
project_id *pathinteger
Request body (JSON)
FieldTypeDescription
content *string
path *string

Response: any

curl
curl -X PUT 'https://api.papervantage.com/projects/1/environment/file' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"path":"<path>","content":"<content>"}'

POST/projects/{project_id}/environment/upgrade

Replace files the member never changed with the latest version; for changed ones return the 3-way merge,

Website sign-in only

written only for the paths the member confirmed (apply_paths).

Parameters
NameInTypeDescription
project_id *pathinteger
Request body (JSON)
FieldTypeDescription
apply_pathsstring[]

Response: any

curl
curl -X POST 'https://api.papervantage.com/projects/1/environment/upgrade' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apply_paths":["<apply_paths>"]}'

POST/projects/{project_id}/files/upload-url

Create Project File Upload

Website sign-in only
Parameters
NameInTypeDescription
project_id *pathinteger
Request body (JSON)
FieldTypeDescription
path *string
size *integer
Response: FileUploadResponse
FieldTypeDescription
expires_in *integer
fields *object
path *string
url *string
curl
curl -X POST 'https://api.papervantage.com/projects/1/files/upload-url' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"path":"<path>","size":1}'

GET/projects/{project_id}/workspace/manifest

For the assistant's agent loop (as the member): what its workspace sync-in compares against. Fetched only

Website sign-in only

when the model first uses the workspace in a turn, so a project chat that never touches it lists nothing.

Parameters
NameInTypeDescription
project_id *pathinteger
Response: WorkspaceManifestEntry[]
FieldTypeDescription
etag *string
path *string
size *integer
curl
curl 'https://api.papervantage.com/projects/1/workspace/manifest' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

POST/projects/{project_id}/workspace/urls

For the agent loop: presigned GETs for just the files its workspace reported missing (``need``)

Website sign-in only
Parameters
NameInTypeDescription
project_id *pathinteger
Request body (JSON)
FieldTypeDescription
paths *string[]

Response: any

curl
curl -X POST 'https://api.papervantage.com/projects/1/workspace/urls' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"paths":["<paths>"]}'

POST/projects/{project_id}/workspace/warm

Prewarm: sync the project into its workspace session now, so a cold start overlaps with the member

Website sign-in only

typing their question. The seconds it takes are charged to the AI allowance like any workspace call.

Parameters
NameInTypeDescription
project_id *pathinteger
Response: WorkspaceWarmResponse
FieldTypeDescription
fetched *integer
files *integer
status *string
curl
curl -X POST 'https://api.papervantage.com/projects/1/workspace/warm' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

GET/projects/features

Which Phase 28 parts are on here, so the UI only shows what works (they reach prod one at a time)

Website sign-in only

Response: any

curl
curl 'https://api.papervantage.com/projects/features' \
  -H "Authorization: Bearer $COGNITO_ACCESS_TOKEN"

Next: Skills (website)