API ReferenceapiclinicalPOST /v1/check-ins

POST /v1/check-ins

Service: clinical · operationId: (none)

Submit a completed 30/60/90 day check-in for the authenticated patient

Required scopes

(no scope declared — review service config)

Request body

{
  "type": "object",
  "properties": {
    "day_marker": {
      "anyOf": [
        {
          "type": "number",
          "enum": [
            30
          ]
        },
        {
          "type": "number",
          "enum": [
            60
          ]
        },
        {
          "type": "number",
          "enum": [
            90
          ]
        }
      ]
    },
    "enrolled_at": {
      "type": "string",
      "format": "date-time"
    },
    "goals": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "minItems": 1
    },
    "wins": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "minItems": 1
    },
    "blockers": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "minItems": 1
    },
    "protocol_changes": {
      "type": "string",
      "minLength": 1
    },
    "mood": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "weight_kg": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "sleep_quality": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    }
  },
  "required": [
    "day_marker",
    "enrolled_at",
    "goals",
    "wins",
    "blockers",
    "mood",
    "sleep_quality"
  ]
}

Responses

201 Check-in submitted

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "patient_id": {
      "type": "string"
    },
    "day_marker": {
      "anyOf": [
        {
          "type": "number",
          "enum": [
            30
          ]
        },
        {
          "type": "number",
          "enum": [
            60
          ]
        },
        {
          "type": "number",
          "enum": [
            90
          ]
        }
      ]
    },
    "goals": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "wins": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "blockers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "protocol_changes": {
      "type": [
        "string",
        "null"
      ]
    },
    "mood": {
      "type": "integer"
    },
    "weight_kg": {
      "type": [
        "number",
        "null"
      ]
    },
    "sleep_quality": {
      "type": "integer"
    },
    "completed_at": {
      "type": "string",
      "format": "date-time"
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    }
  },
  "required": [
    "id",
    "patient_id",
    "day_marker",
    "goals",
    "wins",
    "blockers",
    "protocol_changes",
    "mood",
    "weight_kg",
    "sleep_quality",
    "completed_at",
    "created_at"
  ]
}

412 Check-in is not currently due

{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "error",
    "message"
  ]
}

500 Internal error

{
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "error",
    "message"
  ]
}

Example

curl -X POST https://clinical.platform.loop.health/v1/check-ins \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ ... }'