Ranch.Bot
Skip to reference

Feeding plans API

HTTP reference for feeding plans. Read authentication and access before using these operations. All examples use made-up data and placeholder credentials.

GET /v1/farm/{farm_id}/feed-plan

Get Feed Plan

Current feeding plans HTTP operation. External credential scopes: read:records. Minimum farm role: READER. Production rate limit: 100 requests per 15-minute window, per legacy key, otherwise per client IP. RateLimit headers report the current window; respect Retry-After on 429.

ParameterInRequiredSchema
farm_idpathYes{"type":"string","format":"uuid"}
sincequeryNo{"type":"string","format":"date-time"}

Request example

bash example
curl --fail-with-body -X GET \
  'https://api.ranch.bot/v1/farm/<farm_id>/feed-plan' \
  -H "Authorization: Bearer $RANCHBOT_TOKEN"

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.application/json
401Missing/invalid authentication or insufficient farm role.application/json
403Missing required scope or credential type is disallowed.application/json
404Resource or active farm membership not found.application/json
429Rate limit exceeded. Retry after the indicated delay.application/json
500Unexpected server failure.application/json

200 response schema (application/json)

FieldTypePresenceConstraints
synced_atstringRequired
rationsarrayRequired
rations[]objectRequired
rations[].idstringRequired
rations[].namestringRequired
rations[].unitstringRequired
rations[].ingredientsarrayRequired
rations[].ingredients[]objectRequired
rations[].ingredients[].idstringRequired
rations[].ingredients[].namestringRequired
rations[].ingredients[].per_head_lbsstringRequired
rations[].ingredients[].positionintegerRequired
assignmentsarrayRequired
assignments[]objectRequired
assignments[].idstringRequired
assignments[].ration_idstringRequired
assignments[].group_idstringRequired
assignments[].feedings_per_daynumberRequired
assignments[].label (variant 1)nullRequired
assignments[].label (variant 2)stringRequired
assignments[].groupobjectRequired
assignments[].group.idstringRequired
assignments[].group.namestringRequired
assignments[].group.head_countnumberRequired
recent_deliveriesarrayRequired
recent_deliveries[]objectRequired
recent_deliveries[].feeding_idstringRequired
recent_deliveries[].ration_idstringRequired
recent_deliveries[].group_idstringRequired
recent_deliveries[].fed_atstringRequiredformat: "date-time"
recent_deliveries[].delivered_lbsstringRequired
recent_deliveries[].statusstringRequiredenum: ["ACTIVE","COMPLETED"]
json example
{
  "synced_at": "2026-09-01T12:00:00.000Z",
  "rations": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "Hay ration",
      "unit": "lb",
      "ingredients": [
        {
          "id": "11111111-1111-4111-8111-111111111111",
          "name": "Hay",
          "per_head_lbs": "5.25",
          "position": 0
        }
      ]
    }
  ],
  "assignments": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "ration_id": "11111111-1111-4111-8111-111111111111",
      "group_id": "11111111-1111-4111-8111-111111111111",
      "feedings_per_day": 2,
      "label": null,
      "group": {
        "id": "11111111-1111-4111-8111-111111111111",
        "name": "Ewes",
        "head_count": 10
      }
    }
  ],
  "recent_deliveries": [
    {
      "feeding_id": "11111111-1111-4111-8111-111111111111",
      "ration_id": "11111111-1111-4111-8111-111111111111",
      "group_id": "11111111-1111-4111-8111-111111111111",
      "fed_at": "2026-09-01T12:00:00.000Z",
      "delivered_lbs": "12.5",
      "status": "ACTIVE"
    }
  ]
}

Error body

Validation and authentication errors generally use this envelope. Rate-limit errors omit data; OAuth polling also has protocol-specific errors shown in its reference.

json example
{
  "success": false,
  "errors": [
    {
      "code": 400,
      "name": "ValidationError",
      "message": "Example validation failure"
    }
  ]
}