API Referenceapipatient-graphPOST /v1/patients/me/onboarding

POST /v1/patients/me/onboarding

Service: patient-graph · operationId: (none)

Idempotently completes the new-member onboarding wizard for the authenticated user. The first call stamps onboarding_completed_at; subsequent calls overwrite the JSON blob but keep the original completion time.

Required scopes

(no scope declared — review service config)

Request body

{
  "type": "object",
  "properties": {
    "goals": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "maxItems": 32
    },
    "role": {
      "type": "string",
      "enum": [
        "patient",
        "coach",
        "researcher"
      ],
      "default": "patient"
    },
    "default_follows": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "maxItems": 64,
      "default": []
    },
    "notifications": {
      "type": "object",
      "properties": {
        "pushOptIn": {
          "type": "boolean"
        },
        "emailFrequency": {
          "type": "string",
          "enum": [
            "daily",
            "weekly",
            "off"
          ]
        }
      }
    }
  },
  "required": [
    "goals"
  ]
}

Responses

200 Onboarding stored

{
  "type": "object",
  "properties": {
    "patient_id": {
      "type": "string"
    },
    "goals": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "role": {
      "type": "string",
      "enum": [
        "patient",
        "coach",
        "researcher"
      ]
    },
    "default_follows": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "notifications": {
      "type": "object",
      "properties": {
        "pushOptIn": {
          "type": "boolean"
        },
        "emailFrequency": {
          "type": "string",
          "enum": [
            "daily",
            "weekly",
            "off"
          ]
        }
      }
    },
    "onboarding_completed_at": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "patient_id",
    "goals",
    "role",
    "default_follows",
    "notifications",
    "onboarding_completed_at"
  ]
}

404 Patient not found for current user

{
  "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://patient-graph.platform.loop.health/v1/patients/me/onboarding \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ ... }'