Preferences
Get user preferences
Retrieve the current user's notification preferences.
Preference Structure:
channel_types: Global opt-in/opt-out per channel typenotiflows: Per-notiflow preferences with optional channel overrides
Use this to display a preferences UI where users can control their notification settings.
Authorization
ApiKeyAuth UserKeyAuth x-notiflows-api-key<token>
Your project's public API key. Safe to include in client-side code. Starts with pk_.
In: header
x-notiflows-user-key<token>
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
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.notiflows.com/user/preferences"{
"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"
}
}