an array of profiles
API reference sections
HTTP API reference
Profiles
Profiles and their accounts, removal and restore, appearance, personal attributes, dictionary, reminders and workspace usage.
48 operations. The contract has no example values, so example bodies are generated from each schema: every field is shown with a placeholder of its type.
GET/v1/profiles
- Authorization
- Bearer token with
read_documents
Responses
[
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"account": "string",
"locale": {},
"created_at": 0,
"kind": "normal"
}
]curl "http://127.0.0.1:$PORT/v1/profiles" \
-H "Authorization: Bearer $KORU_TOKEN"POST/v1/profiles
the profile, with its new id
- Authorization
- Bearer token with
manage_workspaces
Request body (required)
application/json NewProfile
| Field | Type | Description |
|---|---|---|
| namerequired | string | |
| locale | string or null | BCP 47. Absent means undetermined - not English: the absence of an answer is not an answer. It is the person's locale, not the language a client happens to be drawing in: a client with no Korean strings showing English to a Default |
| purpose | string or null | Free text - "work", "school". Deliberately not an enum: it is theirs. Default |
| avatar | string or null | A token, Default |
| icon | string or null | Default |
| color | string or null | Default |
{
"name": "string",
"locale": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string"
}Responses
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"account": "string",
"locale": {},
"created_at": 0,
"kind": "normal"
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"locale": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string"
}'POST/v1/profiles/with-workspace
profile and workspace; ProfileExists on conflicting or retired identity
- Authorization
- Bearer token with
manage_workspaces
Request body (required)
application/json CreateProfileWithWorkspace
| Field | Type | Description |
|---|---|---|
| idrequired | ProfileId | |
| namerequired | string | |
| locale | string or null | Default |
| purpose | string or null | Default |
| avatar | string or null | Default |
| icon | string or null | Default |
| color | string or null | Default |
| workspacerequired | FirstWorkspace |
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"locale": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"workspace": {
"name": "string",
"icon": "string",
"color": "string"
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | CreatedProfile |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"profile": {
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"account": "string",
"locale": {},
"created_at": 0,
"kind": "normal"
},
"workspace": {
"id": "00000000-0000-4000-8000-000000000000",
"owner": {},
"name": "string",
"created_at": 0,
"last_opened_at": 0,
"icon": "string",
"color": "string",
"pinned": false,
"archived": false,
"deleted_at": 0,
"position": 0
}
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/with-workspace" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"locale": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"workspace": {
"name": "string",
"icon": "string",
"color": "string"
}
}'POST/v1/profiles/{owner}/workspaces/ensure-live
active, created, pending, listing_pending, uncertain, or removing
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| ownerrequired | path | string |
Request body (required)
application/json EnsureLiveWorkspace
| Field | Type | Description |
|---|---|---|
| namerequired | string |
{
"name": "string"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | EnsuredWorkspace |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"workspace": {
"id": "00000000-0000-4000-8000-000000000000",
"owner": {},
"name": "string",
"created_at": 0,
"last_opened_at": 0,
"icon": "string",
"color": "string",
"pinned": false,
"archived": false,
"deleted_at": 0,
"position": 0
},
"issues": [
{
"workspace": "00000000-0000-4000-8000-000000000000",
"cause": "string",
"recovery": {
"problem": "string",
"from_checkpoint": 0,
"quarantined": [
"string"
],
"skipped_updates": 0
}
}
],
"state": "active"
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$OWNER/workspaces/ensure-live" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'GET/v1/profiles/{owner}/workspaces/authority
retained rows with read or unreadable authority and listing differences
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| ownerrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | array of WorkspaceAuthority |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
[
{
"workspace": {
"id": "00000000-0000-4000-8000-000000000000",
"owner": {},
"name": "string",
"created_at": 0,
"last_opened_at": 0,
"icon": "string",
"color": "string",
"pinned": false,
"archived": false,
"deleted_at": 0,
"position": 0
},
"authority": {
"archived": false,
"deleted_at": 0,
"pinned": false,
"applied": false,
"state": "read"
},
"listing_differs": false
}
]curl "http://127.0.0.1:$PORT/v1/profiles/$OWNER/workspaces/authority" \
-H "Authorization: Bearer $KORU_TOKEN"PUT/v1/profiles/{id}/account
bound or already_bound; a compare-and-set mismatch never overwrites
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json BindProfileAccount
| Field | Type | Description |
|---|---|---|
| expected_identity_id | string or null | |
| new_identity_idrequired | string |
{
"expected_identity_id": "string",
"new_identity_id": "string"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ProfileAccountBindingOutcome |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
"bound"curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/account" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"expected_identity_id": "string",
"new_identity_id": "string"
}'DELETE/v1/profiles/{id}/account
cleared or already_offline; local Profile content is retained
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json ClearProfileAccount
| Field | Type | Description |
|---|---|---|
| expected_identity_idrequired | string |
{
"expected_identity_id": "string"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ProfileAccountClearOutcome |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
"cleared"curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/account" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"expected_identity_id": "string"
}'PUT/v1/profiles/{id}/local
restored or already_active; workspace tombstones remain unchanged
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | LocalProfileRestoration |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
"restored"curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/local" \
-H "Authorization: Bearer $KORU_TOKEN"DELETE/v1/profiles/{id}/local
removed after exact attempt check; profile and deleted workspace data remain
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json CompleteProfileRemoval
| Field | Type | Description |
|---|---|---|
| attempt | RemovalAttemptId or null | Default |
{
"attempt": "00000000-0000-4000-8000-000000000000"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | LocalProfileRemoval |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
"removed"curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/local" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"attempt": "00000000-0000-4000-8000-000000000000"
}'GET/v1/profiles/{id}/removal
persisted removal mark or null
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | RemovalMark or null |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"attempt": "00000000-0000-4000-8000-000000000000",
"kind": "local",
"started_at": 0,
"last_step_at": 0,
"stopped": false
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/removal" \
-H "Authorization: Bearer $KORU_TOKEN"POST/v1/profiles/{id}/removal
fresh removal mark; a live attempt refuses competition
- Authorization
- Bearer token with
destroy_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json BeginProfileRemoval
| Field | Type | Description |
|---|---|---|
| kindrequired | RemovalKind | Which device-local removal is running. Both kinds end in the local |
{
"kind": "local"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | RemovalMark |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"attempt": "00000000-0000-4000-8000-000000000000",
"kind": "local",
"started_at": 0,
"last_step_at": 0,
"stopped": false
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/removal" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"kind": "local"
}'DELETE/v1/profiles/{id}/removal
null; hosted cleanup and superseded attempts are refused
- Authorization
- Bearer token with
destroy_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json ProfileRemovalAttempt
| Field | Type | Description |
|---|---|---|
| attemptrequired | RemovalAttemptId | RemovalAttemptId - a client-minted v4 UUID, hyphenated and lowercase. Immutable, and never derived from a name or a path. |
{
"attempt": "00000000-0000-4000-8000-000000000000"
}Responses
curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/removal" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"attempt": "00000000-0000-4000-8000-000000000000"
}'POST/v1/profiles/{id}/removal/stop
null; a superseded attempt is refused
- Authorization
- Bearer token with
destroy_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json ProfileRemovalAttempt
| Field | Type | Description |
|---|---|---|
| attemptrequired | RemovalAttemptId | RemovalAttemptId - a client-minted v4 UUID, hyphenated and lowercase. Immutable, and never derived from a name or a path. |
{
"attempt": "00000000-0000-4000-8000-000000000000"
}Responses
curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/removal/stop" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"attempt": "00000000-0000-4000-8000-000000000000"
}'GET/v1/profiles/deleted
one entry per active, unpurged Profile deletion batch with its captured targets, the retained Profile's name, and which targets are past retention or purged
- Authorization
- Bearer token with
manage_workspaces
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | array of DeletedProfileListing |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
[
{
"name": "string",
"profile": "00000000-0000-4000-8000-000000000000",
"deletion": "00000000-0000-4000-8000-000000000000",
"batch_id": "00000000-0000-4000-8000-000000000000",
"at_ms": 0,
"retention_ms": 0,
"targets": [
"00000000-0000-4000-8000-000000000000"
],
"expired_or_purged": [
"00000000-0000-4000-8000-000000000000"
]
}
]curl "http://127.0.0.1:$PORT/v1/profiles/deleted" \
-H "Authorization: Bearer $KORU_TOKEN"GET/v1/profiles/{id}/deletion-preview
the live workspaces placed under the Profile and a placement revision the delete echoes back; a changed list refuses the stale confirmation
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ProfileDeletionPreview |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"targets": [
"00000000-0000-4000-8000-000000000000"
],
"placement_revision": 0
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/deletion-preview" \
-H "Authorization: Bearer $KORU_TOKEN"Delete a Profile as a shared batch: the Profile and every captured workspace move to Trash in one transaction
POST/v1/profiles/{id}/delete
the batch id and each target's deletion id; HTTP 409 idempotency_conflict when the preview is stale. Takes destroy_workspaces, like the workspace delete; the targets' rooms are disconnected first
- Authorization
- Bearer token with
destroy_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json DeleteProfile
| Field | Type | Description |
|---|---|---|
| previewrequired | ProfileDeletionPreview | What a Profile deletion would trash right now, with a revision the caller echoes back so a confirmation taken over a stale list is refused. |
{
"preview": {
"targets": [
"00000000-0000-4000-8000-000000000000"
],
"placement_revision": 0
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ProfileDeletionBatch |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"batch_id": "00000000-0000-4000-8000-000000000000",
"profile_deletion": "00000000-0000-4000-8000-000000000000",
"targets": [
[
{}
]
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/delete" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"preview": {
"targets": [
"00000000-0000-4000-8000-000000000000"
],
"placement_revision": 0
}
}'POST/v1/profiles/{id}/restore
which targets came back, stayed in Trash under an independent deletion, were moved elsewhere already, or were purged. The same scope the delete takes
- Authorization
- Bearer token with
destroy_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json RestoreProfile
| Field | Type | Description |
|---|---|---|
| deletionrequired | DeletionId | DeletionId - a client-minted v4 UUID, hyphenated and lowercase. Immutable, and never derived from a name or a path. |
{
"deletion": "00000000-0000-4000-8000-000000000000"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ProfileRestoreOutcome |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"restored": [
"00000000-0000-4000-8000-000000000000"
],
"left_in_trash": [
"00000000-0000-4000-8000-000000000000"
],
"moved_elsewhere": [
"00000000-0000-4000-8000-000000000000"
],
"purged": [
"00000000-0000-4000-8000-000000000000"
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/restore" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"deletion": "00000000-0000-4000-8000-000000000000"
}'GET/v1/profiles/{id}
a profile
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"account": "string",
"locale": {},
"created_at": 0,
"kind": "normal"
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID" \
-H "Authorization: Bearer $KORU_TOKEN"PATCH/v1/profiles/{id}
the profile, renamed
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json RenameProfile
| Field | Type | Description |
|---|---|---|
| namerequired | string |
{
"name": "string"
}Responses
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"account": "string",
"locale": {},
"created_at": 0,
"kind": "normal"
}curl -X PATCH "http://127.0.0.1:$PORT/v1/profiles/$ID" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'PATCH/v1/profiles/{id}/appearance
the profile with both appearance fields
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json ProfileAppearance
| Field | Type | Description |
|---|---|---|
| icon | string or null | Default |
| color | string or null | Default |
{
"icon": "string",
"color": "string"
}Responses
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "string",
"purpose": "string",
"avatar": "string",
"icon": "string",
"color": "string",
"account": "string",
"locale": {},
"created_at": 0,
"kind": "normal"
}curl -X PATCH "http://127.0.0.1:$PORT/v1/profiles/$ID/appearance" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"icon": "string",
"color": "string"
}'One profile's personal attributes for one entity, named by ?entity=<kind>:<workspace>:<document>:<node>
GET/v1/profiles/{id}/personal-attributes
the entity reference and its attributes for this profile only. An unset attribute is an absent key, never a null. The reference travels as a query parameter because it holds only ids
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| entityrequired | query | string | Canonical <kind>:<workspace>:<document>:<node> entity reference |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | PersonalAttributesResponse |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"entity": "string",
"attributes": {
"key": {
"text": "string",
"type": "text"
}
}
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/personal-attributes?entity=$ENTITY" \
-H "Authorization: Bearer $KORU_TOKEN"PUT/v1/profiles/{id}/personal-attributes
the entity's attributes for this profile after the write. Personal state belongs to the profile in the path and never overwrites another profile's answer to the same question
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json SetPersonalAttribute
| Field | Type | Description |
|---|---|---|
| entityrequired | string | |
| keyrequired | string | |
| value | PersonalAttributeValue or null | Default |
{
"entity": "string",
"key": "string",
"value": {
"text": "string",
"type": "text"
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | PersonalAttributesResponse |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"entity": "string",
"attributes": {
"key": {
"text": "string",
"type": "text"
}
}
}curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/personal-attributes" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entity": "string",
"key": "string",
"value": {
"text": "string",
"type": "text"
}
}'GET/v1/profiles/{id}/reminders
the entity's synchronized reminder rules and action history
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| entityrequired | query | string | Canonical <kind>:<workspace>:<document>:<node> entity reference |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | array of StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
[
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}
]curl "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders?entity=$ENTITY" \
-H "Authorization: Bearer $KORU_TOKEN"POST/v1/profiles/{id}/reminders
the authoritative stored reminder; an identical retry is idempotent
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json RuleRequest
| Field | Type | Description |
|---|---|---|
| rulerequired | ReminderRule |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
}
}'GET/v1/profiles/{id}/reminders/{reminder}
the synchronized rule, deletion fact and scoped actions
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER" \
-H "Authorization: Bearer $KORU_TOKEN"PUT/v1/profiles/{id}/reminders/{reminder}
the authoritative stored reminder; path and body ids must match
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json RuleRequest
| Field | Type | Description |
|---|---|---|
| rulerequired | ReminderRule |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
}
}'DELETE/v1/profiles/{id}/reminders/{reminder}
the reminder with its irreversible deletion fact set
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER" \
-H "Authorization: Bearer $KORU_TOKEN"GET/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}
the synchronized rule, deletion fact and scoped actions
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER" \
-H "Authorization: Bearer $KORU_TOKEN"PUT/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}
the authoritative stored reminder; path and body ids must match
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json RuleRequest
| Field | Type | Description |
|---|---|---|
| rulerequired | ReminderRule |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
}
}'DELETE/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}
the reminder with its irreversible deletion fact set
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER" \
-H "Authorization: Bearer $KORU_TOKEN"POST/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}/pause
the authoritative paused reminder
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json RevisionRequest
| Field | Type | Description |
|---|---|---|
| revisionrequired | RuleRevisionId |
{
"revision": "00000000-0000-4000-8000-000000000000"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER/pause" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"revision": "00000000-0000-4000-8000-000000000000"
}'POST/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}/resume
the authoritative enabled reminder
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json RevisionRequest
| Field | Type | Description |
|---|---|---|
| revisionrequired | RuleRevisionId |
{
"revision": "00000000-0000-4000-8000-000000000000"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER/resume" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"revision": "00000000-0000-4000-8000-000000000000"
}'POST/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}/snooze
the authoritative reminder; the body action must be snoozed_until
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json ActionRequest
| Field | Type | Description |
|---|---|---|
| actionrequired | OccurrenceAction |
{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER/snooze" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}'POST/v1/profiles/{id}/workspaces/{workspace}/reminders/{reminder}/handle
the authoritative reminder; the body action must be handled
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| workspacerequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json ActionRequest
| Field | Type | Description |
|---|---|---|
| actionrequired | OccurrenceAction |
{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/workspaces/$WORKSPACE/reminders/$REMINDER/handle" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}'GET/v1/profiles/{id}/dictionary
every language's words for this profile only. An empty dictionary is an empty map, and it replicates between this person's devices and nobody else's
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | PersonalDictionaryResponse |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"words": {
"key": [
"string"
]
}
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/dictionary" \
-H "Authorization: Bearer $KORU_TOKEN"PUT/v1/profiles/{id}/dictionary
the whole dictionary after the write. A removed word is a deleted key, never a stored false
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json SetDictionaryWord
| Field | Type | Description |
|---|---|---|
| languagerequired | string | |
| wordrequired | string | |
| presentrequired | boolean |
{
"language": "string",
"word": "string",
"present": false
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | PersonalDictionaryResponse |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"words": {
"key": [
"string"
]
}
}curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/dictionary" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"language": "string",
"word": "string",
"present": false
}'DELETE/v1/profiles/{id}/dictionary
the empty dictionary after every word visible to this device is deleted
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | PersonalDictionaryResponse |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
{
"words": {
"key": [
"string"
]
}
}curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/dictionary" \
-H "Authorization: Bearer $KORU_TOKEN"POST/v1/profiles/{id}/reminders/{reminder}/pause
the authoritative paused reminder
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json RevisionRequest
| Field | Type | Description |
|---|---|---|
| revisionrequired | RuleRevisionId |
{
"revision": "00000000-0000-4000-8000-000000000000"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER/pause" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"revision": "00000000-0000-4000-8000-000000000000"
}'POST/v1/profiles/{id}/reminders/{reminder}/resume
the authoritative enabled reminder
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json RevisionRequest
| Field | Type | Description |
|---|---|---|
| revisionrequired | RuleRevisionId |
{
"revision": "00000000-0000-4000-8000-000000000000"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER/resume" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"revision": "00000000-0000-4000-8000-000000000000"
}'POST/v1/profiles/{id}/reminders/{reminder}/snooze
the authoritative reminder; the body action must be snoozed_until
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json ActionRequest
| Field | Type | Description |
|---|---|---|
| actionrequired | OccurrenceAction |
{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER/snooze" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}'POST/v1/profiles/{id}/reminders/{reminder}/handle
the authoritative reminder; the body action must be handled
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| reminderrequired | path | string |
Request body (required)
application/json ActionRequest
| Field | Type | Description |
|---|---|---|
| actionrequired | OccurrenceAction |
{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | StoredReminder |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 409 | idempotency_conflict or profile_unit_required | Failure |
{
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/$REMINDER/handle" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"action": {
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
}'DELETE/v1/profiles/{id}/reminder-history
the number of handled action ids monotonically hidden in the requested scope; active and snoozed actions remain
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | |
| entity | query | string | Optional canonical entity reference; omission clears the profile |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ClearedHistory |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
{
"cleared": 0
}curl -X DELETE "http://127.0.0.1:$PORT/v1/profiles/$ID/reminder-history" \
-H "Authorization: Bearer $KORU_TOKEN"GET/v1/profiles/{id}/reminder-settings
end-of-day time and default tone
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
{
"end_of_day": "string",
"default_tone": "system",
"week_start": "system"
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/reminder-settings" \
-H "Authorization: Bearer $KORU_TOKEN"PATCH/v1/profiles/{id}/reminder-settings
the authoritative settings; absent fields are unchanged and null clears end-of-day
- Authorization
- Bearer token with
edit_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json SettingsPatch
| Field | Type | Description |
|---|---|---|
| end_of_day | LocalTime or null | |
| default_tone | ToneId or null | |
| week_start | WeekStartPreference or null |
{
"end_of_day": "string",
"default_tone": "system",
"week_start": "system"
}Responses
{
"end_of_day": "string",
"default_tone": "system",
"week_start": "system"
}curl -X PATCH "http://127.0.0.1:$PORT/v1/profiles/$ID/reminder-settings" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"end_of_day": "string",
"default_tone": "system",
"week_start": "system"
}'POST/v1/profiles/{id}/reminders/query
canonical joined rows; missed/upcoming require explicit caller now and canonical IANA zone
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json ReminderQuery
| Field | Type | Description |
|---|---|---|
| viewrequired | ReminderView | |
| now_ms | integer (int64) or null | |
| device_zone | string or null |
{
"view": "active",
"now_ms": 0,
"device_zone": "string"
}Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ReminderQueryResponse |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 503 | projection_unavailable, reminder_index_updating or profile_private_unavailable | Failure |
{
"reminders": [
{
"stored": {
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
},
"target": {
"target": "string",
"title": "string",
"source_location": "string",
"state": "active",
"due": {
"date": "string",
"type": "date"
},
"projected": false
},
"occurrence_source": {
"moment": {
"wall": "string",
"type": "floating"
},
"type": "one_time"
},
"reduced": {
"effective": {
"state": "deleted"
},
"handled_history": [
"string"
]
}
}
],
"updating_workspaces": [
"00000000-0000-4000-8000-000000000000"
]
}curl -X POST "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/query" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"view": "active",
"now_ms": 0,
"device_zone": "string"
}'GET/v1/profiles/{id}/reminders/reconciliation
device-neutral canonical rows joined to target existence, title, due, and bin state
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | ReminderSnapshot |
| 400 | invalid_request or invalid_id | Failure |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
| 404 | profile_not_found or reminder_not_found | Failure |
| 503 | projection_unavailable, reminder_index_updating or profile_private_unavailable | Failure |
{
"reminders": [
{
"stored": {
"rule": {
"id": "00000000-0000-4000-8000-000000000000",
"target": "string",
"revision": "00000000-0000-4000-8000-000000000000",
"status": "enabled",
"schedule": {
"wall": "string",
"type": "floating"
},
"tone_override": "system"
},
"deleted": false,
"actions": [
{
"id": "00000000-0000-4000-8000-000000000000",
"occurrence": "string",
"kind": {
"instant_ms": 0,
"type": "snoozed_until"
}
}
]
},
"target": {
"target": "string",
"title": "string",
"source_location": "string",
"state": "active",
"due": {
"date": "string",
"type": "date"
},
"projected": false
},
"occurrence_source": {
"moment": {
"wall": "string",
"type": "floating"
},
"type": "one_time"
},
"reduced": {
"effective": {
"state": "deleted"
},
"handled_history": [
"string"
]
}
}
],
"settings": {
"end_of_day": "string",
"default_tone": "system",
"week_start": "system"
},
"updating_workspaces": [
"00000000-0000-4000-8000-000000000000"
]
}curl "http://127.0.0.1:$PORT/v1/profiles/$ID/reminders/reconciliation" \
-H "Authorization: Bearer $KORU_TOKEN"GET/v1/profiles/{id}/workspace-usage
one usage row per workspace, including deduplicated live file/blob bytes
- Authorization
- Bearer token with
read_documents
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | See above. | array of WorkspaceUsage |
| 401 | no bearer token, or one that is not recognised | Failure |
| 403 | the credential does not hold the required scope | Failure |
[
{
"workspace": "00000000-0000-4000-8000-000000000000",
"entries": 0,
"kinds": {
"key": 0
},
"stored_bytes": 0
}
]curl "http://127.0.0.1:$PORT/v1/profiles/$ID/workspace-usage" \
-H "Authorization: Bearer $KORU_TOKEN"PUT/v1/profiles/{id}/workspace-order
that profile's workspaces in their saved order
- Authorization
- Bearer token with
manage_workspaces
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string |
Request body (required)
application/json WorkspaceOrder
| Field | Type | Description |
|---|---|---|
| workspacesrequired | array of WorkspaceId | The complete ordered set, including archived and softly deleted rows. |
{
"workspaces": [
"00000000-0000-4000-8000-000000000000"
]
}Responses
[
{
"id": "00000000-0000-4000-8000-000000000000",
"owner": {},
"name": "string",
"created_at": 0,
"last_opened_at": 0,
"icon": "string",
"color": "string",
"pinned": false,
"archived": false,
"deleted_at": 0,
"position": 0
}
]curl -X PUT "http://127.0.0.1:$PORT/v1/profiles/$ID/workspace-order" \
-H "Authorization: Bearer $KORU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"workspaces": [
"00000000-0000-4000-8000-000000000000"
]
}'Generated from contract version 1. Last updated .
