API Reference
This section provides a comprehensive reference for all Ring Partner API endpoints, including request/response formats, parameters, and examples.
Base URL
All API requests should be made to:
https://api.amazonvision.com
Authentication
All API requests require authentication using OAuth 2.0 Bearer tokens:
Authorization: Bearer <access_token>
Rate Limiting
- Default rate: 100 requests per second (TPS) per partner
- Scope: Rate limits apply per partner
client_idacross all endpoints
Rate Limit Headers
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum requests allowed per time window |
X-RateLimit-Remaining |
Remaining requests in the current window |
Retry-After |
Seconds to wait before retrying (included with 429 responses) |
When you exceed the rate limit, the API returns HTTP 429 Too Many Requests. Use exponential backoff starting at 1 second and respect the Retry-After header.
Content Types
- JSON APIs:
application/json - Media streaming:
application/sdp - Media downloads: Binary content with appropriate MIME types
Authentication Endpoints
Exchange Authorization Code
POST https://oauth.ring.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
client_id=<partner_client_id>
code=<authorization_code>
client_secret=<partner_client_secret>
Response:
{
"access_token": "xxxxx",
"refresh_token": "yyyyy",
"scope": "<scope>",
"expires_in": 14400,
"token_type": "Bearer"
}
Refresh Access Token
POST https://oauth.ring.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token
refresh_token=<refresh_token>
client_id=<partner_client_id>
client_secret=<partner_client_secret>
Response:
{
"access_token": "xxxxx",
"refresh_token": "yyyyy",
"scope": "<scope>",
"expires_in": 14400,
"token_type": "Bearer"
}
Endpoint Reference
All device and media endpoints require Authorization: Bearer <access_token>. Responses follow JSON:API format.
Device Endpoints
| Method | Endpoint | Description | Full Docs |
|---|---|---|---|
| GET | /v1/devices |
List all accessible devices. Use ?include=status,capabilities,location,configurations for related data. |
Device Discovery |
| GET | /v1/devices/{device_id} |
Get a specific device | Device Discovery |
| GET | /v1/devices/{device_id}/status |
Device online/offline status | Status |
| GET | /v1/devices/{device_id}/capabilities |
Video codecs, motion detection, image enhancements | Capabilities |
| GET | /v1/devices/{device_id}/location |
Coarse location (country, state) for compliance | Locations |
| GET | /v1/devices/{device_id}/configurations |
Motion zones, privacy zones, image settings | Configurations |
Media Endpoints
| Method | Endpoint | Description | Full Docs |
|---|---|---|---|
| POST | /v1/devices/{device_id}/media/streaming/whep/sessions |
Start WebRTC WHEP live video session (Content-Type: application/sdp) |
Live Video |
| DELETE | /v1/devices/{device_id}/media/streaming/whep/sessions/{session_id} |
Close live video session | Live Video |
| POST | /v1/devices/{device_id}/media/video/download |
Download historical video as MP4 | Media Clips |
Account & Integration Endpoints
| Method | Endpoint | Description | Full Docs |
|---|---|---|---|
| GET | /v1/users/me |
Get authenticated user's Account ID | Users API |
| POST | /v1/accounts/me/app-integrations |
Confirm account link | App Integrations |
| PATCH | /v1/accounts/me/app-integrations |
Update integration status | App Integrations |
Webhook Events
Partners receive webhook notifications at their configured endpoint. All webhooks include an HMAC-SHA256 signature in the X-Signature header. See Notifications for full details.
Event Types
| Event | Type Value | Description |
|---|---|---|
| Motion Detected | motion_detected |
Motion detected by a device camera |
| Button Press | button_press |
Ring doorbell button pressed |
| Device Added | device_added |
A device became accessible to the partner |
| Device Removed | device_removed |
A device is no longer accessible |
| Device Online | device_online |
A device came online |
| Device Offline | device_offline |
A device went offline |
Error Responses
All errors follow JSON:API format. See Error Handling for comprehensive details.
Common Error Codes
- 400: Bad Request — Invalid parameters
- 401: Unauthorized — Invalid or expired token
- 403: Forbidden — Insufficient permissions
- 404: Not Found — Resource not found
- 429: Too Many Requests — Rate limit exceeded
- 500: Internal Server Error
- 503: Service Unavailable — Device offline
Testing Your Integration
Recommended Tools
There is no official Ring Partner SDK. Use standard HTTP libraries and tools:
| Tool | Use Case |
|---|---|
| curl | Quick command-line testing |
| Postman | GUI-based API exploration |
| Bruno | Open-source, Git-friendly alternative to Postman |
| Standard HTTP libraries | fetch (JS), requests (Python), axios (JS/TS) |
Testing with curl
curl -X GET 'https://api.amazonvision.com/v1/devices?include=status,capabilities' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-v
SDKs and Libraries
There is no official Ring Partner SDK. Use standard HTTP libraries:
JavaScript/TypeScript
const response = await fetch('https://api.amazonvision.com/v1/devices', {
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
});
const devices = await response.json();
Python
import requests
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
response = requests.get('https://api.amazonvision.com/v1/devices', headers=headers)
devices = response.json()

