FalconryScale
Developers

REST API

Base URL, authentication, and the full list of endpoints.

The REST API reads and writes the same data the FalconryScale app shows you, over plain HTTP. It's meant for scripts and server-to-server calls, not for a browser fetch() from a third-party page, no CORS headers are served.

Base URL

https://app.falconryscale.com/api/v1

Authentication

Every request needs a bearer credential carrying falconry:read and, for a write endpoint, falconry:write scope too:

Authorization: Bearer <api key or OAuth access token>

Session cookies aren't accepted here. See API keys for the simplest way to get a credential, or OAuth for how an AI assistant connects without one.

Endpoints

Every id (raptorId, a weight's id, and so on) is an opaque string, copy it from a previous response rather than constructing one yourself.

Reads use GET (inputs in the query string). Writes use POST to create or act, PATCH to change part of a record, and DELETE to remove one, all with a JSON body. A PATCH only changes the fields you send: leave a field out to keep it, send null to clear it. Every operation also exists as an MCP tool with the same name.

Profile, today and preferences

OperationRequestAccess
Get your profileGET /profileRead
Get today's roster checklistGET /todayRead
Get notification preferencesGET /notification-preferencesRead
Update your profilePATCH /profileWrite
Update notification preferencesPATCH /notification-preferencesWrite

get_today_summary is one call for "how many raptors, which are already weighed today, which still need weighing, and my unread alert count", instead of three separate calls. update_profile covers your name, bio, location, display preferences and falconry experience; your email, plan and photos can't be changed through the API.

Raptors

OperationRequestAccess
List your raptorsGET /raptorsRead
Get one raptorGET /raptors/{raptorId}Read
Search speciesGET /speciesRead
List a raptor's past moultsGET /raptors/{raptorId}/moult-historyRead
Get weight-alert thresholdsGET /raptors/{raptorId}/weight-alert-settingsRead
Add a raptorPOST /raptorsWrite
Update a raptor's detailsPATCH /raptors/{raptorId}Write
Star or unstar a raptorPOST /raptors/{raptorId}/favoriteWrite
Change a raptor's statusPOST /raptors/{raptorId}/statusWrite
Set a raptor's ready weightPOST /raptors/{raptorId}/ready-weightWrite
Put a raptor into moultPOST /raptors/{raptorId}/moult/startWrite
End a raptor's moultPOST /raptors/{raptorId}/moult/endWrite
Share with the team, or make privatePOST /raptors/{raptorId}/team-sharingWrite
Update weight-alert thresholdsPATCH /raptors/{raptorId}/weight-alert-settingsWrite

list_raptors takes an optional scope query parameter: all (own and team-shared birds, the default), mine (own only), or team (every bird your team shares with you). create_raptor needs a speciesId from search_species, and a free account is capped at 3 active raptors. There's no delete: archive a bird with set_raptor_status instead, which you can undo.

Weights

OperationRequestAccess
Get a raptor's weigh-in historyGET /raptors/{raptorId}/weightsRead
Get the latest weigh-in per raptorGET /weights/latestRead
Get one weigh-inGET /weights/{weightId}Read
Log a weigh-inPOST /raptors/{raptorId}/weightsWrite
Correct a weigh-inPATCH /weights/{weightId}Write
Delete a weigh-inDELETE /weights/{weightId}Write

get_weight_history takes optional since (an ISO 8601 datetime) and limit to bound the results, limit defaults to, and caps at, 500. get_latest_weights takes an optional raptorIds list (at most 200 ids), pass a comma-separated list of ids to scope it, or omit it to check your whole roster at once, the "who still needs weighing" read. log_weight needs weightGrams; measuredAt, stomachState (empty or fed), and prey details are optional.

Activities

OperationRequestAccess
List a raptor's activitiesGET /raptors/{raptorId}/activitiesRead
Get one activityGET /activities/{activityId}Read
Log a feedingPOST /raptors/{raptorId}/feedingsWrite
Log a training, flight, or hunting activityPOST /raptors/{raptorId}/activitiesWrite
Correct an activityPATCH /activities/{activityId}Write
Delete an activityDELETE /activities/{activityId}Write

list_activities takes optional activityType, and a from/to date range (ISO 8601 dates). Feeding is logged separately from training, flight exercise and hunting, use log_feeding for the former and log_activity for the latter. log_activity also takes training details (creance length and recall distance, in metres) and, for a hunt, the outcome, prey count and a slip assessment.

Food and feeding plans

OperationRequestAccess
List food itemsGET /food-itemsRead
List a raptor's feeding schedulesGET /raptors/{raptorId}/feeding-schedulesRead
Get the active bring-down planGET /raptors/{raptorId}/bring-down-planRead
Add a custom food itemPOST /food-itemsWrite
Edit a custom food itemPATCH /food-items/{foodItemId}Write
Star or unstar a food itemPOST /food-items/{foodItemId}/favoriteWrite
Start a bring-down planPOST /raptors/{raptorId}/bring-down-planWrite
Stop the active bring-down planPOST /raptors/{raptorId}/bring-down-plan/stopWrite

A food item's id is the preyTypeId a fed weigh-in takes. start_bring_down_plan defaults to the raptor's latest weigh-in and ready weight, over the same safe minimum number of days the app uses (never more than 1.5% a day).

Health

OperationRequestAccess
List a raptor's health recordsGET /raptors/{raptorId}/health-recordsRead
Get one health recordGET /health-records/{healthRecordId}Read
List a raptor's medication coursesGET /raptors/{raptorId}/medicationsRead
Get one medication courseGET /medications/{medicationId}Read
Add a health recordPOST /raptors/{raptorId}/health-recordsWrite
Update a health recordPATCH /health-records/{healthRecordId}Write
Delete a health recordDELETE /health-records/{healthRecordId}Write
Start a medication coursePOST /raptors/{raptorId}/medicationsWrite
Update a medication coursePATCH /medications/{medicationId}Write
Delete a medication courseDELETE /medications/{medicationId}Write
Log a medication dosePOST /medications/{medicationId}/dosesWrite

Both lists take an optional limit, defaulting to, and capped at, 200. A health record's attachments come back as metadata only (file name, type and size), not a download link, and attachments can only be added in the app. Deleting a health record also deletes its attached files.

Documents

OperationRequestAccess
List documentsGET /documentsRead
Get one document's detailsGET /documents/{documentId}Read
Update a document's detailsPATCH /documents/{documentId}Write

Documents are metadata only: title, type, issue and expiry dates, issuing authority, tags, and file name and size, never the file or a link to it. Pass expiringWithinDays to list_documents for the renewals view, soonest expiry first. Uploading and deleting documents stay in the app.

Team

OperationRequestAccess
Get your teamGET /teamRead
Invite someone to the teamPOST /team/invitesWrite
Revoke a pending inviteDELETE /team/invites/{inviteId}Write

Members are listed by display name and role only, never by email, and a pending invite shows a masked address. Inviting and revoking need the owner or admin role. invite_team_member sends the invite email (the only endpoint that emails anyone), accepts the member and viewer roles only, and never returns the join code: the invitee joins from the email.

Alerts and achievements

OperationRequestAccess
List your alertsGET /alertsRead
List your achievementsGET /achievementsRead
Mark an alert readPOST /alerts/{alertId}/readWrite
Mark every alert readPOST /alerts/read-allWrite

list_alerts is cursor-paginated: pass the previous response's nextCursor to get the next page, and stop once hasMore is false. list_achievements returns your total XP, what you've unlocked, and your progress toward the rest.

Not available through the API

Account deletion, subscriptions and payments, the marketplace, file uploads, and public share links stay in the app.

Data notes

  • Weights are always grams. Whatever unit a person's own display preference uses, every weight this API returns or accepts is in grams.
  • Dates and datetimes are ISO 8601. A date-only field (like an activity's activityDate) is yyyy-mm-dd; a full timestamp (like a weigh-in's measuredAt) includes the time.
  • Team birds follow the caller's role. A raptor shared with your team carries isOwn and myRole (self for your own birds, otherwise your team role on that bird), and list_raptors's scope parameter controls whose birds come back.

For the exact request and response shape of every field, see the generated API reference. For status codes and the error format, see Errors and rate limits.

On this page