---
title: "Get Animals"
method: GET
path: "/v1/farm/{farm_id}/animals"
tags: ["animals"]
---

# Get Animals

`GET /v1/farm/{farm_id}/animals`

## Request

- Base URL: `https://api.ranch.bot`
- URL: `https://api.ranch.bot/v1/farm/{farm_id}/animals`
- Auth: HTTP bearer

Current animals HTTP operation. External credential scopes: read:animals. Minimum farm role: READER. Pagination accepts integer skip and take; set both explicitly. An omitted value passes through to the data query. Collection property names differ by resource; use the response schema. Production rate limit: 100 requests per 15-minute window per device account, 1000 per browser session, otherwise per client IP. RateLimit headers report the current window; respect Retry-After on 429. Defaults to CURRENT inventory. Use inventory_status=ALL to include all nondeleted historical profiles, or select UNKNOWN, SOLD, DECEASED, or NOT_MANAGED. With a nonblank query, searches active saved identifiers and the canonical current profile name (metadata.name). Exact is case-sensitive full-value equality; partial is a literal case-insensitive substring over profile names, NAME and MANAGEMENT_TAG identifiers. Defaults to inventory_status=ALL and skip 0 / take 50 (max 200) while searching.

## Path parameters

- `farm_id` string, uuid, required

## Query parameters

- `skip` integer
- `take` integer
- `inventory_status` 'CURRENT' | 'UNKNOWN' | 'SOLD' | 'DECEASED' | 'NOT_MANAGED' | 'ALL'
- `query` string
- `match_mode` 'exact' | 'partial'
- `identifier_type` 'BRAND' | 'EID' | 'MANAGEMENT_TAG' | 'NAME' | 'TATTOO'

## Response `200`

Success

- object
  - `total` number, required
  - `records` object[], required
    - `id` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `is_active` boolean, required
    - `farm_id` string, required
    - `metadata` unknown, required
    - `groups` Group[], required
      - `id` string, nullable, required
      - `farm_id` string, nullable, required
      - `description` string, nullable, required
      - `is_active` boolean, nullable, required
      - `name` string, nullable, required
      - `created_at` string, date-time, nullable, required
      - `updated_at` string, date-time, nullable, required
    - `animal_identifiers` AnimalIdentifier[], required
      - `id` string, nullable, required
      - `animal_id` string, nullable, required
      - `is_active` boolean, nullable, required
      - `is_primary` boolean, nullable, required
      - `type` string, nullable, required
      - `value` string, nullable, required
      - `created_at` string, date-time, nullable, required
      - `updated_at` string, date-time, nullable, required
    - `inventory_status` 'CURRENT' | 'UNKNOWN' | 'SOLD' | 'DECEASED' | 'NOT_MANAGED', required
    - `birth_facts` BirthFacts
      - `record` object, nullable, required
        - `record_id` string, required
        - `birth_event_id` string, required
        - `revision` number, required
        - `birth_date` string, required
        - `time_precision` string, nullable, required
        - `dam_id` string, required
        - `sire` BirthFactsSire, required
          - `status` 'unknown' | 'presumed' | 'confirmed', required
          - `animal_id` string, nullable, required
          - `provenance` string, nullable, required
          - `confidence` number, nullable, required
      - `derived` object, required
        - `birth_date` string, nullable, required
        - `time_precision` string, nullable, required
        - `dam_id` string, nullable, required
        - `sire` BirthFactsSire, required
          - `status` 'unknown' | 'presumed' | 'confirmed', required
          - `animal_id` string, nullable, required
          - `provenance` string, nullable, required
          - `confidence` number, nullable, required
      - `profile_birth_date` string, nullable, required
      - `effective_birth_date` string, nullable, required
      - `conflicts` object[], required
        - `independent_birth_date` string, required
        - `recorded_birth_date` string, required
        - `record_id` string, required
    - `search_matches` union[]
      - union
        - object
          - `source` 'identifier', required
          - `identifier_id` string, required
          - `identifier_type` string, required
          - `value` string, required
        - object
          - `source` 'profile_name', required
          - `value` string, required
  - `outcome` 'not_found' | 'unique' | 'ambiguous' | 'candidates'
  - `scope` object
    - `farm_id` string
    - `query` string
    - `match_mode` 'exact' | 'partial'
    - `identifier_type` string, nullable
    - `inventory_status` string
    - `searches_profile_names` boolean
    - `searched_identifier_types` string[]
  - `pagination` object
    - `skip` integer, required
    - `take` integer, nullable, required
    - `returned` integer, required
    - `has_more` boolean, required
    - `next_skip` integer, nullable, required

## Other responses

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

---

[API](https://skmtc.dev/ranch/apis/ranch-bot-http-api.md) · [All operations](https://skmtc.dev/ranch/apis/ranch-bot-http-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ranch/apis/ranch-bot-http-api/revisions/24109d33fa02?raw)
