ReDesk
NewProposals drafted by ReDesk AI in under four minutesSee what's new
Case studySunfield EPC cut feasibility turnaround from 3.4 days to 6 hoursRead the story
Pricing
Sign inSchedule a demo
Documentation

Build on the ReDesk stack

Guides, references and webhooks for every product. Pick the platform you are integrating with — the whole library follows.

Platform
ReDesk AI › SOP steps

SOP steps

An SOP step is one checkpoint in a project's playbook: who owns it, how long it should take, whether it needs approval and what evidence proves it is done.

The sop_step object

FieldTypeDescription
idstringUnique id, prefixed stp_.
projectstringThe project it belongs to.
namestringe.g. Structural survey.
owner_rolestringThe role that does the work, e.g. surveyor.
statusenumpending, in_progress, submitted, verified or rejected.
requires_approvalbooleanWhether a manager must verify the evidence.
evidencearrayPhotos and documents attached when submitting.
due_attimestampWhen the step is due.
sop_step object
{
  "id": "stp_4Rm2",
  "object": "sop_step",
  "project": "prj_71Ka",
  "name": "Structural survey",
  "owner_role": "surveyor",
  "status": "submitted",
  "requires_approval": true,
  "evidence": [
    {
      "id": "doc_survey_photo_3",
      "kind": "photo"
    }
  ],
  "due_at": "2026-08-05T12:30:00Z"
}

List a project's steps

GET/v1/sop_steps

Steps in SOP order.

ParameterDescription
project
query · stringrequired
The project whose steps to list.
limit
query · integer
Page size, 1–100. Defaults to 20.
starting_after
query · string
Cursor: the id of the last item on the previous page.
Request
curl https://api.redesk.ai/v1/sop_steps \
  -H "Authorization: Bearer sk_test_..."
Response
{
  "object": "list",
  "data": [
    {
      "id": "stp_4Rm2",
      "object": "sop_step",
      "project": "prj_71Ka",
      "name": "Structural survey",
      "owner_role": "surveyor",
      "status": "submitted",
      "requires_approval": true,
      "evidence": [
        {
          "id": "doc_survey_photo_3",
          "kind": "photo"
        }
      ],
      "due_at": "2026-08-05T12:30:00Z"
    }
  ],
  "has_more": false
}

Submit evidence

POST/v1/sop_steps/{id}/submit

Attach evidence and mark the step submitted. Steps without an approval gate go straight to verified.

ParameterDescription
id
path · stringrequired
The step's id.
evidence
body · string[]required
Uploaded document ids.
Request
curl -X POST https://api.redesk.ai/v1/sop_steps/stp_4Rm2/submit \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "evidence": [
      "doc_survey_photo_3"
    ]
  }'
Response
{
  "id": "stp_4Rm2",
  "object": "sop_step",
  "project": "prj_71Ka",
  "name": "Structural survey",
  "owner_role": "surveyor",
  "status": "submitted",
  "requires_approval": true,
  "evidence": [
    {
      "id": "doc_survey_photo_3",
      "kind": "photo"
    }
  ],
  "due_at": "2026-08-05T12:30:00Z"
}

Verify a step

POST/v1/sop_steps/{id}/verify

Approve submitted evidence. Opens the next step and emits sop_step.verified.

ParameterDescription
id
path · stringrequired
The step's id.
note
body · string
Optional note shown on the audit trail.
Request
curl -X POST https://api.redesk.ai/v1/sop_steps/stp_4Rm2/verify \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "note": "Roof load OK for ballasted mounting."
  }'
Response
{
  "id": "stp_4Rm2",
  "object": "sop_step",
  "project": "prj_71Ka",
  "name": "Structural survey",
  "owner_role": "surveyor",
  "status": "verified",
  "requires_approval": true,
  "evidence": [
    {
      "id": "doc_survey_photo_3",
      "kind": "photo"
    }
  ],
  "due_at": "2026-08-05T12:30:00Z"
}