https://api.projectecho.io/v1
Create keys under API & MCP in the Workspace nav.
Authentication
Send both headers on every request:Members vs users
These are different people resources:- Members (
/v1/members) — portal end-users of your product. Email can be exposed for identify/embed flows. - Users (
/v1/users) — workspace teammates in the staff app. Email is not returned.
created_by_member_id → members, or created_by_user_id → users.
Common resources
With the right permissions you can work with:- Requests (list, get, create, update, delete)
- Implementation prompts (get / generate via Anthropic Claude Sonnet — may embed internal notes)
- Comments (public) and internal notes (staff-only)
- Votes
- Members and users
- Boards, statuses, and tags
- Changelog drafts (list, create, update, link requests, upload images) — publish stays in the web app
member_id or external_user_id in the JSON body. Internal notes require an author_user_id (teammate UUID).
Implementation prompts
Generate an agent-ready Markdown brief from a request’s title, description, comments, and internal notes using Anthropic Claude Sonnet (default model idclaude-sonnet-4-5):
GET /v1/requests/:id also returns implementation_prompt / implementation_prompt_generated_at / implementation_prompt_generated_by when present. MCP tools: get_implementation_prompt, generate_implementation_prompt.
Full how-to: Generate implementation prompts with the API and MCP. Staff app: How to generate an implementation prompt.
Request score on API responses
GET /v1/requests and GET /v1/requests/:id include a computed score field on each request:
- Integer score when scoring is enabled for the workspace (same formula as the staff app)
nullwhen scoring is disabled
score through the API.
Request payloads also include priority and effort when those fields are set.
Tags on API and MCP
GET /v1/tags?kind=request|memberlists tags (tags:read)POST /v1/requests/:id/tagsandDELETE /v1/requests/:id/tags/:tagIdassign or remove request tags (requests:update)POST /v1/members/:id/tagsandDELETE /v1/members/:id/tags/:tagIdassign or remove member tags (members:update)- Request and member responses include a
tagsarray (id,name,color,kind)
list_tags, add_request_tag, and add_member_tag call the same endpoints. Manage tag definitions in the staff app under Settings; the API assigns existing tags.
Filters
GET /v1/requests supports filters such as board_id, status_id, created_by_user_id, changelog_entry_id, unlinked=true, plus limit and offset.
GET /v1/tags requires kind=request or kind=member.
GET /v1/changelogs supports status=draft|published, limit, and offset.
Agent changelog body format: Changelog TipTap body format for agents. Weekly workflow: Draft changelogs with an agent. Installable skill: Install the Project Echo agent skill.
Tips
- Start with a read-only key while exploring.
- Public comments endpoints exclude internal notes — use the internal-notes paths for staff-only content.
- Prefer MCP when you want AI tools (Claude, Cursor) to call the same capabilities through tools instead of raw HTTP.

