> ## Documentation Index
> Fetch the complete documentation index at: https://help.polygon-one.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Parzelle erstellen

> Create a plot. Requires `plots:write`. A new plot starts with `analysisStatus: pending`; the deforestation analysis runs asynchronously — read the result later with `GET /api/plots/{id}`.

**Server-owned fields are ignored.** The request cannot set an analysis status, analysis or risk result, timestamps or image data.

**Idempotent retry.** If your company already has a plot with the same `name` and `country` (case and whitespace ignored), the same geometry and exactly the same set of `supplierArticleIds`, no second plot is created and no second analysis is run: the answer is again `201`, with `deduplicated: true` and the stored plot in `created`. Non-empty `producerName`, `productionDateFrom`, `productionDateTo` and `species` from the request **are applied** to the stored plot where they differ (`updated: true`); empty or omitted values never clear a stored value. Name, country, geometry, links, size and commodity group of the stored plot stay unchanged. A fresh create answers `{ "created": …, "deduplicated": false }`.

**Linking.** Pass `supplierArticleIds` on creation, or create the plot first and link it with `PATCH /api/plots/{id}`. Supplier-article ids are in `supplierArticles[].id` of `GET /api/suppliers` and `GET /api/suppliers/{id}`.



## OpenAPI

````yaml POST /api/plots
openapi: 3.1.0
info:
  title: Polygon One Compliance API
  description: >-
    API for integrating ERP systems with the Polygon One EUDR Compliance
    Platform. Allows management of Articles, Suppliers, Orders, and Due
    Diligence Statements (DDS). PPWR packaging master data, the SKU quantity
    feed and Mengenmeldung reports are covered by the PPWR groups.
  version: 1.0.0
servers:
  - url: https://app.polygon-one.com
    description: Production Server
security:
  - bearerAuth: []
paths:
  /api/plots:
    post:
      summary: Create Plot
      description: >-
        Create a plot. Requires `plots:write`. A new plot starts with
        `analysisStatus: pending`; the deforestation analysis runs
        asynchronously — read the result later with `GET /api/plots/{id}`.


        **Server-owned fields are ignored.** The request cannot set an analysis
        status, analysis or risk result, timestamps or image data.


        **Idempotent retry.** If your company already has a plot with the same
        `name` and `country` (case and whitespace ignored), the same geometry
        and exactly the same set of `supplierArticleIds`, no second plot is
        created and no second analysis is run: the answer is again `201`, with
        `deduplicated: true` and the stored plot in `created`. Non-empty
        `producerName`, `productionDateFrom`, `productionDateTo` and `species`
        from the request **are applied** to the stored plot where they differ
        (`updated: true`); empty or omitted values never clear a stored value.
        Name, country, geometry, links, size and commodity group of the stored
        plot stay unchanged. A fresh create answers `{ "created": …,
        "deduplicated": false }`.


        **Linking.** Pass `supplierArticleIds` on creation, or create the plot
        first and link it with `PATCH /api/plots/{id}`. Supplier-article ids are
        in `supplierArticles[].id` of `GET /api/suppliers` and `GET
        /api/suppliers/{id}`.
      operationId: createPlot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePlotInput'
      responses:
        '201':
          description: >-
            Plot created, or an identical plot already existed (see
            `deduplicated`)
          content:
            application/json:
              schema:
                type: object
                properties:
                  created:
                    $ref: '#/components/schemas/Plot'
                  deduplicated:
                    type: boolean
                    description: >-
                      `false`: a new plot was created and its analysis queued.
                      `true`: an identical plot already existed; `created` is
                      the stored plot and no second plot or analysis run was
                      created.
                  updated:
                    type: boolean
                    description: >-
                      Only when `deduplicated` is `true`: whether non-empty
                      `producerName`, `productionDateFrom`, `productionDateTo`
                      or `species` from the request were applied to the stored
                      plot.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: >-
            API key lacks `plots:write`, or one or more `supplierArticleIds` do
            not belong to your company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    CreatePlotInput:
      type: object
      description: >-
        Fields read from the request body. Anything else — including
        server-owned fields such as `id`, `analysisStatus`, `analysisResult`,
        `deforestationRiskResult`, `forestPercentage`, `isDegraded`,
        `imageWidth`, `imageHeight`, `pixelCoords`, `createdAt` and `updatedAt`
        — is ignored.
      properties:
        name:
          type: string
          description: >-
            Plot name. Part of the duplicate check (case and
            surrounding/multiple whitespace are ignored).
        country:
          type: string
          description: >-
            Country of production, ISO 3166-1 alpha-2 (e.g. `BR`). Part of the
            duplicate check.
        geojson:
          type: object
          description: >-
            Plot geometry as GeoJSON: a Feature or a bare Geometry (`Polygon`,
            `MultiPolygon`, `Point`, …) in WGS84 longitude/latitude. Coordinates
            outside longitude ±180 / latitude ±90 are rejected with `400`, as is
            a geometry above the intake limits. A point is only accepted up to 4
            ha (20,000 ha for `cattle`) when `size` is given; above that EUDR
            requires a polygon. Part of the duplicate check.
        size:
          type: number
          minimum: 0
          description: Area in hectares. Must be a finite number ≥ 0, otherwise `400`.
        commodityGroup:
          $ref: '#/components/schemas/CommodityGroup'
        species:
          type: array
          maxItems: 500
          items:
            $ref: '#/components/schemas/PlotSpecies'
          description: >-
            Tree species. Each entry needs both a common and a scientific name,
            otherwise `400`. Required (at least one scientific name) when
            `commodityGroup` is `wood`.
        scientificName:
          type: string
          description: >-
            Legacy single-species shorthand, used only when `species` is empty.
            Prefer `species`.
        producerName:
          type: string
          description: Name of the producer.
        productionDateFrom:
          type: string
          format: date
          description: Start of the production period (`YYYY-MM-DD`).
        productionDateTo:
          type: string
          format: date
          description: End of the production period (`YYYY-MM-DD`).
        supplierArticleIds:
          type: array
          maxItems: 5000
          items:
            type: string
            format: uuid
          description: >-
            Supplier articles to link the plot to on creation (optional;
            duplicates are collapsed). Every id must belong to your company,
            otherwise `403`. Part of the duplicate check: the same plot with a
            different set of links is a new plot. If `commodityGroup` is missing
            or `non_relevant`, it is derived from the linked articles.
      example:
        name: Fazenda Boa Vista – Parzelle 3
        country: BR
        commodityGroup: coffee
        size: 2.4
        producerName: Fazenda Boa Vista Ltda.
        productionDateFrom: '2026-01-01'
        productionDateTo: '2026-06-30'
        geojson:
          type: Polygon
          coordinates:
            - - - -47.0601
                - -21.1802
              - - -47.0589
                - -21.1802
              - - -47.0589
                - -21.1815
              - - -47.0601
                - -21.1815
              - - -47.0601
                - -21.1802
    Plot:
      type: object
      description: >-
        A single plot as returned to an API key. The full analysis payload
        (`analysisResult`) and the image-space fields (`pixelCoords`,
        `imageWidth`, `imageHeight`) are not part of the API response.
      properties:
        id:
          type: string
          format: uuid
        companyId:
          type: string
          format: uuid
        createdByUserId:
          type: string
          format: uuid
        name:
          type: string
        country:
          type: string
          description: Country of production (ISO 3166-1 alpha-2, e.g. `BR`).
        size:
          type: number
          description: Area in hectares. `0` when no size is stored.
        requiresAreaPlausibilityReview:
          type: boolean
          description: >-
            The declared size and the geometry do not fit together and need a
            manual review.
        species:
          type: array
          items:
            $ref: '#/components/schemas/PlotSpecies'
        commodityGroup:
          $ref: '#/components/schemas/CommodityGroup'
        producerName:
          type: string
        productionDateFrom:
          type: string
          format: date-time
        productionDateTo:
          type: string
          format: date-time
        analysisStatus:
          type: string
          enum:
            - pending
            - in_progress
            - completed
            - failed
            - exempt
            - skipped
          description: >-
            State of the geospatial deforestation analysis. A new plot starts at
            `pending`; the analysis runs asynchronously.
        deforestationRiskResult:
          type:
            - integer
            - 'null'
          enum:
            - 0
            - 1
            - 2
            - null
          description: >-
            Analysis result: `0` = low, `1` = high, `2` = moderate risk. `null`
            while no result is available.
        forestPercentage:
          type: number
        isDegraded:
          type:
            - boolean
            - 'null'
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
        geojson:
          type: object
          description: >-
            The plot geometry as GeoJSON (a Feature or a bare Geometry, WGS84
            longitude/latitude).
        supplierArticleIds:
          type: array
          items:
            type: string
            format: uuid
          description: Supplier articles (supplier ↔ article links) this plot is linked to.
        importSourceFormat:
          type: string
          description: Source format when the plot came from a file import.
        importPrecisionClass:
          type: string
          description: Coordinate-precision class determined at import.
        importPrecisionDigits:
          type: number
          description: Decimal digits of the imported coordinates.
        importPrecisionAcceptedAt:
          type: string
          description: When a low import precision was accepted.
          format: date-time
        importPrecisionAcceptedBy:
          type: string
          description: User who accepted a low import precision.
          format: uuid
        importPrecisionAcceptedByName:
          type: string
          description: Name of that user.
        importOriginalCentroidLng:
          type: number
          description: Centroid longitude of the geometry as imported.
        importOriginalCentroidLat:
          type: number
          description: Centroid latitude of the geometry as imported.
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        details:
          description: Additional error details (e.g. validation issues)
      required:
        - error
    CommodityGroup:
      type: string
      enum:
        - cattle
        - cocoa
        - coffee
        - oil_palm
        - rubber
        - soya
        - wood
        - non_relevant
      description: >-
        EUDR-regulated commodity groups. `non_relevant` = article is not covered
        by EUDR.
    PlotSpecies:
      type: object
      required:
        - commonName
        - scientificName
      properties:
        commonName:
          type: string
          maxLength: 200
          description: Common (trade) name, e.g. `Oak`.
        scientificName:
          type: string
          maxLength: 200
          description: Scientific (Latin) name, e.g. `Quercus robur`.
  responses:
    BadRequest:
      description: Invalid request data
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        API key generated in Settings > API Keys. Include as `Authorization:
        Bearer <key>`.

````