# Looking for guidance on farmOS crop planning & conventions (farmer-led project)

**URL:** https://farmos.discourse.group/t/looking-for-guidance-on-farmos-crop-planning-conventions-farmer-led-project/2466
**Category:** Community
**Created:** [January 31, 2026, 2:44am UTC](https://farmos.discourse.group/t/looking-for-guidance-on-farmos-crop-planning-conventions-farmer-led-project/2466 "2026-01-31T02:44:31Z")
**Posts on this page:** 1
**Showing post:** 4

<div class="post-metadata">

### Author: ![mstenta](https://yyz2.discourse-cdn.com/free1/user_avatar/farmos.discourse.group/mstenta/32/4_2.png) [@mstenta](https://farmos.discourse.group/u/mstenta)
#### Post date: [February 3, 2026, 2:27pm UTC](https://farmos.discourse.group/t/looking-for-guidance-on-farmos-crop-planning-conventions-farmer-led-project/2466/4 "2026-02-03T14:27:49Z")

</div>

> [@MiddleWorld](#):
>
> Is crop planning currently intended to be API-addressable, or is it still primarily designed as an internal UI workflow?

If you’re talking about the [farmOS Crop Plan](https://www.drupal.org/project/farm_crop_plan) module, specifically, then I wonder if you are running into this known issue:

> <https://github.com/farmOS/farmOS/issues/875>
>
> \*\*Describe the bug\*\*
> I receive 403 errors when attempting to create new PlanRec…ords via the API, even for Plans which I have update access to.
> 
> \*\*To Reproduce\*\*
> Steps to reproduce the behavior:
> 1. Try to POST to create a plan\_record for a plan of any type
> 
> \*\*Expected behavior\*\*
> I expect a 201 successful creation response, but instead receive a 403 error.
> 
> \*\*Desktop (please complete the following information):\*\*
> - Windows 11 + WSL2
> - Chrome, but I also see this issue in Postman
> - Chrome version 128.0.6613.138, farmOS version 3.2.3
> 
> \*\*Additional context\*\*
> Here's the body of the request that's failing (this specific body is for a custom plan and plan record type but I get this error for plans and plan records of any type; the plan id is for an active plan that I can successfully PATCH to):
> \`\`\`
> {
> "data": {
> "type": "plan\_record--sample\_site",
> "attributes": {
> "site\_id": "LARA.24.RP.01",
> "indicators": \[
> "SOC,Soil organic carbon (SOC)",
> "BD,Bulk density (BD)"
> \]
> },
> "relationships": {
> "plan": {
> "data": {
> "type": "plan--ag\_c\_project",
> "id": "cdda83eb-a759-42ed-b8db-bb773f27eab4"
> }
> },
> "site": {
> "data": {
> "type": "asset--land",
> "id": "48108a58-008d-4927-bfc3-25fcb27fea12"
> }
> }
> }
> }
> }
> \`\`\`

Tl;dr: it isn’t currently possible to create `plan_record` entities via the API.

This thread has some good general information about the crop plan data model, as well as a link to that issue, and a temporary workaround that you can use to patch the issue for now. We still need to come up with a proper long-term fix.

> [@Cannot find plant assets from crop plan API](https://farmos.discourse.group/t/cannot-find-plant-assets-from-crop-plan-api/2311):
>
> Hello, I am experimenting on crop plans and hoping to programmatically create/add/edit crop plans through an API. Here is the screenshot of the crop plan I manually created from UI. . I can get the plan information by /api/plan/crop endpoint. However, when I requested details on a specific plan by api/plan/crop/{plan\_uuid}, I could not see information about plant assets. The return from API is below { "jsonapi": { "version": "1.0", "meta": { "links": { "self":…

> [@MiddleWorld](#):
>
> at the moment we can’t see a clear way to reliably send data into or out of crop planning through the API.

I’m curious what issues you ran into with “reading” data… that should work normally. But it is important to understand how the crop plan models things. It uses a `plan` entity (of bundle `crop`) to represent the plan itself, and then it uses `plan_record` entities (of bundle `crop_planting`) that connects the `plan` to individual `asset` entities (of bundle `plant`). The `plan_record` also contains some metadata about that relationship, which is specific to the plan, including planned seeding date (`seeding_date`), expected days to transplant (`transplant_days`), expected days to maturity (`maturity_days`), and expected harvest window (`harvest_days`). These represent the “planned” or “expected” lifecycle of each `plant` asset… but the `plant` asset itself, and the logs associated with it, represent the “actual”.

More information about the crop plan module in general, if you haven’t seen it, is here:

> [@farmOS Crop Plan module v3 alpha release](https://farmos.discourse.group/t/farmos-crop-plan-module-v3-alpha-release/1934):
>
> I’m pleased to announce that we just released the first “alpha” version of the farmOS v3 Crop Plan module! tada Read the release notes in that link for more information and to understand what to expect (and what not to expect sweat_smile). It’s safe to install this and start playing around with it, but it’s important to understand that this is still just a proof-of-concept. We have the basic data architecture nailed down (but there’s more to do!) an…

---

_[View the full topic](https://farmos.discourse.group/t/looking-for-guidance-on-farmos-crop-planning-conventions-farmer-led-project/2466)._
