Update user preferences
Update the current user's notification preferences. Only provided fields are updated (partial update).
Channel Types:
Set to false to opt out of a channel globally:
{
"channel_types": {
"email": false,
"sms": false
}
}Notiflow Preferences:
Override settings for specific notiflows:
{
"notiflows": {
"notiflow_uuid": {
"enabled": false
}
}
}Or disable specific channels for a notiflow:
{
"notiflows": {
"notiflow_uuid": {
"enabled": true,
"channel_types": {
"email": false
}
}
}
}Authorization
ApiKeyAuth UserKeyAuth Your project's public API key. Safe to include in client-side code. Starts with pk_.
In: header
JWT token identifying the current user. Must be signed with your Application Signing Key (RS256).
Required claims:
sub: User's external_id (required)exp: Expiration timestamp (recommended)iat: Issued at timestamp (recommended)
Development Mode: Use x-notiflows-user-id header with the user's external_id instead (insecure, testing only).
In: header
Request Body
application/json
Preference updates
Global channel type preferences to update
Per-notiflow preferences to update (keyed by notiflow ID)
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://api.notiflows.com/user/preferences" \ -H "Content-Type: application/json" \ -d '{ "channel_types": { "sms": false }, "notiflows": { "01HQXYZ123456789ABCDEFGHIJ": { "enabled": false } } }'{
"channel_types": {
"chat": true,
"email": true,
"in_app": true,
"mobile_push": true,
"sms": false,
"web_push": true
},
"notiflows": {
"01HQXYZ123456789ABCDEFGHIJ": {
"channel_types": {
"email": true,
"sms": false
},
"enabled": true,
"name": "Order Updates"
}
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}