Responses

Responses, their uploaded files, summaries, CSV export, and links from a response to a record in another app.

MethodPathSummary
GET/v1/app/forms/forms/:id/submissionsPaginated list
GET/v1/app/forms/forms/:id/submissions/exportCSV export (register before the :subId route below so "export" isn't parsed as a submission id)
GET/v1/app/forms/forms/:id/submissions/:subIdFull detail
DELETE/v1/app/forms/forms/:id/submissionsBulk delete, body: { ids: [1,2,3] }
DELETE/v1/app/forms/forms/:id/submissions/:subIdSingle delete
GET/v1/app/forms/forms/:id/uploads/:uploadIdAuth-gated file-answer download
GET/v1/app/forms/forms/:id/submissions/:subId/linksA response's links to other records
POST/v1/app/forms/forms/:id/submissions/:subId/linksLink a response to a record in another app
DELETE/v1/app/forms/forms/:id/submissions/:subId/links/:linkIdRemove a link
POST/v1/app/forms/forms/linksSame as the nested create above, but keyed by submission_id alone (no form_id needed in the URL)
GET/v1/app/forms/forms/links/for-targetThe reverse lookup, called from BRM-Project/BRM-ToDo to show what submissions link to a given work package/task

#Paginated list

GET/v1/app/forms/forms/:id/submissions
Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/submissions
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger

Query parameters

NameTypeDescription
pageinteger
pageSizeinteger

Response 200

FieldTypeDescription
submissionsarray of object
submissions[].idinteger
submissions[].tenant_idinteger
submissions[].form_idinteger
submissions[].respondent_user_idinteger, or null
submissions[].is_anonymousboolean
submissions[].respondent_emailstring, or null
submissions[].submitted_atstring (date-time)
submissions[].ip_addressstring, or null
submissions[].user_agentstring, or null
totalinteger
pageinteger
pageSizeany
Example response
JSON
{
  "submissions": [
    {
      "id": 42,
      "tenant_id": 1,
      "form_id": 7,
      "respondent_user_id": 7,
      "is_anonymous": true,
      "respondent_email": "alex@example.com",
      "submitted_at": "2026-11-12T09:30:00.000Z",
      "ip_address": "192.0.2.10",
      "user_agent": "string"
    }
  ],
  "total": 3,
  "page": 1,
  "pageSize": null
}

Errors

StatusMessage
404Form not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/submissions' \
  -H "X-API-Key: $BRAMBLE_KEY"

#CSV export (register before the :subId route below so "export" isn't parsed as a submission id)

GET/v1/app/forms/forms/:id/submissions/export
Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/submissions/export
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger

Response

A body.

Errors

StatusMessage
404Form not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/submissions/export' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Full detail

GET/v1/app/forms/forms/:id/submissions/:subId
Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/submissions/:subId
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger
subIdrequiredinteger

Response 200

FieldTypeDescription
submissionany
answersarray of any
uploadsarray of any
Example response
JSON
{
  "submission": null,
  "answers": [],
  "uploads": []
}

Errors

StatusMessage
404Form not found
404Submission not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/submissions/1' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Bulk delete, body: { ids: [1,2,3] }

DELETE/v1/app/forms/forms/:id/submissions

Bulk delete, body: { ids: [1,2,3] }. Registered before the single-:subId route below isn't necessary (different HTTP method/no path collision), but kept next to it for readability. Cascades to form_submission_answers/form_uploads/form_submission_links.

Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/submissions
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger

Request body JSON

NameTypeDescription
idsarray of any

Response 200

FieldTypeDescription
okboolean
deletedinteger
Example response
JSON
{
  "ok": true,
  "deleted": 1
}

Errors

StatusMessage
400ids (array of submission ids) is required
404Form not found

Example request

Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/submissions' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Single delete

DELETE/v1/app/forms/forms/:id/submissions/:subId
Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/submissions/:subId
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger
subIdrequiredinteger

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404Form not found
404Submission not found

Example request

Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/submissions/1' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Auth-gated file-answer download

GET/v1/app/forms/forms/:id/uploads/:uploadId
Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/uploads/:uploadId
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger
uploadIdrequiredinteger

Errors

StatusMessage
404Not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/uploads/1' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Link a response to a record in another app

POST/v1/app/forms/forms/:id/submissions/:subId/links
Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/:id/submissions/:subId/links
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Path parameters

NameTypeDescription
idrequiredinteger
subIdrequiredinteger

Request body JSON

NameTypeDescription
target_appstring: "project" | "todo"The app (e.g. psa).
target_idrequirednumberThe record's id there.
notestringA note.

Response 201

FieldTypeDescription
linkany
Example response
JSON
{
  "link": null
}

Errors

StatusMessage
400target_app must be 'project' or 'todo'
400target_id is required
404Form not found
404Submission not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/42/submissions/1/links' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target_app":"project","target_id":12.5,"note":"string"}'

#Same as the nested create above, but keyed by submission_id alone (no form_id needed in the URL)

POST/v1/app/forms/forms/links

Same as the nested create above, but keyed by submission_id alone (no form_id needed in the URL). BRM-Project/BRM-ToDo know their own target_id but not which form a submission came from, so they can't hit the nested route above — this is the one they call to create a link from their side.

Address
https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/links
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: Forms.

Request body JSON

NameTypeDescription
submission_idrequirednumber
target_appstring: "project" | "todo"
target_idrequirednumber
notestring

Response 201

FieldTypeDescription
linkany
Example response
JSON
{
  "link": null
}

Errors

StatusMessage
400target_app must be 'project' or 'todo'
400target_id is required
400submission_id is required
404Submission not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/forms/forms/links' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"submission_id":12.5,"target_app":"project","target_id":12.5,"note":"string"}'