API conventions
Protocol
Section titled “Protocol”- All calls must use HTTPS. Plain HTTP will fail.
- The API communicates in
application/json. - All endpoint URLs require a trailing slash.
/cameras/282929/recordingreturns 404; the correct URL is/cameras/282929/recording/.
Rate limiting
Section titled “Rate limiting”All endpoints are rate-limited regardless of authentication method (OAuth2 or Personal Access Token), tracked per user account:
- 20 requests per minute
- 1000 requests per day
When the limit is exceeded the server responds with HTTP 429 and a JSON body with the wait time in the detail field. Contact support to raise your limits.
Pagination
Section titled “Pagination”List endpoints (e.g. cameras/) use limit and offset parameters. Each paginated response contains:
| Field | Description |
|---|---|
count | Total number of items |
next | URL to the next page, or null at the end |
previous | URL to the previous page, or null at the start |
results | Current page of items |
Always set limit explicitly. If omitted, pages contain at most 100 items.
# Fetch cameras 5 at a timecurl -H "Authorization: Bearer TOKEN" \ "https://api.angelcam.com/v1/cameras/?limit=5"
# Fetch the second pagecurl -H "Authorization: Bearer TOKEN" \ "https://api.angelcam.com/v1/cameras/?limit=5&offset=5"When next is null, you’ve reached the end.
Time and date formats
Section titled “Time and date formats”All datetimes use ISO 8601: YYYY-MM-DDTHH:MM:SSZ (e.g. 2016-03-19T13:15:32Z).
- All times are in UTC. All inputs are expected in UTC.
- Always include the time part, even if it’s
00:00:00.
Duration format
Section titled “Duration format”Duration fields (e.g. recording retention) use ISO 8601 duration: P[n]Y[n]M[n]DT[n]H[n]M[n]S.
| Example | Meaning |
|---|---|
PT30S | 30 seconds |
PT2M | 2 minutes |
P30D | 30 days |
P2M | 2 months |
P1Y | 1 year |
P3Y6M4DT12H30M5S | 3 years, 6 months, 4 days, 12 h 30 m 5 s |