---
title: "Get the paddock a move went to"
method: GET
path: "/tasks/{id}/to_paddock"
tags: ["Tasks"]
---

# Get the paddock a move went to

`GET /tasks/{id}/to_paddock`

## Request

- Base URL: `https://api.purplegrain.com/api/v1`
- URL: `https://api.purplegrain.com/api/v1/tasks/{id}/to_paddock`
- Auth: one of:
  - none
  - HTTP bearer

The related resource URL of a task's `to_paddock` relationship (JSON:API 1.1,
"Related Resource Links"; decision 2026-10-28, G17): on a move, the paddock
the mob went to, as `getPaddock` returns it; `data: null` with a 200 on any
row that is not a move. It is the relationship's `links.related` on
`getTask`, built from the task's id alone, so it never changes. The paddock
is read under its own rights, as `getTaskFromPaddock` describes. Not an
assistant's tool: an assistant reads the paddock with `getPaddock` and is
refused here (403).

## Path parameters

- `id` string, required

## Response `200`

The paddock, or `data: null` when the task is not a move

- RelatedPaddockResponseAttributes: The same document in attributes-adapter shape (Accept application/json): the flat paddock, or `data: null`.
  - `data` PaddockModelAttributes: Single paddock in attributes-adapter shape (Accept application/json).
    - `id` string
    - `type` string
    - `slug` string: Unique within its parent (a property per owner; a paddock or mob per property); generated from the name and renamed with it. The old slug keeps resolving. See `resolveLink`.
    - `web_path` string: The address on the web. Present when read directly.
    - `url` string: The whole link; carries the property's `?share=` token when it is shared by link. Present when read directly.
    - `name` string
    - `area_ha` number, nullable: Paddock area in hectares. Measured from the boundary when `area_source` is `drawn`; the farmer's own number when it is `typed`.
    - `area_source` 'typed' | 'drawn', nullable: Where `area_ha` came from. A `typed` area is never overwritten by a drawn one.
    - `land_use` 'cropping' | 'grazing' | 'mixed' | 'fallow', nullable
    - `tenure` 'owned' | 'leased', nullable: Whether the area is owned or leased. Null when unset.
    - `current_crop` string, nullable
    - `boundary` array[], nullable: The paddock outline: an array of rings, each ring an array of `[longitude, latitude]` pairs in RFC 7946 order — **longitude first** — with at least 4 positions and the first repeated last. Not a GeoJSON object (see `PaddockBoundaryModel`).
      - array[]: One closed exterior ring.
        - number[]: [longitude, latitude]
    - `has_boundary` boolean: Whether the paddock has an outline at all — the cheap face of `boundary`.
    - `withholding` object, nullable: Is the paddock under a grazing or harvest withholding period right now? The latest spray record whose graze or harvest date is still ahead, or null. **Derived, not stored.** Read-only. Served on the paddock's own read and on lists (SPRAY_RECORD.md).
      - `task_id` string
      - `record_id` string: The SprayRecord id.
      - `safe_to_graze_on` string, date, nullable
      - `safe_to_harvest_on` string, date, nullable
      - `products` string[]
    - `boundary_captured_at` string, date-time, nullable
    - `boundary_source` 'traced' | 'grid' | 'gps' | 'imported', nullable: How the ring was captured — traced over imagery, placed on the grid with no imagery, walked with the phone's GPS, or read from a KML/shapefile. Null for a ring saved before provenance was recorded or by a caller that named no source. Written with the ring and cleared with it.
    - `boundary_captured_by` string, nullable: Id of the user who saved the ring, stamped server-side from the request's actor and never accepted from a client. Null when a machine token saved it, and null while the paddock has no ring.
    - `archived` boolean: An archived paddock leaves the map and the lists; its records stay on the property.
    - `archived_at` string, date-time, nullable
    - `block_id` string, uuid, nullable: The block the paddock sits in. Null in the home block.
    - `parcel_id` string, uuid, nullable: The cadastral parcel this paddock sits in. Null until one is attached to the property and chosen here.
    - `record_count` integer: Completed rows on this paddock — its diary.
    - `open_task_count` integer: Pending rows on this paddock.
    - `last_record_at` string, date-time, nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `property` object: Present when include=property

## Other responses

- `401`: Unauthorized
- `403`: Forbidden — a signed-in caller without access to the paddock's property, or an AI assistant
- `404`: Not Found — no such task, or a paddock a stranger may not know exists

## Changes

- **2026-10-31** `370fe2f3ed4f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/purplegrain/apis/purple-grain-api/changes/tasks/:id/to_paddock/get.md)

---

[API](https://skmtc.dev/purplegrain/apis/purple-grain-api.md) - [All operations](https://skmtc.dev/purplegrain/apis/purple-grain-api/llms.txt) - [OpenAPI document](https://skmtc.dev/purplegrain/apis/purple-grain-api/revisions/370fe2f3ed4f?raw)
