Projects are rich portfolio showcases that creators publish on ECHO. Unlike services, which describe an offering, projects display completed work using a flexible block-based content system. Each project is composed of aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/HelenaLM32/ECHO/llms.txt
Use this file to discover all available pages before exploring further.
blocks array — a JSON structure where each element represents a content block such as an image, text section, or embed. Projects also track engagement through likes, views, and comments counters. Only projects marked as published are publicly visible; drafts remain hidden until the creator explicitly publishes them.
Projects share the same
id as their linked item — the id in item_projects is a foreign key to items.id. Create the item first before creating its project record.Get all projects
GET /item-projects
Returns all project records. This endpoint is public and does not require authentication.
Project ID. Shares the same value as the linked item’s ID.
JSON array of content blocks. Each block object defines a
type (e.g., image, text) and its associated properties. Stored as a LONGTEXT column.Background color or image value for the project page.
Vertical spacing (in pixels) between content blocks.
Total number of likes the project has received.
Total number of times the project page has been viewed.
Total number of comments on the project.
Whether the project is publicly visible. Only projects with
published: true appear in public listings.URL-friendly unique identifier for the project. Used to link directly to a project page (e.g.,
/projects/coffee-shop-brand-identity). Must be unique across all projects.ISO 8601 datetime when the project was created.
ISO 8601 datetime when the project was last updated.
Get project by ID
GET /item-projects/{id}
Returns a single project by its ID. Public endpoint.
The numeric ID of the project to retrieve.
You can also retrieve a project by its slug on the frontend. The
slug field is useful for constructing human-readable URLs such as /projects/coffee-shop-brand-identity.Create a project
POST /item-projects/register
Creates a new project record. Requires authentication.
The item ID this project belongs to. Must reference an existing item.
JSON-encoded array of content blocks. Each block should include a
type field and any type-specific properties. Defaults to an empty array if omitted.Background color (hex or CSS value) or image URL for the project page.
Pixel spacing between content blocks.
Set to
true to make the project publicly visible immediately. Defaults to false (draft).Unique URL-friendly identifier for the project. Use lowercase letters, numbers, and hyphens only (e.g.,
coffee-shop-brand-identity).Update a project
PUT /item-projects/{id}
Updates an existing project. Requires authentication. Use this endpoint to edit content blocks, change the background, or publish/unpublish the project.
The numeric ID of the project to update.
Updated JSON array of content blocks.
Updated background value.
Updated block spacing in pixels.
Set to
true to publish the project, or false to revert it to draft status.Updated slug. Must remain unique across all projects.
Setting
published to true makes the project visible to anyone browsing the ECHO marketplace. Draft projects (published: false) are only accessible by the creator.Get projects by creator
GET /item-projects/by-creator/{creatorId}
Returns all projects belonging to a specific creator. Public endpoint.
The numeric ID of the creator whose projects to retrieve.
Increment view count
POST /item-projects/{id}/views
Increments the project’s view counter by one and returns the updated project. No authentication required.
The numeric ID of the project.
Toggle like
POST /item-projects/{id}/likes
Toggles the authenticated user’s like on a project. If the user has not liked the project, it adds a like. If they have already liked it, it removes the like. Requires authentication.
The numeric ID of the project to like or unlike.
Check like status
GET /item-projects/{id}/likes/status
Returns whether the authenticated user has liked a project. Returns {"liked": false} for unauthenticated requests.
The numeric ID of the project.
{"liked": true}
Get comments
GET /item-projects/{id}/comments
Returns all comments on a project. Public endpoint.
The numeric ID of the project.
Add a comment
POST /item-projects/{id}/comments
Adds a comment to a project. Requires authentication.
The numeric ID of the project.
The comment text to add.
Delete a comment
DELETE /item-projects/{projectId}/comments/{commentId}
Removes a comment from a project. Requires authentication. Only the comment author can delete their own comment.
The numeric ID of the project.
The numeric ID of the comment to delete.
Delete a project
DELETE /item-projects/{id}
Permanently removes a project record. Requires authentication.
The numeric ID of the project to delete.