Documentation
Vibes (Haptics)
Vibes allow your app to send haptic feedback directly to a user's ARKH Ring. This creates a tactile communication channel - perfect for notifications, alerts, confirmations, or any interaction that benefits from physical feedback.
Patterns
ARKH provides two base haptic patterns. You can send a sequence of up to 3 patterns, each with an optional delay before the next.
Pattern
Description
tapQuick, light tap. Subtle and unobtrusive.
pulseLonger, fuller vibration. More noticeable.
List Available Patterns
curl -X GET "https://developer.arkh.com/api/vibes/patterns" \
-H "Authorization: Bearer arkh_your_api_key_here"Response
{
"patterns": ["tap", "pulse"],
"max_sequence_length": 3
}Triggering Vibes
Use the /vibes/trigger endpoint to send a haptic notification to a user's ring. Pass a sequence of up to 3 patterns, each with an optional delay_ms before the next pattern plays. Use @me as the user_app_id to target yourself for testing.
Trigger a Vibe
curl -X POST "https://developer.arkh.com/api/vibes/trigger" \
-H "Authorization: Bearer arkh_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"user_app_id": "@me",
"app_id": "app_01234567",
"sequence": [
{ "type": "tap", "delay_ms": 100 },
{ "type": "tap", "delay_ms": 100 },
{ "type": "pulse" }
],
"message": "Order shipped!",
"show_ring_ui_notif": true
}'Response
{
"success": true,
"event_id": "731c520e-82a7-457a-ae18-7b5a866ba95a",
"delivery": {
"method": "realtime",
"status": "delivered",
"latency_ms": 142,
"app_state": "active"
}
}Permission Denied Response
{
"error": {
"code": "permission_disabled",
"message": "User has disabled vibes for this app."
}
}Good to Know
Rate Limiting: Max 30 vibes per user per minute (sliding window). This protects users' ring battery from excessive vibrations. Each API call counts as one vibe regardless of sequence length. Exceeding this returns a 429 error. All API calls (including vibes) are also subject to the global API key limit of 100 requests per 60 seconds.
Privacy Controls: Vibe permissions are enabled by default. Users can disable vibes by tapping your app in the widget manager—if disabled, trigger requests return a permission_disabled error.
Ring UI Notifications
By default, vibes are haptic-only—the user feels the vibration but sees nothing on screen. Set show_ring_ui_notif: true to display a visual notification alongside the haptic feedback.
When enabled, your app name and message appear on the user's Ring UI:
- Dynamic Island — Expands to show your app name and message when the phone is unlocked
- Lock Screen — Appears as a Live Activity notification
- In-App Toast — Shows as an overlay when the companion app is open
Ring UI Notification Details
Auto-dismiss: Notifications automatically clear after 5 seconds.
Hold to dismiss: Users can hold on the notification to dismiss it early.
Message limit: 80 characters max. API rejects longer messages.
Requires message: show_ring_ui_notif only works when message is also provided.
Ring UI notifications are ideal for confirmations the user should see—"Order shipped!", "Payment received", "Download complete". For background updates that don't need visual confirmation, use haptic-only vibes.
Common Use Cases
- Single
tap— Subtle confirmations, background updates - Double
tap— Action completed, message received - Triple
tap— Important notification, requires attention - Single
pulse— Timer finished, reminder - Double
pulse— Urgent alert, incoming call tap+pulse— Critical alert, emergency
See the /vibes API for full API reference.