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:

  • workspaceIdrequired
  • status — repeatable; one of untriaged, open, in_progress, resolved, closed
  • typebug, feature_request, general_feedback
  • projectId — filter by project
  • limit — 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

Need a token?

Create one from the integrations page.

Manage API tokens