Developer docs
REST API
Manage submissions programmatically or from AI agents. Every endpoint is versioned under /api/v1.
Authentication
Create a personal API token from the integrations page. Tokens act on your behalf across every
workspace you belong to. Send the token either as a bearer token or via the x-api-key header:
curl https://easycustomerfeedback.com/api/v1/workspaces \
-H "Authorization: Bearer ecf_..." Tokens are rate-limited to 120 requests per minute. Unauthorized requests return 401; expired or disabled tokens also return 401.
Endpoints
GET /api/v1/workspaces
Returns the workspaces the authenticated user belongs to.
{
"workspaces": [
{ "id": "ws_...", "name": "Acme" }
]
} GET /api/v1/submissions
List submissions in a workspace. Query parameters:
workspaceId— requiredstatus— repeatable; one ofuntriaged,open,in_progress,resolved,closedtype—bug,feature_request,general_feedbackprojectId— filter by projectlimit— 1..200 (default 50)
curl "https://easycustomerfeedback.com/api/v1/submissions?workspaceId=ws_abc&status=untriaged&status=open" \
-H "Authorization: Bearer ecf_..." GET /api/v1/submissions/:id
Returns the full submission including description, assignee, comments, attachments (with signed download URLs), and external-sync state.
PATCH /api/v1/submissions/:id
Update a submission's status. Body:
{ "status": "in_progress" } Returns the updated submission.
POST /api/v1/submissions/:id/comments
Add an internal comment to a submission. Body:
{ "body": "Root-caused — PR up." } Returns 201 Created with the new comment id. Body must be 1–5000 characters.
Error responses
Errors are JSON with a single error field and an appropriate HTTP status code:
{ "error": "Submission not found" } CLI
The ecf CLI wraps these endpoints for interactive and scripted use — particularly
handy for AI agents.
# download the binary for your platform from the releases page, then:
ecf login # stores token + server in ~/.config/ecf/config.json
ecf workspace list
ecf workspace use ws_abc # pick a default
ecf submissions list --status untriaged --json
ecf submissions get sub_123
ecf submissions status sub_123 in_progress
ecf submissions comment sub_123 "Looking into this."
echo "Long comment from stdin" | ecf submissions comment sub_123 All commands accept --json where relevant for agent consumption. Use ecf help to list every command.
Example: agent triage flow
# 1. pull the untriaged queue as JSON
ecf submissions list --status untriaged --json > queue.json
# 2. for each submission, read full context and decide a status
for id in $(jq -r '.[].id' queue.json); do
ecf submissions get "$id" --json \
| your-agent --decide \
| while read -r decision; do
ecf submissions status "$id" "$decision"
ecf submissions comment "$id" "Triaged by agent: $decision"
done
done