Skip to content

API conventions

  • All calls must use HTTPS. Plain HTTP will fail.
  • The API communicates in application/json.
  • All endpoint URLs require a trailing slash. /cameras/282929/recording returns 404; the correct URL is /cameras/282929/recording/.

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.

List endpoints (e.g. cameras/) use limit and offset parameters. Each paginated response contains:

FieldDescription
countTotal number of items
nextURL to the next page, or null at the end
previousURL to the previous page, or null at the start
resultsCurrent page of items

Always set limit explicitly. If omitted, pages contain at most 100 items.

Terminal window
# Fetch cameras 5 at a time
curl -H "Authorization: Bearer TOKEN" \
"https://api.angelcam.com/v1/cameras/?limit=5"
# Fetch the second page
curl -H "Authorization: Bearer TOKEN" \
"https://api.angelcam.com/v1/cameras/?limit=5&offset=5"

When next is null, you’ve reached the end.

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 fields (e.g. recording retention) use ISO 8601 duration: P[n]Y[n]M[n]DT[n]H[n]M[n]S.

ExampleMeaning
PT30S30 seconds
PT2M2 minutes
P30D30 days
P2M2 months
P1Y1 year
P3Y6M4DT12H30M5S3 years, 6 months, 4 days, 12 h 30 m 5 s