Ranch.Bot
Skip to reference

Locations API

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

GET /v1/farm/{farm_id}/locations

List Locations

List premises and sublocations for the farm, including identifiers and the parent path. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

ParameterInRequiredSchema
farm_idpathYes{"type":"string","format":"uuid"}
include_archivedqueryNo{"type":"boolean","default":false}

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
totalnumberRequired
locationsarrayRequired
locations[]objectRequired
locations[].idstringRequired
locations[].farm_idstringRequired
locations[].parent_id (variant 1)nullOptional
locations[].parent_id (variant 2)stringOptional
locations[].namestringRequired
locations[].category (variant 1)nullOptional
locations[].category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
locations[].context (variant 1)nullOptional
locations[].context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
locations[].address (variant 1)nullOptional
locations[].address (variant 2)stringOptional
locations[].legal_land_description (variant 1)nullOptional
locations[].legal_land_description (variant 2)stringOptional
locations[].country (variant 1)nullOptional
locations[].country (variant 2)stringOptional
locations[].province_state (variant 1)nullOptional
locations[].province_state (variant 2)stringOptional
locations[].is_activebooleanRequired
locations[].versionintegerRequired
locations[].pathstringRequired
locations[].root_idstringRequired
locations[].identifiersarrayRequired
locations[].identifiers[]objectRequired
locations[].identifiers[].idstringRequired
locations[].identifiers[].location_idstringRequired
locations[].identifiers[].schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
locations[].identifiers[].scheme_label (variant 1)nullOptional
locations[].identifiers[].scheme_label (variant 2)stringOptional
locations[].identifiers[].issuer (variant 1)nullOptional
locations[].identifiers[].issuer (variant 2)stringOptional
locations[].identifiers[].jurisdiction (variant 1)nullOptional
locations[].identifiers[].jurisdiction (variant 2)stringOptional
locations[].identifiers[].valuestringRequired
locations[].identifiers[].source (variant 1)nullOptional
locations[].identifiers[].source (variant 2)stringOptional
locations[].identifiers[].confirmed_by_user_id (variant 1)nullOptional
locations[].identifiers[].confirmed_by_user_id (variant 2)stringOptional
locations[].identifiers[].confirmed_at (variant 1)nullOptional
locations[].identifiers[].confirmed_at (variant 2)stringOptionalformat: "date-time"
locations[].identifiers[].is_preferredbooleanRequired
locations[].identifiers[].versionintegerRequired
locations[].identifiers[].created_atstringRequiredformat: "date-time"
locations[].identifiers[].updated_atstringRequiredformat: "date-time"
locations[].created_atstringRequiredformat: "date-time"
locations[].updated_atstringRequiredformat: "date-time"

POST /v1/farm/{farm_id}/locations

Create Location

Create a premises (no parent_id) or a sublocation beneath an existing premises. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
namestringRequired
parent_id (variant 1)nullOptional
parent_id (variant 2)stringOptional
category (variant 1)nullOptional
category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
context (variant 1)nullOptional
context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
addressstringOptional
legal_land_descriptionstringOptional
countrystringOptional
province_statestringOptional
json example
{
  "name": "Home place",
  "category": "FARM",
  "province_state": "Alberta"
}

Request example

bash example
curl --fail-with-body -X POST \
  'https://api.ranch.bot/v1/farm/<farm_id>/locations' \
  -H "Authorization: Bearer $RANCHBOT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"name":"Home place","category":"FARM","province_state":"Alberta"}'

Responses

StatusMeaningContent type
201Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

201 response schema (application/json)

FieldTypePresenceConstraints
locationobjectRequired
location.idstringRequired
location.farm_idstringRequired
location.parent_id (variant 1)nullOptional
location.parent_id (variant 2)stringOptional
location.namestringRequired
location.category (variant 1)nullOptional
location.category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
location.context (variant 1)nullOptional
location.context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
location.address (variant 1)nullOptional
location.address (variant 2)stringOptional
location.legal_land_description (variant 1)nullOptional
location.legal_land_description (variant 2)stringOptional
location.country (variant 1)nullOptional
location.country (variant 2)stringOptional
location.province_state (variant 1)nullOptional
location.province_state (variant 2)stringOptional
location.is_activebooleanRequired
location.versionintegerRequired
location.pathstringRequired
location.root_idstringRequired
location.identifiersarrayRequired
location.identifiers[]objectRequired
location.identifiers[].idstringRequired
location.identifiers[].location_idstringRequired
location.identifiers[].schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
location.identifiers[].scheme_label (variant 1)nullOptional
location.identifiers[].scheme_label (variant 2)stringOptional
location.identifiers[].issuer (variant 1)nullOptional
location.identifiers[].issuer (variant 2)stringOptional
location.identifiers[].jurisdiction (variant 1)nullOptional
location.identifiers[].jurisdiction (variant 2)stringOptional
location.identifiers[].valuestringRequired
location.identifiers[].source (variant 1)nullOptional
location.identifiers[].source (variant 2)stringOptional
location.identifiers[].confirmed_by_user_id (variant 1)nullOptional
location.identifiers[].confirmed_by_user_id (variant 2)stringOptional
location.identifiers[].confirmed_at (variant 1)nullOptional
location.identifiers[].confirmed_at (variant 2)stringOptionalformat: "date-time"
location.identifiers[].is_preferredbooleanRequired
location.identifiers[].versionintegerRequired
location.identifiers[].created_atstringRequiredformat: "date-time"
location.identifiers[].updated_atstringRequiredformat: "date-time"
location.created_atstringRequiredformat: "date-time"
location.updated_atstringRequiredformat: "date-time"

PUT /v1/farm/{farm_id}/locations/home

Set Home Premises

Set the explicitly selected default home premises. This is never assumed as an event origin. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
location_idstringRequiredformat: "uuid"
json example
{
  "location_id": "00000000-0000-4000-8000-000000000010"
}

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
home_location_idstringRequired

DELETE /v1/farm/{farm_id}/locations/home

Clear Home Premises

Clear the default home premises. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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>/locations/home' \
  -H "Authorization: Bearer $RANCHBOT_TOKEN"

Responses

StatusMeaningContent type
204ClearedNo body
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

GET /v1/farm/{farm_id}/locations/{location_id}

Get Location

Get one location with its sublocations and premises identifiers. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
locationobjectRequired
location.idstringRequired
location.farm_idstringRequired
location.parent_id (variant 1)nullOptional
location.parent_id (variant 2)stringOptional
location.namestringRequired
location.category (variant 1)nullOptional
location.category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
location.context (variant 1)nullOptional
location.context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
location.address (variant 1)nullOptional
location.address (variant 2)stringOptional
location.legal_land_description (variant 1)nullOptional
location.legal_land_description (variant 2)stringOptional
location.country (variant 1)nullOptional
location.country (variant 2)stringOptional
location.province_state (variant 1)nullOptional
location.province_state (variant 2)stringOptional
location.is_activebooleanRequired
location.versionintegerRequired
location.pathstringRequired
location.root_idstringRequired
location.identifiersarrayRequired
location.identifiers[]objectRequired
location.identifiers[].idstringRequired
location.identifiers[].location_idstringRequired
location.identifiers[].schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
location.identifiers[].scheme_label (variant 1)nullOptional
location.identifiers[].scheme_label (variant 2)stringOptional
location.identifiers[].issuer (variant 1)nullOptional
location.identifiers[].issuer (variant 2)stringOptional
location.identifiers[].jurisdiction (variant 1)nullOptional
location.identifiers[].jurisdiction (variant 2)stringOptional
location.identifiers[].valuestringRequired
location.identifiers[].source (variant 1)nullOptional
location.identifiers[].source (variant 2)stringOptional
location.identifiers[].confirmed_by_user_id (variant 1)nullOptional
location.identifiers[].confirmed_by_user_id (variant 2)stringOptional
location.identifiers[].confirmed_at (variant 1)nullOptional
location.identifiers[].confirmed_at (variant 2)stringOptionalformat: "date-time"
location.identifiers[].is_preferredbooleanRequired
location.identifiers[].versionintegerRequired
location.identifiers[].created_atstringRequiredformat: "date-time"
location.identifiers[].updated_atstringRequiredformat: "date-time"
location.created_atstringRequiredformat: "date-time"
location.updated_atstringRequiredformat: "date-time"

PUT /v1/farm/{farm_id}/locations/{location_id}

Update Location

Edit a location directory entry. Pass expected_version to reject a stale edit. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
namestringOptional
parent_id (variant 1)nullOptional
parent_id (variant 2)stringOptional
category (variant 1)nullOptional
category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
context (variant 1)nullOptional
context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
addressstringOptional
legal_land_descriptionstringOptional
countrystringOptional
province_statestringOptional
expected_versionintegerOptional
json example
{
  "name": "North field",
  "expected_version": 1
}

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
locationobjectRequired
location.idstringRequired
location.farm_idstringRequired
location.parent_id (variant 1)nullOptional
location.parent_id (variant 2)stringOptional
location.namestringRequired
location.category (variant 1)nullOptional
location.category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
location.context (variant 1)nullOptional
location.context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
location.address (variant 1)nullOptional
location.address (variant 2)stringOptional
location.legal_land_description (variant 1)nullOptional
location.legal_land_description (variant 2)stringOptional
location.country (variant 1)nullOptional
location.country (variant 2)stringOptional
location.province_state (variant 1)nullOptional
location.province_state (variant 2)stringOptional
location.is_activebooleanRequired
location.versionintegerRequired
location.pathstringRequired
location.root_idstringRequired
location.identifiersarrayRequired
location.identifiers[]objectRequired
location.identifiers[].idstringRequired
location.identifiers[].location_idstringRequired
location.identifiers[].schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
location.identifiers[].scheme_label (variant 1)nullOptional
location.identifiers[].scheme_label (variant 2)stringOptional
location.identifiers[].issuer (variant 1)nullOptional
location.identifiers[].issuer (variant 2)stringOptional
location.identifiers[].jurisdiction (variant 1)nullOptional
location.identifiers[].jurisdiction (variant 2)stringOptional
location.identifiers[].valuestringRequired
location.identifiers[].source (variant 1)nullOptional
location.identifiers[].source (variant 2)stringOptional
location.identifiers[].confirmed_by_user_id (variant 1)nullOptional
location.identifiers[].confirmed_by_user_id (variant 2)stringOptional
location.identifiers[].confirmed_at (variant 1)nullOptional
location.identifiers[].confirmed_at (variant 2)stringOptionalformat: "date-time"
location.identifiers[].is_preferredbooleanRequired
location.identifiers[].versionintegerRequired
location.identifiers[].created_atstringRequiredformat: "date-time"
location.identifiers[].updated_atstringRequiredformat: "date-time"
location.created_atstringRequiredformat: "date-time"
location.updated_atstringRequiredformat: "date-time"

POST /v1/farm/{farm_id}/locations/{location_id}/archive

Archive Location

Archive a location. Archiving a premises archives its sublocations and clears a matching home default. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
expected_versionintegerOptional
json example
{
  "expected_version": 1
}

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
locationobjectRequired
location.idstringRequired
location.farm_idstringRequired
location.parent_id (variant 1)nullOptional
location.parent_id (variant 2)stringOptional
location.namestringRequired
location.category (variant 1)nullOptional
location.category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
location.context (variant 1)nullOptional
location.context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
location.address (variant 1)nullOptional
location.address (variant 2)stringOptional
location.legal_land_description (variant 1)nullOptional
location.legal_land_description (variant 2)stringOptional
location.country (variant 1)nullOptional
location.country (variant 2)stringOptional
location.province_state (variant 1)nullOptional
location.province_state (variant 2)stringOptional
location.is_activebooleanRequired
location.versionintegerRequired
location.pathstringRequired
location.root_idstringRequired
location.identifiersarrayRequired
location.identifiers[]objectRequired
location.identifiers[].idstringRequired
location.identifiers[].location_idstringRequired
location.identifiers[].schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
location.identifiers[].scheme_label (variant 1)nullOptional
location.identifiers[].scheme_label (variant 2)stringOptional
location.identifiers[].issuer (variant 1)nullOptional
location.identifiers[].issuer (variant 2)stringOptional
location.identifiers[].jurisdiction (variant 1)nullOptional
location.identifiers[].jurisdiction (variant 2)stringOptional
location.identifiers[].valuestringRequired
location.identifiers[].source (variant 1)nullOptional
location.identifiers[].source (variant 2)stringOptional
location.identifiers[].confirmed_by_user_id (variant 1)nullOptional
location.identifiers[].confirmed_by_user_id (variant 2)stringOptional
location.identifiers[].confirmed_at (variant 1)nullOptional
location.identifiers[].confirmed_at (variant 2)stringOptionalformat: "date-time"
location.identifiers[].is_preferredbooleanRequired
location.identifiers[].versionintegerRequired
location.identifiers[].created_atstringRequiredformat: "date-time"
location.identifiers[].updated_atstringRequiredformat: "date-time"
location.created_atstringRequiredformat: "date-time"
location.updated_atstringRequiredformat: "date-time"

POST /v1/farm/{farm_id}/locations/{location_id}/restore

Restore Location

Restore an archived location. A sublocation requires an active parent; restoring a premises restores its sublocations. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
expected_versionintegerOptional
json example
{
  "expected_version": 2
}

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
locationobjectRequired
location.idstringRequired
location.farm_idstringRequired
location.parent_id (variant 1)nullOptional
location.parent_id (variant 2)stringOptional
location.namestringRequired
location.category (variant 1)nullOptional
location.category (variant 2)stringOptionalenum: ["FARM","FIELD","PEN","BARN","VET","RODEO","ABATTOIR","AUCTION","OTHER"]
location.context (variant 1)nullOptional
location.context (variant 2)stringOptionalenum: ["OPERATED","LEASED","EXTERNAL"]
location.address (variant 1)nullOptional
location.address (variant 2)stringOptional
location.legal_land_description (variant 1)nullOptional
location.legal_land_description (variant 2)stringOptional
location.country (variant 1)nullOptional
location.country (variant 2)stringOptional
location.province_state (variant 1)nullOptional
location.province_state (variant 2)stringOptional
location.is_activebooleanRequired
location.versionintegerRequired
location.pathstringRequired
location.root_idstringRequired
location.identifiersarrayRequired
location.identifiers[]objectRequired
location.identifiers[].idstringRequired
location.identifiers[].location_idstringRequired
location.identifiers[].schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
location.identifiers[].scheme_label (variant 1)nullOptional
location.identifiers[].scheme_label (variant 2)stringOptional
location.identifiers[].issuer (variant 1)nullOptional
location.identifiers[].issuer (variant 2)stringOptional
location.identifiers[].jurisdiction (variant 1)nullOptional
location.identifiers[].jurisdiction (variant 2)stringOptional
location.identifiers[].valuestringRequired
location.identifiers[].source (variant 1)nullOptional
location.identifiers[].source (variant 2)stringOptional
location.identifiers[].confirmed_by_user_id (variant 1)nullOptional
location.identifiers[].confirmed_by_user_id (variant 2)stringOptional
location.identifiers[].confirmed_at (variant 1)nullOptional
location.identifiers[].confirmed_at (variant 2)stringOptionalformat: "date-time"
location.identifiers[].is_preferredbooleanRequired
location.identifiers[].versionintegerRequired
location.identifiers[].created_atstringRequiredformat: "date-time"
location.identifiers[].updated_atstringRequiredformat: "date-time"
location.created_atstringRequiredformat: "date-time"
location.updated_atstringRequiredformat: "date-time"

POST /v1/farm/{farm_id}/locations/{location_id}/identifiers

Add Premises Identifier

Add a premises identifier to a root premises. Values are stored as strings with leading zeros preserved; no registry verification is claimed. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
scheme_labelstringOptional
issuerstringOptional
jurisdictionstringOptional
valuestringRequired
sourcestringOptional
confirmedbooleanOptional
is_preferredbooleanOptional
json example
{
  "scheme": "CA_PID",
  "value": "A0012345",
  "issuer": "Alberta"
}

Request example

bash example
curl --fail-with-body -X POST \
  'https://api.ranch.bot/v1/farm/<farm_id>/locations/<location_id>/identifiers' \
  -H "Authorization: Bearer $RANCHBOT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"scheme":"CA_PID","value":"A0012345","issuer":"Alberta"}'

Responses

StatusMeaningContent type
201Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

201 response schema (application/json)

FieldTypePresenceConstraints
identifierobjectRequired
identifier.idstringRequired
identifier.location_idstringRequired
identifier.schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
identifier.scheme_label (variant 1)nullOptional
identifier.scheme_label (variant 2)stringOptional
identifier.issuer (variant 1)nullOptional
identifier.issuer (variant 2)stringOptional
identifier.jurisdiction (variant 1)nullOptional
identifier.jurisdiction (variant 2)stringOptional
identifier.valuestringRequired
identifier.source (variant 1)nullOptional
identifier.source (variant 2)stringOptional
identifier.confirmed_by_user_id (variant 1)nullOptional
identifier.confirmed_by_user_id (variant 2)stringOptional
identifier.confirmed_at (variant 1)nullOptional
identifier.confirmed_at (variant 2)stringOptionalformat: "date-time"
identifier.is_preferredbooleanRequired
identifier.versionintegerRequired
identifier.created_atstringRequiredformat: "date-time"
identifier.updated_atstringRequiredformat: "date-time"

PUT /v1/farm/{farm_id}/locations/{location_id}/identifiers/{identifier_id}

Update Premises Identifier

Update a premises identifier. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request body (application/json)

FieldTypePresenceConstraints
schemestringOptional
scheme_labelstringOptional
issuerstringOptional
jurisdictionstringOptional
valuestringOptional
sourcestringOptional
confirmedbooleanOptional
is_preferredbooleanOptional
expected_versionintegerOptional
json example
{
  "value": "A0012346",
  "expected_version": 1
}

Request example

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

Responses

StatusMeaningContent type
200Successapplication/json
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

200 response schema (application/json)

FieldTypePresenceConstraints
identifierobjectRequired
identifier.idstringRequired
identifier.location_idstringRequired
identifier.schemestringRequiredenum: ["CA_PID","US_PIN","US_LID","OTHER"]
identifier.scheme_label (variant 1)nullOptional
identifier.scheme_label (variant 2)stringOptional
identifier.issuer (variant 1)nullOptional
identifier.issuer (variant 2)stringOptional
identifier.jurisdiction (variant 1)nullOptional
identifier.jurisdiction (variant 2)stringOptional
identifier.valuestringRequired
identifier.source (variant 1)nullOptional
identifier.source (variant 2)stringOptional
identifier.confirmed_by_user_id (variant 1)nullOptional
identifier.confirmed_by_user_id (variant 2)stringOptional
identifier.confirmed_at (variant 1)nullOptional
identifier.confirmed_at (variant 2)stringOptionalformat: "date-time"
identifier.is_preferredbooleanRequired
identifier.versionintegerRequired
identifier.created_atstringRequiredformat: "date-time"
identifier.updated_atstringRequiredformat: "date-time"

DELETE /v1/farm/{farm_id}/locations/{location_id}/identifiers/{identifier_id}

Delete Premises Identifier

Remove a premises identifier. Directory scopes use read:farms/write:farms; minimum farm role READER for reads and EDITOR for writes.

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

Request example

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

Responses

StatusMeaningContent type
204RemovedNo body
400Request validation failed.No body
401Missing/invalid authentication or insufficient farm role.No body
403Missing required external credential scope.No body
404Location not found.No body

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