Ranch.Bot
Skip to reference

Farms API

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

GET /v1/farm

Get Farms

Current farms HTTP operation. External credential scopes: read:farms. Access is resolved for the authenticated user or by the endpoint-specific OAuth checks. 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 legacy key, otherwise per client IP. RateLimit headers report the current window; respect Retry-After on 429.

ParameterInRequiredSchema
skipqueryNo{"type":"integer"}
takequeryNo{"type":"integer"}

Request example

bash example
curl --fail-with-body -X GET \
  'https://api.ranch.bot/v1/farm' \
  -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
totalnumberRequired
recordsarrayRequired
records[]objectRequired
records[].idstringRequired
records[].created_atstringRequiredformat: "date-time"
records[].updated_atstringRequiredformat: "date-time"
records[].namestringRequired
records[].allow_private_threadsbooleanRequired
records[].current_month_start (variant 1)nullRequired
records[].current_month_start (variant 2)stringRequiredformat: "date-time"
records[].is_activebooleanRequired
records[].speciesstringRequiredenum: ["BISON","CATTLE","ELK","GOAT","HORSE","OTHER","SHEEP"]
records[].species_other (variant 1)nullRequired
records[].species_other (variant 2)stringRequired
records[].farm_usersarrayRequired
records[].farm_users[]objectRequired
records[].farm_users[].id (variant 1)stringRequired
records[].farm_users[].id (variant 2)nullRequired
records[].farm_users[].farm_id (variant 1)stringRequired
records[].farm_users[].farm_id (variant 2)nullRequired
records[].farm_users[].user_id (variant 1)stringRequired
records[].farm_users[].user_id (variant 2)nullRequired
records[].farm_users[].is_active (variant 1)booleanRequired
records[].farm_users[].is_active (variant 2)nullRequired
records[].farm_users[].role (variant 1)stringRequired
records[].farm_users[].role (variant 2)nullRequired
records[].farm_users[].created_at (variant 1)stringRequiredformat: "date-time"
records[].farm_users[].created_at (variant 2)nullRequired
records[].farm_users[].updated_at (variant 1)stringRequiredformat: "date-time"
records[].farm_users[].updated_at (variant 2)nullRequired
records[].farm_users[].userobjectRequired
records[].farm_users[].user.idstringRequired
records[].farm_users[].user.full_namestring or nullRequired
records[].farm_users[].user.phone_number_localstringRequired
json example
{
  "total": 0,
  "records": []
}

POST /v1/farm

Create Farm

Current farms HTTP operation. External credential scopes: write:farms. Access is resolved for the authenticated user or by the endpoint-specific OAuth checks. Direct requests execute without an app confirmation screen. 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.

Request body (application/json)

FieldTypePresenceConstraints
namestringRequiredminLength: 2
speciesstringRequiredenum: ["BISON","CATTLE","ELK","GOAT","HORSE","OTHER","SHEEP"]
species_otherstringOptionalmaxLength: 100
json example
{
  "name": "Example",
  "species": "BISON"
}

Request example

bash example
curl --fail-with-body -X POST \
  'https://api.ranch.bot/v1/farm' \
  -H "Authorization: Bearer $RANCHBOT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"name":"Example","species":"BISON"}'

Responses

StatusMeaningContent type
201Successapplication/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

201 response schema (application/json)

FieldTypePresenceConstraints
farmobjectRequired
farm.idstringRequired
farm.created_atstringRequiredformat: "date-time"
farm.updated_atstringRequiredformat: "date-time"
farm.namestringRequired
farm.allow_private_threadsbooleanRequired
farm.current_month_start (variant 1)nullRequired
farm.current_month_start (variant 2)stringRequiredformat: "date-time"
farm.is_activebooleanRequired
farm.speciesstringRequiredenum: ["BISON","CATTLE","ELK","GOAT","HORSE","OTHER","SHEEP"]
farm.species_other (variant 1)nullRequired
farm.species_other (variant 2)stringRequired
farm.farm_usersarrayRequired
farm.farm_users[]objectRequired
farm.farm_users[].id (variant 1)stringRequired
farm.farm_users[].id (variant 2)nullRequired
farm.farm_users[].farm_id (variant 1)stringRequired
farm.farm_users[].farm_id (variant 2)nullRequired
farm.farm_users[].user_id (variant 1)stringRequired
farm.farm_users[].user_id (variant 2)nullRequired
farm.farm_users[].is_active (variant 1)booleanRequired
farm.farm_users[].is_active (variant 2)nullRequired
farm.farm_users[].role (variant 1)stringRequired
farm.farm_users[].role (variant 2)nullRequired
farm.farm_users[].created_at (variant 1)stringRequiredformat: "date-time"
farm.farm_users[].created_at (variant 2)nullRequired
farm.farm_users[].updated_at (variant 1)stringRequiredformat: "date-time"
farm.farm_users[].updated_at (variant 2)nullRequired
farm.farm_users[].userobjectRequired
farm.farm_users[].user.idstringRequired
farm.farm_users[].user.full_namestring or nullRequired
farm.farm_users[].user.phone_number_localstringRequired
welcome_thread_idstringRequired
json example
{
  "farm": {
    "id": "11111111-1111-4111-8111-111111111111",
    "created_at": "2026-09-01T12:00:00.000Z",
    "updated_at": "2026-09-01T12:00:00.000Z",
    "name": "Example",
    "allow_private_threads": true,
    "current_month_start": null,
    "is_active": true,
    "species": "BISON",
    "species_other": null,
    "farm_users": []
  },
  "welcome_thread_id": "11111111-1111-4111-8111-111111111111"
}

DELETE /v1/farm/{farm_id}

Delete Farm

Current farms HTTP operation. External credential scopes: write:farms. Minimum farm role: OWNER. Direct requests execute without an app confirmation screen. 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. Deletion behavior is described below; a successful status does not imply erasure from all retained history. Marks the stored entity inactive (soft deletion).

ParameterInRequiredSchema
farm_idpathYes{"type":"string","format":"uuid"}

Request example

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

Responses

StatusMeaningContent type
204Completed; no response body.No body
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

GET /v1/farm/{farm_id}

Get Farm

Current farms HTTP operation. External credential scopes: read:farms. 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"}

Request example

bash example
curl --fail-with-body -X GET \
  'https://api.ranch.bot/v1/farm/<farm_id>' \
  -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
farmobjectRequired
farm.id (variant 1)stringRequired
farm.id (variant 2)nullRequired
farm.allow_private_threads (variant 1)booleanRequired
farm.allow_private_threads (variant 2)nullRequired
farm.current_month_start (variant 1)stringRequiredformat: "date-time"
farm.current_month_start (variant 2)nullRequired
farm.is_active (variant 1)booleanRequired
farm.is_active (variant 2)nullRequired
farm.name (variant 1)stringRequired
farm.name (variant 2)nullRequired
farm.species (variant 1)stringRequired
farm.species (variant 2)nullRequired
farm.species_other (variant 1)stringRequired
farm.species_other (variant 2)nullRequired
farm.created_at (variant 1)stringRequiredformat: "date-time"
farm.created_at (variant 2)nullRequired
farm.updated_at (variant 1)stringRequiredformat: "date-time"
farm.updated_at (variant 2)nullRequired
farm.farm_usersarrayRequired
farm.farm_users[]objectRequired
farm.farm_users[].id (variant 1)stringRequired
farm.farm_users[].id (variant 2)nullRequired
farm.farm_users[].farm_id (variant 1)stringRequired
farm.farm_users[].farm_id (variant 2)nullRequired
farm.farm_users[].user_id (variant 1)stringRequired
farm.farm_users[].user_id (variant 2)nullRequired
farm.farm_users[].is_active (variant 1)booleanRequired
farm.farm_users[].is_active (variant 2)nullRequired
farm.farm_users[].role (variant 1)stringRequired
farm.farm_users[].role (variant 2)nullRequired
farm.farm_users[].created_at (variant 1)stringRequiredformat: "date-time"
farm.farm_users[].created_at (variant 2)nullRequired
farm.farm_users[].updated_at (variant 1)stringRequiredformat: "date-time"
farm.farm_users[].updated_at (variant 2)nullRequired
farm.farm_users[].userobjectRequired
farm.farm_users[].user.idstringRequired
farm.farm_users[].user.full_namestring or nullRequired
farm.farm_users[].user.phone_number_localstringRequired
json example
{
  "farm": {
    "id": "11111111-1111-4111-8111-111111111111",
    "allow_private_threads": true,
    "current_month_start": "2026-09-01T12:00:00.000Z",
    "is_active": true,
    "name": "example",
    "species": "example",
    "species_other": "example",
    "created_at": "2026-09-01T12:00:00.000Z",
    "updated_at": "2026-09-01T12:00:00.000Z",
    "farm_users": []
  }
}

PUT /v1/farm/{farm_id}

Update Farm

Current farms HTTP operation. External credential scopes: write:farms. Minimum farm role: EDITOR. Direct requests execute without an app confirmation screen. 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"}

Request body (application/json)

FieldTypePresenceConstraints
allow_private_threadsbooleanOptional
namestringOptionalminLength: 2
speciesstringOptionalenum: ["BISON","CATTLE","ELK","GOAT","HORSE","OTHER","SHEEP"]
species_other (variant 1)stringOptionalmaxLength: 100
species_other (variant 2)nullOptional
json example
{}

Request example

bash example
curl --fail-with-body -X PUT \
  'https://api.ranch.bot/v1/farm/<farm_id>' \
  -H "Authorization: Bearer $RANCHBOT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{}'

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
farmobjectRequired
farm.idstringRequired
farm.created_atstringRequiredformat: "date-time"
farm.updated_atstringRequiredformat: "date-time"
farm.namestringRequired
farm.allow_private_threadsbooleanRequired
farm.current_month_start (variant 1)nullRequired
farm.current_month_start (variant 2)stringRequiredformat: "date-time"
farm.is_activebooleanRequired
farm.speciesstringRequiredenum: ["BISON","CATTLE","ELK","GOAT","HORSE","OTHER","SHEEP"]
farm.species_other (variant 1)nullRequired
farm.species_other (variant 2)stringRequired
farm.farm_usersarrayRequired
farm.farm_users[]objectRequired
farm.farm_users[].id (variant 1)stringRequired
farm.farm_users[].id (variant 2)nullRequired
farm.farm_users[].farm_id (variant 1)stringRequired
farm.farm_users[].farm_id (variant 2)nullRequired
farm.farm_users[].user_id (variant 1)stringRequired
farm.farm_users[].user_id (variant 2)nullRequired
farm.farm_users[].is_active (variant 1)booleanRequired
farm.farm_users[].is_active (variant 2)nullRequired
farm.farm_users[].role (variant 1)stringRequired
farm.farm_users[].role (variant 2)nullRequired
farm.farm_users[].created_at (variant 1)stringRequiredformat: "date-time"
farm.farm_users[].created_at (variant 2)nullRequired
farm.farm_users[].updated_at (variant 1)stringRequiredformat: "date-time"
farm.farm_users[].updated_at (variant 2)nullRequired
farm.farm_users[].userobjectRequired
farm.farm_users[].user.idstringRequired
farm.farm_users[].user.full_namestring or nullRequired
farm.farm_users[].user.phone_number_localstringRequired
json example
{
  "farm": {
    "id": "11111111-1111-4111-8111-111111111111",
    "created_at": "2026-09-01T12:00:00.000Z",
    "updated_at": "2026-09-01T12:00:00.000Z",
    "name": "Example",
    "allow_private_threads": true,
    "current_month_start": null,
    "is_active": true,
    "species": "BISON",
    "species_other": null,
    "farm_users": []
  }
}

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"
    }
  ]
}