Approvals & forms

Approvals and forms waiting for you, and answering them.

MethodPathSummary
GET/api/actions/:tokenOpen an action link
POST/api/actions/:tokenAnswer an action link
GET/api/waitsApprovals and forms waiting for me
GET/api/waits/:idGet an approval or form
POST/api/waits/:id/answerAnswer an approval or form

#Open an action link

GET/api/actions/:token
Address
https://<your-org>.brambleit.cloud/flows/api/actions/:token
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Flows.

Path parameters

NameTypeDescription
tokenrequiredstring

Response 200

FieldTypeDescription
actionobject
action.labelstring
action.titlestring
action.expiredboolean
action.flowany
action.clicksarray of any
action.last_clicked_atstring (date-time)
action.last_clicked_byany
Example response
JSON
{
  "action": {
    "label": "Example label",
    "title": "Example title",
    "expired": false,
    "flow": null,
    "clicks": [],
    "last_clicked_at": "2026-11-12T09:30:00.000Z",
    "last_clicked_by": null
  }
}

Errors

StatusMessage
404This link isn't valid

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/flows/api/actions/%E2%80%A6', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Answer an action link

POST/api/actions/:token
Address
https://<your-org>.brambleit.cloud/flows/api/actions/:token
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Flows.

Path parameters

NameTypeDescription
tokenrequiredstring

Response 200

Errors

StatusMessage
404This link isn't valid

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/flows/api/actions/%E2%80%A6', {
  method: 'POST',
  credentials: 'include',
});
const data = await res.json();

#Approvals and forms waiting for me

GET/api/waits
Address
https://<your-org>.brambleit.cloud/flows/api/waits
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Flows.

Response 200

FieldTypeDescription
waitsarray of any
Example response
JSON
{
  "waits": []
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/flows/api/waits', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Get an approval or form

GET/api/waits/:id
Address
https://<your-org>.brambleit.cloud/flows/api/waits/:id
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Flows.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
waitobject
wait.idinteger
wait.kindstring
wait.titlestring
wait.detailsany
wait.specany
wait.needsarray of any
wait.statusstring
wait.expiredboolean
wait.resultany
wait.created_atstring (date-time)
wait.expires_atstring (date-time)
wait.decided_atstring (date-time)
wait.run_idinteger
wait.flowobject, or null
wait.flow.idinteger
wait.flow.namestring
wait.peoplearray of object
wait.people[].emailstring
wait.people[].namestring
wait.people[].decisionany
wait.people[].notestring
wait.people[].decided_atstring (date-time)
meobject, or null
me.decisionany
me.can_answerboolean
Example response
JSON
{
  "wait": {
    "id": 42,
    "kind": "string",
    "title": "Example title",
    "details": null,
    "spec": null,
    "needs": [],
    "status": "active",
    "expired": false,
    "result": null,
    "created_at": "2026-11-12T09:30:00.000Z",
    "expires_at": "2026-11-12T09:30:00.000Z",
    "decided_at": "2026-11-12T09:30:00.000Z",
    "run_id": 7,
    "flow": {
      "id": 42,
      "name": "Example name"
    },
    "people": [
      {
        "email": "alex@example.com",
        "name": "Example name",
        "decision": null,
        "note": "string",
        "decided_at": "2026-11-12T09:30:00.000Z"
      }
    ]
  },
  "me": {
    "decision": null,
    "can_answer": true
  }
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/flows/api/waits/42', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Answer an approval or form

POST/api/waits/:id/answer
Address
https://<your-org>.brambleit.cloud/flows/api/waits/:id/answer
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Flows.

Path parameters

NameTypeDescription
idrequiredinteger

Request body JSON

NameTypeDescription
answersarray of anyThe form's answers (forms).
approvebooleantrue to approve, false to reject (approvals).
notestringA note.

Response 200

Errors

StatusMessage
403You weren't asked

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/flows/api/waits/42/answer', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"answers":[],"approve":false,"note":"string"}),
});
const data = await res.json();