> ## 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.

# Parzellengeometrie prüfen

> Dry run of `POST /api/v1/plots`: the same input, the same checks and the same geometry quality pipeline — **nothing is created or changed**, no analysis runs. Requires `plots:read`. Use it to check a geometry before you create the plot.

The answer is `200` whether the plot would be accepted or not: `valid` says which. `valid: false` carries the `code` create would answer in `errors`; `geometry` and `measuredAreaHa` are then `null`. `valid: true` carries the geometry exactly as create would store it, its geodesic area in hectares (`null` for a point) and the same `warnings`. Only a body that is not valid JSON is a `400`.

A geometry with more than 20,000 vertices is `valid: false` with `plot_geometry_too_many_vertices`, as on create.

`commodityGroup`, `size` and `species` are optional here and checked only when sent. Not checked (create checks them): whether the `supplierArticleIds` belong to your company, and whether an identical plot already exists.



## OpenAPI

````yaml POST /api/v1/plots/validate
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/v1/plots/validate:
    post:
      summary: Validate Plot Geometry
      description: >-
        Dry run of `POST /api/v1/plots`: the same input, the same checks and the
        same geometry quality pipeline — **nothing is created or changed**, no
        analysis runs. Requires `plots:read`. Use it to check a geometry before
        you create the plot.


        The answer is `200` whether the plot would be accepted or not: `valid`
        says which. `valid: false` carries the `code` create would answer in
        `errors`; `geometry` and `measuredAreaHa` are then `null`. `valid: true`
        carries the geometry exactly as create would store it, its geodesic area
        in hectares (`null` for a point) and the same `warnings`. Only a body
        that is not valid JSON is a `400`.


        A geometry with more than 20,000 vertices is `valid: false` with
        `plot_geometry_too_many_vertices`, as on create.


        `commodityGroup`, `size` and `species` are optional here and checked
        only when sent. Not checked (create checks them): whether the
        `supplierArticleIds` belong to your company, and whether an identical
        plot already exists.
      operationId: validatePlot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePlotInput'
      responses:
        '200':
          description: The verdict create would give; nothing written
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlotValidation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: API key lacks `plots:read`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    CreatePlotInput:
      type: object
      required:
        - geojson
      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: >-
            Required. Plot geometry as GeoJSON: a Feature or a bare Geometry of
            type `Polygon`, `MultiPolygon`, `Point` or `MultiPoint`, in WGS84
            longitude/latitude. A missing geometry is `400` with `code:
            plot_geometry_missing`; any other type (`FeatureCollection`,
            `GeometryCollection`, `LineString`, `MultiLineString`, …) is `400`
            with `code: plot_geometry_type_unsupported` — one request creates
            one plot, so send each feature of a collection as its own request.
            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. Without
            links, `commodityGroup` is required (`400`, `code:
            plot_commodity_group_required`); a value outside the enum is `400`
            with `code: plot_commodity_group_invalid`.
      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
    PlotValidation:
      type: object
      properties:
        valid:
          type: boolean
          description: >-
            `true` when create would accept the plot; `false` when it would
            answer `400`.
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - code
              - message
          description: >-
            Why create would refuse: `code` (the `code` create answers, e.g.
            `plot_geometry_invalid`,
            `plot_geometry_self_intersection_unrepairable`,
            `plot_geometry_too_many_vertices`, `plot_precision_too_low`) and
            `message`. `[]` when `valid` is `true`.
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/PlotGeometryWarning'
          description: What the geometry quality checks changed or noted, as on create.
        precision:
          type:
            - object
            - 'null'
          properties:
            digits:
              type:
                - number
                - 'null'
            class:
              type: string
              enum:
                - ok
                - borderline
                - low
                - reject
          required:
            - digits
            - class
          description: >-
            `digits`: the fewest decimal places of any longitude/latitude,
            counted as written; `class`: `ok` (6 or more), `borderline` (5),
            `low` (4) or `reject` (3 or fewer). `null` when a check refused the
            request before the precision was measured.
        geometry:
          type:
            - object
            - 'null'
          additionalProperties: {}
          description: >-
            The geometry create would store (rounded, cleaned and repaired).
            `null` when `valid` is `false`.
        measuredAreaHa:
          type:
            - number
            - 'null'
          description: >-
            Geodesic area of `geometry` in hectares, rounded to 2 decimals.
            `null` for a point or when `valid` is `false`.
      required:
        - valid
        - errors
        - warnings
        - precision
        - geometry
        - measuredAreaHa
      description: >-
        The verdict `POST /api/v1/plots` would give for the same request.
        Nothing is written.
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: >-
            Human-readable message, or a stable machine key on the batch and
            PPWR doors.
        details:
          description: Additional error details (e.g. validation issues).
        warnings:
          description: Overridable warnings (409 only).
      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
      properties:
        commonName:
          type: string
          minLength: 1
          maxLength: 200
          description: Common (trade) name, e.g. `Oak`.
        scientificName:
          type: string
          minLength: 1
          maxLength: 200
          description: Scientific (Latin) name, e.g. `Quercus robur`.
      required:
        - commonName
        - scientificName
    PlotGeometryWarning:
      type: object
      properties:
        code:
          type: string
          description: >-
            Stable machine code. `POLYGON_HOLES_REMOVED`: interior rings were
            removed, the excluded area is now part of the plot.
            `POLYGON_SELF_INTERSECTION_REPAIRED`: a self-intersecting ring was
            repaired (area change at most 2 %; may become a `MultiPolygon`).
            `COORDINATE_PRECISION_BORDERLINE`: 5 decimal places.
            `COORDINATE_PRECISION_LOW`: 4 decimal places. New codes may be
            added.
      required:
        - code
      description: One change or note of the geometry quality checks.
  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>`.

````