Put cellular cameras inside your own software.
Barn Owl cameras run where there is no power and no Wi-Fi. Two HTTP APIs: one for account holders, one for platform partners. Everything on this page is stated as it is, so an engineer can assess fit without a call.
Open the interactive referencePublic API open docs · Affiliate API reference under NDA · RanchBot in production
Barn Owl API
Public API
Open docshttps://app.barnowl.tech/api/public/v1
1.0.0
AuthJWT bearer. POST /login returns access and refresh tokens.
JSON over HTTPS. Envelope {status, data}.
10, across Authentication, Assets, Commands.
Who can callBarn Owl accounts on the Business Plan.
Who can readAnyone. The reference is generated from the server.
Rate limitsNot published. Ask support before polling faster than once a minute per camera.
SpecAffiliate API
Reference under NDAShared at technical review.
Version1.0
AuthPartner id plus request signing. Webhooks signed the same way.
FormatREST, JSON over HTTPS. Media by signed URL. Livestream by HLS.
ScopeAccounts, cameras, settings, groups, images and detections, livestream, webhooks.
Who can callPartners under a pilot letter or agreement.
Who can readThis overview, anyone. Paths and schemas, partners after NDA.
Reference partnerRanchBot, in production.
Path to accessSpec sheet verified against the live OpenAPI document 2026-10-27. Affiliate scope from the v1.0 reference, 2026-09-12.
Which API
| Question | Public API | Affiliate API |
|---|---|---|
| Whose account holds the cameras | Yours, a Barn Owl account | Your customer's, created by you through the API |
| Who the end user sees | Barn Owl app plus your system | Your product only |
| Create accounts | No | Yes |
| Camera settings | No | Yes |
| Events | Poll images | Signed webhooks |
| Livestream | No | HLS |
| Billing | Your Barn Owl plan | Per active camera, to the partner |
| Docs | Public | Overview public, reference under NDA |
Authentication
Log in with the account's own credentials. The response carries an access token and a refresh token.
A wrong email or password returns 422.
POST /login
Content-Type: application/json
{ "email": "ops@yourcompany.com", "password": "..." }
// 200
{ "status": 200, "data": { "accessToken": "eyJ...", "refreshToken": "eyJ..." } }
// then, on every other call
Authorization: Bearer eyJ...
Token field names and lifetimes: see the Tokens schema in the interactive reference.
Responses and errors
Every response is an object with status and data. Lists come back as arrays under data. Commands confirm the command was sent, not that the camera acted on it.
| Code | Meaning |
|---|---|
| 200 | OK. data holds the result. |
| 401 | No token, or an expired one. Log in again. |
| 403 | The token is valid but the account is not on the Business Plan, or does not own the object. |
| 404 | No camera or group with that id on this account. |
| 409 | Conflict, for example a command already pending on the camera. |
| 422 | The request body failed validation. |
Endpoints
| Method | Path | Returns | Notes |
|---|---|---|---|
| POST | /login | Tokens | Email and password in the body |
| POST | /logout | Invalidates the session | |
| GET | /cameras | Camera[] | All cameras the user can see |
| GET | /cameras/{groupId} | Camera[] | Cameras directly in one group |
| GET | /groups | Group[] | All groups for the user |
| GET | /groups/{groupId} | Group[] | Direct child groups only; walk the tree yourself |
| GET | /images/{cameraId}?limit=&offset= | Image[] | Newest first. limit 1 to 1000, default 100. offset default 0. |
| GET | /trigger/{cameraId} | {triggered} | Photo or video per the camera's current setting |
| POST | /create-user | User | Adds a user to the account |
| PATCH | /owner-reset-password | Account owner resets a user's password |
Full parameters and schemas are in the interactive reference.
Objects
Three objects carry most of the API. Example values are from the OpenAPI document.
Identity plus last-reported telemetry. Status is Active or Suspended.
{
"cameraId": "17dbb64d-cfe9-4b3b-84bf-aaf878534af7",
"IMEI": "861641044933017",
"cameraName": "South View of Silo",
"cameraModel": "RangeCam 4G",
"firmware": "4MR2BOw9807",
"cameraStatus": "Active",
"accountId": "987c3263-...",
"parentId": "25c4e79e-...",
"lastCommunicationTimestamp": "2022-06-01T16:54:17.989Z",
"latitude": 39.469438,
"longitude": -104.874386,
"heading": 180,
"csq": 28, // cellular signal 0-31, 99 = none
"temperature": 84, // Fahrenheit
"batteryCharge": 98, // percent
"sdCardUsage": 85 // percent
}
A photo or a video clip. Full-size and thumbnail URLs. AI hits ride on the image.
{
"imageId": "af27afb8-10ab-4e57-8529-dff3a3d34967",
"url": "https://image.barnowl.tech/.../af27afb8.jpg",
"thumbUrl": "https://image.barnowl.tech/.../thumb/af27afb8.jpg"
// timestamp, type and AI hits: see the Image and Hit schemas
}
A node in the account's tree. A group's id is cameraId and its name is cameraName. Plan for it.
{
"cameraId": "17dbb64d-...", // the group id
"cameraName": "South Entrance", // the group name
"accountId": "987c3263-...",
"parentId": "25c4e79e-..."
}
Quickstart
In the Barn Owl app, under plan settings. Without it, calls return 403.
# no call for this step
curl -s -X POST https://app.barnowl.tech/api/public/v1/login \
-H "Content-Type: application/json" \
-d '{"email":"ops@yourcompany.com","password":"..."}'
curl -s https://app.barnowl.tech/api/public/v1/cameras \ -H "Authorization: Bearer $TOKEN"
curl -s "https://app.barnowl.tech/api/public/v1/images/$CAMERA_ID?limit=20&offset=0" \ -H "Authorization: Bearer $TOKEN"
curl -s https://app.barnowl.tech/api/public/v1/trigger/$CAMERA_ID \
-H "Authorization: Bearer $TOKEN"
# {"status":200,"data":{"triggered":true} }
# the command was sent; the camera answers on its next check-in
Request shapes from the OpenAPI document. Examples not yet executed against production; engineering to run once and update this line.
Scope
For platforms that run Barn Owl cameras inside their own product, under their own brand. The partner creates the end-customer accounts; the customer never sees Barn Owl. The capability list is public. Paths, schemas, the signing scheme and payloads are in the reference, shared under NDA.
| Resource | Operations | Public |
|---|---|---|
| Accounts | Create, read, update, delete end-customer accounts, with program defaults applied at creation | Capability only |
| Cameras | Attach by IMEI and SIM, detach, rename, move between groups, trigger, restart, reset, snooze, wake | Capability only |
| Settings | Motion trigger, periodic capture, transmit size, video length and size; per camera or per account | Capability only |
| Groups | Hierarchy per account | Capability only |
| Images and detections | Search by camera or group; filter by type, favorites, time, AI label. Labels today: Animal, Person, Vehicle, with bounding boxes | Capability only |
| Livestream | Start a stream; play in any HLS viewer | Capability only |
| Webhooks | Thin events for accounts, cameras, groups, images, notifications, users, views. Type, timestamp, account, ids. Fetch detail with one call. Signed like requests. | Capability only |
How the Affiliate API is built, and what this page leaves out.
REST, JSON, versioned. Current version 1.0.
Every request signed with the partner's credentials. One verifier covers webhooks too.
Delivered by signed URL. Livestream by HLS.
Activation and account management run inside the partner's app. No Barn Owl screens in the customer's path.
Base URL and paths, request and response schemas, the signing scheme and header names, webhook payloads and event names, rate limits. All in the reference, shared at the technical review.
How access works
| Step | What happens |
|---|---|
| 1. Discovery call | Thirty minutes. What your platform does; what your customers drive out to look at. |
| 2. NDA | Mutual, one page. Signed before any technical material changes hands. |
| 3. Technical review | Your engineer and ours walk the full reference. You decide whether you can build it. |
| 4. Pilot letter | Credentials follow the letter. Ninety days, no fees, a review date on both calendars. |
Change policy
| Change | Version | Notice |
|---|---|---|
| New optional field, new endpoint | Unchanged | 14 days, in the changelog |
| Removed or renamed field, changed semantics | New major version | 90-day deprecation window; old version served until then |
| Security fix | Unchanged | As fast as needed; noted after |
Newest first.
Developers page published. Spec sheet verified against the live OpenAPI document.
Affiliate API v1.0 reference published to partners.
Public API v1.0.0 interactive reference live at app.barnowl.tech/api/docs.
For crawlers and AI assistants
Three things on this page are for them. JSON-LD with two schema.org WebAPI objects, printed by the spec sheet above. The link to the OpenAPI document in the reference. And this summary.
Plain-text summary in the convention AI assistants read. The same text belongs in the site's agents.md.
# Barn Owl Tech API
> Solar-powered cellular cameras for sites without power or Wi-Fi. Two HTTP APIs.
## Public API (open documentation)
- Base URL: https://app.barnowl.tech/api/public/v1
- Version: 1.0.0. OpenAPI 3 reference: https://app.barnowl.tech/api/docs
- Auth: JWT bearer from POST /login (email, password). Access and refresh tokens.
- Format: JSON. Envelope {status, data}. Errors 401, 403, 404, 409, 422.
- Access: calls require a Barn Owl account on the Business Plan. Docs are public.
- Endpoints (10): POST /login, POST /logout, GET /cameras, GET /cameras/{groupId},
GET /groups, GET /groups/{groupId}, GET /images/{cameraId}?limit&offset,
GET /trigger/{cameraId}, POST /create-user, PATCH /owner-reset-password
- Objects: Camera (id, IMEI, model, firmware, status, group, last contact, lat/long,
heading, cellular signal 0-31, temperature F, battery %, SD %), Group (id field is
cameraId, name field is cameraName), Image (url, thumbUrl, AI hits with labels
Animal/Person/Vehicle and bounding boxes), User, Tokens.
- Not supported: account creation, camera settings, webhooks, livestream.
- Rate limits: not published.
## Affiliate API (partner integration, reference under NDA)
- For platforms that run Barn Owl cameras inside their own product under their brand.
Partner creates end-customer accounts; end customer never sees Barn Owl.
- Version 1.0. REST, JSON, signed requests; webhooks signed the same way.
Media by signed URL. Livestream by HLS.
- Scope: accounts, cameras (attach by IMEI, control), settings, groups,
images and detections, livestream, webhooks (thin events).
- Public: this scope. Under NDA: base URL, paths, schemas, signing scheme, payloads, limits.
- Access: discovery call, NDA, technical review, pilot letter (credentials follow).
- Reference partner in production: RanchBot.
- Commercial model: partner buys hardware at cost plus, pays per active camera per year,
bills own customer.
## Change policy (both APIs)
- Non-breaking: no version change, 14 days notice in the changelog.
- Breaking: new major version, 90-day deprecation window.
## Contact
- Partners: https://barnowl.tech/pages/partners
- Company: Barn Owl Tech, Colorado Springs, Colorado, US