DEVELOPERS

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 reference

Public API open docs  Â·  Affiliate API reference under NDA  Â·  RanchBot in production

Spec sheet

Barn Owl API

Public API

Open docs
Base URL

https://app.barnowl.tech/api/public/v1

Version

1.0.0

Auth

JWT bearer. POST /login returns access and refresh tokens.

Format

JSON over HTTPS. Envelope {status, data}.

Endpoints

10, across Authentication, Assets, Commands.

Who can call

Barn Owl accounts on the Business Plan.

Who can read

Anyone. The reference is generated from the server.

Rate limits

Not published. Ask support before polling faster than once a minute per camera.

Spec

OpenAPI 3, Swagger UI

Affiliate API

Reference under NDA
Base URL

Shared at technical review.

Version

1.0

Auth

Partner id plus request signing. Webhooks signed the same way.

Format

REST, JSON over HTTPS. Media by signed URL. Livestream by HLS.

Scope

Accounts, cameras, settings, groups, images and detections, livestream, webhooks.

Who can call

Partners under a pilot letter or agreement.

Who can read

This overview, anyone. Paths and schemas, partners after NDA.

Reference partner

RanchBot, in production.

Path to access

Call, NDA, technical review, pilot letter.

Spec sheet verified against the live OpenAPI document 2026-10-27. Affiliate scope from the v1.0 reference, 2026-09-12.

Start here

Which API

QuestionPublic APIAffiliate API
Whose account holds the camerasYours, a Barn Owl accountYour customer's, created by you through the API
Who the end user seesBarn Owl app plus your systemYour product only
Create accountsNoYes
Camera settingsNoYes
EventsPoll imagesSigned webhooks
LivestreamNoHLS
BillingYour Barn Owl planPer active camera, to the partner
DocsPublicOverview public, reference under NDA
Public API

Authentication

Log in with the account's own credentials. The response carries an access token and a refresh token.

Log in, then send the token on every call

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.

CodeMeaning
200OK. data holds the result.
401No token, or an expired one. Log in again.
403The token is valid but the account is not on the Business Plan, or does not own the object.
404No camera or group with that id on this account.
409Conflict, for example a command already pending on the camera.
422The request body failed validation.
MethodPathReturnsNotes
POST/loginTokensEmail and password in the body
POST/logoutInvalidates the session
GET/camerasCamera[]All cameras the user can see
GET/cameras/{groupId}Camera[]Cameras directly in one group
GET/groupsGroup[]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-userUserAdds a user to the account
PATCH/owner-reset-passwordAccount 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.

Camera

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
}
Image

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
}
Group

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

1. Enroll the account in the Business Plan

In the Barn Owl app, under plan settings. Without it, calls return 403.

# no call for this step
2. Get a token
curl -s -X POST https://app.barnowl.tech/api/public/v1/login \
  -H "Content-Type: application/json" \
  -d '{"email":"ops@yourcompany.com","password":"..."}'
3. List cameras
curl -s https://app.barnowl.tech/api/public/v1/cameras \
  -H "Authorization: Bearer $TOKEN"
4. Pull the 20 newest images for one camera
curl -s "https://app.barnowl.tech/api/public/v1/images/$CAMERA_ID?limit=20&offset=0" \
  -H "Authorization: Bearer $TOKEN"
5. Trigger a capture, then poll images for the result
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.

Affiliate API

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.

ResourceOperationsPublic
AccountsCreate, read, update, delete end-customer accounts, with program defaults applied at creationCapability only
CamerasAttach by IMEI and SIM, detach, rename, move between groups, trigger, restart, reset, snooze, wakeCapability only
SettingsMotion trigger, periodic capture, transmit size, video length and size; per camera or per accountCapability only
GroupsHierarchy per accountCapability only
Images and detectionsSearch by camera or group; filter by type, favorites, time, AI label. Labels today: Animal, Person, Vehicle, with bounding boxesCapability only
LivestreamStart a stream; play in any HLS viewerCapability only
WebhooksThin events for accounts, cameras, groups, images, notifications, users, views. Type, timestamp, account, ids. Fetch detail with one call. Signed like requests.Capability only
Design facts

How the Affiliate API is built, and what this page leaves out.

Protocol

REST, JSON, versioned. Current version 1.0.

Signing

Every request signed with the partner's credentials. One verifier covers webhooks too.

Media

Delivered by signed URL. Livestream by HLS.

Onboarding

Activation and account management run inside the partner's app. No Barn Owl screens in the customer's path.

Not published

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.

Affiliate API

How access works

Book the discovery call
StepWhat happens
1. Discovery callThirty minutes. What your platform does; what your customers drive out to look at.
2. NDAMutual, one page. Signed before any technical material changes hands.
3. Technical reviewYour engineer and ours walk the full reference. You decide whether you can build it.
4. Pilot letterCredentials follow the letter. Ninety days, no fees, a review date on both calendars.
Both APIs

Change policy

ChangeVersionNotice
New optional field, new endpointUnchanged14 days, in the changelog
Removed or renamed field, changed semanticsNew major version90-day deprecation window; old version served until then
Security fixUnchangedAs fast as needed; noted after
Changelog

Newest first.

2026-10-28

Developers page published. Spec sheet verified against the live OpenAPI document.

2026-09-12

Affiliate API v1.0 reference published to partners.

2026-09-12

Public API v1.0.0 interactive reference live at app.barnowl.tech/api/docs.

Machine-readable

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.

llms.txt

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