Docs

Shape your requests

Pagination, filtering, sorting, and field selection work the same on every MindCloud API list endpoint.

Every list endpoint supports the same query grammar. Learn it once and it applies to workflows, runs, connections, and everything else.

Pagination

Use limit and offset. limit defaults to 100 and caps at 1000. The response meta includes the total count:

curl "https://connect.mindcloud.co/v2/workflows/wf_8f2k1/runs?limit=50&offset=100" \
  -H "Authorization: Bearer $MINDCLOUD_API_KEY"

Every list has a stable default order, so pages stay consistent without passing sort.

Sorting

Pass sort with one or more comma-separated fields. Prefix a field with - for descending:

curl "https://connect.mindcloud.co/v2/workflows/wf_8f2k1/runs?sort=-startedOn" \
  -H "Authorization: Bearer $MINDCLOUD_API_KEY"

Field selection

Pass fields to receive only the columns you need:

curl "https://connect.mindcloud.co/v2/workflows?fields=id,name,isActive" \
  -H "Authorization: Bearer $MINDCLOUD_API_KEY"

Filtering

Any exposed field filters with plain equality or a bracket operator:

# Equality
curl "https://connect.mindcloud.co/v2/workflows/wf_8f2k1/runs?status=failed" \
  -H "Authorization: Bearer $MINDCLOUD_API_KEY"

# Operators
curl "https://connect.mindcloud.co/v2/workflows/wf_8f2k1/runs?startedOn[gte]=2026-07-01&status[in]=failed,interrupted" \
  -H "Authorization: Bearer $MINDCLOUD_API_KEY"
OperatorMeaning
eqEquals (same as no operator)
neNot equal
gt, gteGreater than, greater or equal
lt, lteLess than, less or equal
containsSubstring match
starts, endsPrefix or suffix match
in, ninIn or not in a comma-separated list

Rate limits

Each API key gets 240 read requests (GET) and 60 write requests (POST, PUT, DELETE) per minute, in separate budgets. Every response reports where you stand:

HeaderMeaning
X-RateLimit-LimitRequests allowed per minute for this budget
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the window resets

Past the limit, requests return 429 with code RATE_LIMITED and a Retry-After header with the seconds to wait. Back off until then; the budget refills at the reset time.

Errors

Invalid parameters return 400 with code INVALID_QUERY. Missing resources return 404 with code NOT_FOUND. A key without the access level an endpoint needs returns 403 with code API_KEY_ACCESS_DENIED. A write that conflicts with the resource's state returns 409 with a specific code, like WORKFLOW_NOT_PUBLISHED when you run a workflow that was never published, or CONNECTION_IN_USE when active workflows still use a connection you asked to delete. The envelope is always:

{
  "success": false,
  "error": { "code": "INVALID_QUERY", "message": "Invalid filter \"startedOn[foo]\"" }
}