Cintoo Crop API

The Crop API from Cintoo — 3 operation(s) for crop.

Operations 6

GET /api/2/accounts/{accountRef}/projects/{projectRef}/crops Get Crops #
POST /api/2/accounts/{accountRef}/projects/{projectRef}/crops Create a crop #
GET /api/2/accounts/{accountRef}/projects/{projectRef}/crops/{cropRef} Get Crop #
PUT /api/2/accounts/{accountRef}/projects/{projectRef}/crops/{cropRef} Update Crop #
DELETE /api/2/accounts/{accountRef}/projects/{projectRef}/crops/{cropRef} Delete Crop #
POST /api/2/accounts/{accountRef}/projects/{projectRef}/crops/{cropRef}/cover Get a signed URL for crop cover file upload #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cintoo-crop-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cintoo-crop-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2.0.0
  title: Cintoo Open Crop API
  description: 'Cintoo Open API 1.x documentation: https://aec.cintoo.com/api


    BETA: API v2 endpoints tagged "BETA" are available in beta-version, meaning that changes may be done later on.'
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    name: API Support
    email: support@cintoo.com
  x-logo:
    url: ./assets/logo_api.svg
    altText: Cintoo API
servers:
- url: https://aec.cintoo.com
security:
- oauth2: []
tags:
- name: Crop
paths:
  /api/2/accounts/{accountRef}/projects/{projectRef}/crops:
    get:
      summary: Get Crops
      operationId: getCrops
      description: 'BETAGet all crops related to a project.


        Requires the permission `workzone:crops:read` on at least one work zone of the project.

        The crop returned are all crops on work zones the user has this permission.'
      tags:
      - Crop
      parameters:
      - $ref: '#/components/parameters/accountRef'
      - $ref: '#/components/parameters/projectRef'
      - $ref: '#/components/parameters/workzonesFilter'
      responses:
        '200':
          description: Content of each Crop inside the project you have access to
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Crop'
        4XX:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
      - lang: cURL
        source: "export TOKEN=...\nexport ACCOUNTUUID=...\nexport PROJECTUUID=...\n\ncurl --url \"https://aec.cintoo.com/api/2/accounts/$ACCOUNTUUID/projects/$PROJECTUUID/crops\" \\\n  --header \"Authorization: Bearer $TOKEN\"\n"
      - lang: Python
        source: "import requests\n\nhost = \"aec.cintoo.com\"\naccountUUID = \"...\"\nprojectUUID = \"...\"\ntoken = \"...\"\n\nresponse = requests.get(\n  \"https://%s/api/2/accounts/%s/projects/%s/crops\"\n    % (host, accountUUID, projectUUID),\n  headers = { \"Authorization\": \"Bearer %s\" % token}\n)\nprint(response.status_code)\nprint(response.json())\n"
      - lang: TypeScript
        source: "const host = \"aec.cintoo.com\";\nconst accountUUID = \"...\";\nconst projectUUID = \"...\";\nconst token = \"...\";\n\nconst url = `https://${host}/api/2/accounts/${accountUUID}/projects/${projectUUID}/crops`;\nconst res = await fetch(url, {\n  headers: {\n    \"Authorization\": `Bearer ${token}`,\n  },\n});\n\nconsole.log(res.status);\nconst data = await res.json();\nconsole.log(data);\n"
    post:
      summary: Create a crop
      operationId: createCrop
      description: 'BETACreate a crop


        Requires the permission `workzone:crops:write` on the work zone.'
      tags:
      - Crop
      parameters:
      - $ref: '#/components/parameters/accountRef'
      - $ref: '#/components/parameters/projectRef'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/cropCreate'
      responses:
        '201':
          description: The crop was created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Crop'
        4XX:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
      - lang: cURL
        source: "export TOKEN=...\nexport ACCOUNTUUID=...\nexport PROJECTUUID=...\nexport WORKZONEUUID=...\n\ncurl --request POST --url \"https://aec.cintoo.com/api/2/accounts/$ACCOUNTUUID/projects/$PROJECTUUID/crops\" \\\n  --header \"Authorization: Bearer $TOKEN\" \\\n  --header \"Content-Type: application/json\" \\\n  --data \"{\n    \\\"workzoneId\\\":\\\"$WORKZONEUUID\\\",\n    \\\"crop\\\":\\\"CropContent\\\",\n    \\\"actualCrop\\\":\\\"actualCropContent\\\",\n    \\\"rotation\\\":\\\"rotationContent\\\",\n    \\\"cameraType\\\":\\\"scan\\\",\n    \\\"cameraState\\\":\\\"cameraStateContent\\\",\n    \\\"scan\\\":\\\"scanContent\\\",\n    \\\"name\\\":\\\"cropName\\\"\n  }\"\n"
      - lang: Python
        source: "import requests\n\nhost = \"aec.cintoo.com\"\naccountUUID = \"...\"\nprojectUUID = \"...\"\nworkzoneUUID = \"\"\ntoken = \"...\"\n\nresponse = requests.post(\n  \"https://%s/api/2/accounts/%s/projects/%s/crops\"\n    % (host, accountUUID, projectUUID),\n  headers = { \"Authorization\": \"Bearer %s\" % token },\n  json = {\n    \"workzoneId\": workzoneUUID,\n    \"crop\": \"CropContent\",\n    \"actualCrop\": \"actualCropContent\",\n    \"rotation\": \"rotationContent\",\n    \"cameraType\": \"scan\",\n    \"cameraState\": \"cameraStateContent\",\n    \"scan\": \"scanContent\",\n    \"name\": \"cropName\"\n  }\n)\nprint(response.status_code)\nprint(response.json())\n"
      - lang: TypeScript
        source: "const host = \"aec.cintoo.com\";\nconst accountUUID = \"...\";\nconst projectUUID = \"...\";\nconst workzoneId = \"...\";\nconst token = \"...\";\n\nconst url = `https://${host}/api/2/accounts/${accountUUID}/projects/${projectUUID}/crops`;\nconst res = await fetch(url, {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": `Bearer ${token}`,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    workzoneId,\n    crop: \"CropContent\",\n    actualCrop: \"actualCropContent\",\n    rotation: \"rotationContent\",\n    cameraType: \"scan\",\n    cameraState: \"cameraStateContent\",\n    scan: \"scanContent\",\n    name: \"cropName\",\n  }),\n});\n\nconsole.log(res.status);\nconst data = await res.json();\nconsole.log(data);\n"
  /api/2/accounts/{accountRef}/projects/{projectRef}/crops/{cropRef}:
    get:
      summary: Get Crop
      operationId: getCrop
      description: 'BETAGet details about a specific crop, related to a project.


        Requires the permission `workzone:crops:read` on the work zone in which the crop has been created.'
      tags:
      - Crop
      parameters:
      - $ref: '#/components/parameters/accountRef'
      - $ref: '#/components/parameters/projectRef'
      - $ref: '#/components/parameters/cropRef'
      responses:
        '200':
          description: Content of Crop
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Crop'
        4XX:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
      - lang: cURL
        source: "export TOKEN=...\nexport ACCOUNTUUID=...\nexport PROJECTUUID=...\nexport CROPUUID=...\n\ncurl --url \"https://aec.cintoo.com/api/2/accounts/$ACCOUNTUUID/projects/$PROJECTUUID/crops/$CROPUUID\" \\\n  --header \"Authorization: Bearer $TOKEN\"\n"
      - lang: Python
        source: "import requests\n\nhost = \"aec.cintoo.com\"\naccountUUID = \"...\"\nprojectUUID = \"...\"\ncropUUID = \"...\"\ntoken = \"...\"\n\nresponse = requests.get(\n  \"https://%s/api/2/accounts/%s/projects/%s/crops/%s\"\n    % (host, accountUUID, projectUUID, cropUUID),\n  headers = { \"Authorization\": \"Bearer %s\" % token}\n)\nprint(response.status_code)\nprint(response.json())\n"
      - lang: TypeScript
        source: "const host = \"aec.cintoo.com\";\nconst accountUUID = \"...\";\nconst projectUUID = \"...\";\nconst cropUUID = \"...\";\nconst token = \"...\";\n\nconst url = `https://${host}/api/2/accounts/${accountUUID}/projects/${projectUUID}/crops/${cropUUID}`;\nconst res = await fetch(url, {\n  headers: {\n    \"Authorization\": `Bearer ${token}`,\n  },\n});\n\nconsole.log(res.status);\nconst data = await res.json();\nconsole.log(data);\n"
    put:
      summary: Update Crop
      operationId: putCrop
      description: 'BETAUpdate a Crop. This can also be a work zone move by providing new workzoneId in which you have required permission.

        Note that missing fields, even optionals, are considered as null (useful for removing fields).


        Requires the permission `workzone:crops:write` in the work zone in which the crop belong to, and in case of crop move, also in the target work zone.'
      tags:
      - Crop
      parameters:
      - $ref: '#/components/parameters/accountRef'
      - $ref: '#/components/parameters/projectRef'
      - $ref: '#/components/parameters/cropRef'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/cropUpdate'
      responses:
        '200':
          description: Details of updated crop
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Crop'
        4XX:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
      - lang: cURL
        source: "export TOKEN=...\nexport ACCOUNTUUID=...\nexport PROJECTUUID=...\nexport CROPUUID=...\nexport WORKZONEUUID=...\n\ncurl --request PUT --url \"https://aec.cintoo.com/api/2/accounts/$ACCOUNTUUID/projects/$PROJECTUUID/crops/$CROPUUID\" \\\n  --header \"Authorization: Bearer $TOKEN\" \\\n  --header \"Content-Type: application/json\" \\\n  --data \"{\n    \\\"workzoneId\\\":\\\"$WORKZONEUUID\\\",\n    \\\"crop\\\":\\\"CropContent\\\",\n    \\\"actualCrop\\\":\\\"actualCropContent\\\",\n    \\\"rotation\\\":\\\"rotationContent\\\",\n    \\\"cameraType\\\":\\\"scan\\\",\n    \\\"cameraState\\\":\\\"cameraStateContent\\\",\n    \\\"scan\\\":\\\"scanContent\\\",\n    \\\"name\\\":\\\"cropName\\\"\n  }\"\n"
      - lang: Python
        source: "import requests\n\nhost = \"aec.cintoo.com\"\naccountUUID = \"...\"\nprojectUUID = \"...\"\ncropUUID = \"...\"\nworkzoneUUID = \"\"\ntoken = \"...\"\n\nresponse = requests.put(\n  \"https://%s/api/2/accounts/%s/projects/%s/crops/%s\"\n    % (host, accountUUID, projectUUID, cropUUID),\n  headers = { \"Authorization\": \"Bearer %s\" % token },\n  json = {\n    \"workzoneId\": workzoneUUID,\n    \"crop\": \"CropContent\",\n    \"actualCrop\": \"actualCropContent\",\n    \"rotation\": \"rotationContent\",\n    \"cameraType\": \"scan\",\n    \"cameraState\": \"cameraStateContent\",\n    \"scan\": \"scanContent\",\n    \"name\": \"cropName\"\n  }\n)\nprint(response.status_code)\nprint(response.json())\n"
      - lang: TypeScript
        source: "const host = \"aec.cintoo.com\";\nconst accountUUID = \"...\";\nconst projectUUID = \"...\";\nconst cropUUID = \"...\";\nconst workzoneUUID = \"...\";\nconst token = \"...\";\n\nconst url = `https://${host}/api/2/accounts/${accountUUID}/projects/${projectUUID}/crops/${cropUUID}`;\nconst res = await fetch(url, {\n  method: \"PUT\",\n  headers: {\n    \"Authorization\": `Bearer ${token}`,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    workzoneId: workzoneUUID,\n    crop: \"CropContent\",\n    actualCrop: \"actualCropContent\",\n    rotation: \"rotationContent\",\n    cameraType: \"scan\",\n    cameraState: \"cameraStateContent\",\n    scan: \"scanContent\",\n    name: \"cropName\",\n  }),\n});\n\nconsole.log(res.status);\nconst data = await res.json();\nconsole.log(data);\n"
    delete:
      summary: Delete Crop
      operationId: deleteCrop
      description: 'BETADelete a given Crop.


        Requires the permission `workzone:crops:write` in the work zone in which the crop belongs to.'
      tags:
      - Crop
      parameters:
      - $ref: '#/components/parameters/accountRef'
      - $ref: '#/components/parameters/projectRef'
      - $ref: '#/components/parameters/cropRef'
      responses:
        '204':
          description: The Crop has been successfully deleted
        4XX:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
      - lang: cURL
        source: "export TOKEN=...\nexport ACCOUNTUUID=...\nexport PROJECTUUID=...\nexport CROPUUID=...\n\ncurl --request DELETE --url \"https://aec.cintoo.com/api/2/accounts/$ACCOUNTUUID/projects/$PROJECTUUID/crops/$CROPUUID\" \\\n  --header \"Authorization: Bearer $TOKEN\"\n"
      - lang: Python
        source: "import requests\n\nhost = \"aec.cintoo.com\"\naccountUUID = \"...\"\nprojectUUID = \"...\"\ncropUUID = \"...\"\ntoken = \"...\"\n\nresponse = requests.delete(\n  \"https://%s/api/2/accounts/%s/projects/%s/crops/%s\"\n    % (host, accountUUID, projectUUID, cropUUID),\n  headers = { \"Authorization\": \"Bearer %s\" % token}\n)\nprint(response.status_code)\n"
      - lang: TypeScript
        source: "const host = \"aec.cintoo.com\";\nconst accountUUID = \"...\";\nconst projectUUID = \"...\";\nconst cropUUID = \"...\";\nconst token = \"...\";\n\nconst url = `https://${host}/api/2/accounts/${accountUUID}/projects/${projectUUID}/crops/${cropUUID}`;\nconst res = await fetch(url, {\n  method: \"DELETE\",\n  headers: {\n    \"Authorization\": `Bearer ${token}`,\n  },\n});\n\nconsole.log(res.status);\nif (res.status !== 204) {\n  const data = await res.json();\n  console.log(data);\n}\n"
  /api/2/accounts/{accountRef}/projects/{projectRef}/crops/{cropRef}/cover:
    post:
      summary: Get a signed URL for crop cover file upload
      operationId: signCropCoverURL
      description: 'BETA- Get a signed URL for crop cover file upload


        Requires the permission `workzone:crops:write`.


        After this call, use the `url`s from the response to upload the crop cover file.


        Required headers to push the files

        * `Content-MD5: xxx` with `xxx` being a base 64 encode of the md5sum in binary format.\

        Example: `MD5SUM="$(openssl md5 -binary < "$FILENAME" | base64)"`

        * `Cache-Control: max-age=2592000`

        * `x-ms-blob-type: BlockBlob` mandatory if the storage type is Azure. \

        Note: always adding the `x-ms-blob-type` could be a good idea as Aws ignores it anyway.'
      tags:
      - Crop
      parameters:
      - $ref: '#/components/parameters/accountRef'
      - $ref: '#/components/parameters/projectRef'
      - $ref: '#/components/parameters/cropRef'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              - extension
              - size
              - md5
              properties:
                name:
                  type: string
                extension:
                  type: string
                  enum:
                  - png
                  - jpg
                  - jpeg
                size:
                  type: integer
                  format: int64
                  description: Size of the file (bytes)
                  minimum: 1
                  maximum: 10485760
                md5:
                  type: string
                  description: The md5 sum-check of the file
      responses:
        '200':
          description: The signing process succeeded
          content:
            application/json:
              schema:
                type: object
                required:
                - provider
                - expiresIn
                - file
                properties:
                  provider:
                    type: string
                  expiresIn:
                    type: integer
                    description: After this amount of seconds, the upload link won't be available anymore
                  file:
                    type: object
                    required:
                    - name
                    - extension
                    - size
                    - md5
                    - url
                    properties:
                      name:
                        type: string
                      extension:
                        type: string
                      size:
                        type: integer
                        format: int64
                        description: Size of the file (bytes)
                      md5:
                        type: string
                        description: The md5 sum-check of the file
                      url:
                        type: string
                        description: the url to which upload the file
        4XX:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
      - lang: cURL
        source: "export TOKEN=...\nexport ACCOUNTID=...\nexport PROJECTID=...\nexport CROPID=...\n\ncurl --request POST --url \"https://aec.cintoo.com/api/2/accounts/$ACCOUNTID/projects/$PROJECTID/crops/$CROPID/cover\" \\\n  --header \"Authorization: Bearer $TOKEN\" \\\n  --header \"Content-Type: application/json\" \\\n  --data '{\n      \"name\":\"cover.png\",\n      \"extension\":\"png\",\n      \"size\":448459,\n      \"md5\":\"da04845eaedb7db7f5b6f32c4076821f\"\n    }'\n\n# -- UPLOAD OF THE FILE --\n\n# the url received in the body of the response\nexport URL=...\nexport FILENAME=...\n\nMD5SUM=\"$(openssl md5 -binary < \"$FILENAME\" | base64)\"\ncurl --request PUT --url \"$URL\" --header \"Content-Type: application/json\" -T \"$FILENAME\" -H \"Content-MD5: ${MD5SUM}\" -H \"Cache-Control: max-age=2592000\" -H \"x-ms-blob-type: BlockBlob\" -i\n"
      - lang: Python
        source: "import requests\n\nhost = \"aec.cintoo.com\"\naccountID = \"...\"\nprojectID = \"...\"\ncropID = \"...\"\ntoken = \"...\"\n\nresponse = requests.post(\n  \"https://%s/api/2/accounts/%s/projects/%s/crops/%s/cover\"\n    % (host, accountID, projectID, cropID),\n  headers = { \"Authorization\": \"Bearer %s\" % token },\n  json = {\n      \"name\":\"tumbleweed.png\",\n      \"extension\":\"png\",\n      \"size\":448459,\n      \"md5\":\"da04845eaedb7db7f5b6f32c4076821f\"\n    }\n)\nprint(response.status_code)\nprint(response.json())\n\nimport base64\nimport hashlib\n\n# the url received in the body of the response\nexport url=...\nexport filename=...\n\nhash_md5 = hashlib.md5()\nwith open(filename, \"rb\") as fin:\n    for chunk in iter(lambda: fin.read(4096), b\"\"):\n        hash_md5.update(chunk)\ndigest = hash_md5.digest()\nmd5 = base64.b64encode(digest).decode(\"utf-8\")\n\nheaders = {\n  \"Content-MD5\": md5,\n  \"Cache-Control\": \"max-age=2592000\",\n  \"x-ms-blob-type\": \"BlockBlob\", # mandatory if storage type is azure\n}\ndata = open(filename, \"rb\")\nr = requests.put(url, data=data, headers=headers)\nprint(r.status_code)\n"
      - lang: TypeScript
        source: "const host = \"aec.cintoo.com\";\nconst accountId = \"...\";\nconst projectId = \"...\";\nconst cropId = \"...\";\nconst token = \"...\";\n\nconst url = `https://${host}/api/2/accounts/${accountId}/projects/${projectId}/crops/${cropId}/cover`;\nconst res = await fetch(url, {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": `Bearer ${token}`,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify(\n    {\n          \"name\":\"cover.png\",\n          \"extension\":\"png\",\n          \"size\":448459,\n          \"md5\":\"da04845eaedb7db7f5b6f32c4076821f\",\n        }\n  ),\n});\n\nconsole.log(res.status);\nconst data = await res.json();\nconsole.log(data);\n"
components:
  schemas:
    CropUrn:
      type: string
      description: '"urn:cintoo:crop:" followed by an UUIDv4

        '
    WorkzoneUrn:
      type: string
      pattern: ^urn:cintoo:workzone:[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      description: '"urn:cintoo:workzone:" followed by an UUIDv4

        '
    AccountUrn:
      type: string
      description: '"urn:cintoo:account:" followed by an UUIDv4

        '
    DateTime:
      type: string
      format: date-time
      description: 'The date-time notation as defined by RFC 3339, section 5.6 (ex: 2017-08-18T12:41:31Z)'
      example: '2017-08-18T12:41:31Z'
    ProjectUrn:
      type: string
      description: '"urn:cintoo:project:" followed by an UUIDv4

        '
    UserUrn:
      type: string
      description: '"urn:cintoo:user:" followed by an UUIDv4

        '
    AccountId:
      allOf:
      - $ref: '#/components/schemas/Uuid'
      example: 8196e320-8a4d-4d29-b0a9-077cd7ed3368
    WorkzoneId:
      allOf:
      - $ref: '#/components/schemas/Uuid'
      example: 8196e320-8a4d-4d29-b0a9-077cd7ed3368
    BlobName:
      type: string
      description: "A `BlobName`: the actual filename of the file in the blob storage.\n\nTo retrieve a blob, two methods are available:\n- using the unitary endpoint [Download a blob](#tag/Project/operation/getBlob), which will automatically forward\n  to the final URL, which is a pre-signed URL, expiring after 3 hours by default.\n- using the bulk endpoint [Get pre-signed urls for multiple blobs](#tag/Project/operation/getBlobs), which will\n  return the list of pre-signed URLs.\n\nWhile the first option is the easiest, as it forwards automatically to the final URL transparently,\nthe second option should be preferred as much as possible to improve performances.\n"
    CropId:
      allOf:
      - $ref: '#/components/schemas/Uuid'
      example: 8196e320-8a4d-4d29-b0a9-077cd7ed3368
    cropUpdate:
      type: object
      required:
      - workzoneId
      - name
      - crop
      - actualCrop
      - rotation
      - cameraType
      - cameraState
      - scan
      properties:
        workzoneId:
          $ref: '#/components/schemas/WorkzoneRef'
        name:
          type: string
        crop:
          type: string
          description: Description of the plans defining the bounding box of the crop in the scene
        actualCrop:
          type: string
          description: Description of the plans defining the bounding box of the crop related to the camera
        rotation:
          type: string
          description: Description about the rotation of the crop inside the camera
        layers:
          type:
          - string
          - 'null'
          description: Scans related to the crop
        cameraType:
          type: string
          description: Details about the camera (overview, ground, scan, arcrotate)
        cameraState:
          type: string
          description: Description of source and direction of the camera of the scene
        scan:
          type: string
          description: root scan for the crop
        thumbnailBlobName:
          type:
          - string
          - 'null'
          allOf:
          - $ref: '#/components/schemas/BlobName'
        oview:
          type:
          - number
          - 'null'
        settings:
          type:
          - string
          - 'null'
    Crop:
      type: object
      required:
      - id
      - type
      - workzoneId
      - name
      - crop
      - actualCrop
      - rotation
      - layers
      - cameraType
      - cameraState
      - scan
      - thumbnailBlobName
      - thumbnailUrl
      - oview
      - settings
      - createdBy
      - createdAt
      - updatedBy
      - updatedAt
      x-tags:
      - Crop
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/CropUrn'
        type:
          type: string
          enum:
          - crop
        workzoneId:
          $ref: '#/components/schemas/WorkzoneUrn'
        name:
          type: string
        crop:
          type: string
          description: Description of the plans defining the bounding box of the crop in the scene
        actualCrop:
          type: string
          description: Description of the plans defining the bounding box of the crop related to the camera
        rotation:
          type: string
          description: Description about the rotation of the crop inside the camera
        layers:
          type:
          - string
          - 'null'
          description: Scans related to the crop
        cameraType:
          type: string
          description: Details about the camera (overview, ground, scan, arcrotate)
        cameraState:
          type: string
          description: Description of source and direction of the camera of the scene
        scan:
          type: string
          description: root scan for the crop
        thumbnailBlobName:
          type:
          - string
          - 'null'
          allOf:
          - $ref: '#/components/schemas/BlobName'
        thumbnailUrl:
          type:
          - string
          - 'null'
          allOf:
          - $ref: '#/components/schemas/Url'
        oview:
          type:
          - integer
          - 'null'
        settings:
          type:
          - string
          - 'null'
        createdBy:
          $ref: '#/components/schemas/UserUrn'
        createdAt:
          $ref: '#/components/schemas/DateTime'
        updatedBy:
          $ref: '#/components/schemas/UserUrn'
        updatedAt:
          $ref: '#/components/schemas/DateTime'
    WorkzoneRef:
      oneOf:
      - $ref: '#/components/schemas/WorkzoneUrn'
      - $ref: '#/components/schemas/WorkzoneId'
    Url:
      type: string
      format: uri
      description: Link that will redirect to 302 signed link to download the corresponding file.
    Error:
      type: object
      required:
      - status
      - title
      properties:
        status:
          type: integer
          format: int32
        title:
          type: string
        detail:
          type: string
          description: human readable description of the error in english
        errorCode:
          type: string
          description: detailed code describing error, can be used to map to a localized message
        errorValues:
          type: object
          description: values implied in the error, typically an input parameter, can be used to include in a localized message
    cropCreate:
      type: object
      required:
      - workzoneId
      - name
      - crop
      - actualCrop
      - rotation
      - cameraType
      - cameraState
      - scan
      properties:
        workzoneId:
          $ref: '#/components/schemas/WorkzoneRef'
        name:
          type: string
        crop:
          type: string
          description: Description of the plans defining the bounding box of the crop in the scene
        actualCrop:
          type: string
          description: Description of the plans defining the bounding box of the crop related to the camera
        rotation:
          type: string
          description: Description about the rotation of the crop inside the camera
        layers:
          type:
          - string
          - 'null'
          description: Scans related to the crop
        cameraType:
          type: string
          description: Details about the camera (overview, ground, scan, arcrotate)
        cameraState:
          type: string
          description: Description of source and direction of the camera of the scene
        scan:
          type: string
          description: root scan for the crop
        thumbnailBlobName:
          type:
          - string
          - 'null'
          allOf:
          - $ref: '#/components/schemas/BlobName'
        oview:
          type:
          - number
          - 'null'
        settings:
          type:
          - string
          - 'null'
    Uuid:
      type: string
      description: UUIDv4
      format: uuid
      example: 156fff1a-0ef7-4335-891a-627928a19e29
    ProjectId:
      allOf:
      - $ref: '#/components/schemas/Uuid'
      example: 8196e320-8a4d-4d29-b0a9-077cd7ed3368
  parameters:
    cropRef:
      name: cropRef
      in: path
      required: true
      description: The Id or Urn of the crop
      schema:
        oneOf:
        - $ref: '#/components/schemas/CropUrn'
        - $ref: '#/components/schemas/CropId'
    workzonesFilter:
      name: workzones
      in: query
      required: false
      description: 'Comma-separated list of work zone references.


        Providing at least 1 invalid (bad format, not exist, unreachable) work zone will return a 400 Bad Request error.

        Providing empty parameter will return empty crops list.

        '
      schema:
        type: array
        items:
          $ref: '#/components/schemas/WorkzoneRef'
      examples:
        oneId:
          summary: Example of single work zone
          value:
          - 9260cd6f-a27b-456f-a5e3-b9c9fd4689f9
        multipleIds:
          summary: Example of multiple work zones
          value:
          - 9260cd6f-a27b-456f-a5e3-b9c9fd4689f9
          - urn:cintoo:workzone:e7868b89-80a6-429d-949f-66e3834651f2
    accountRef:
      name: accountRef
      in: path
      required: true
      description: The Id or Urn of the account
      schema:
        oneOf:
        - $ref: '#/components/schemas/AccountUrn'
        - $ref: '#/components/schemas/AccountId'
    projectRef:
      name: projectRef
      in: path
      required: true
      description: The Id or Urn of the project
      schema:
        oneOf:
        - $ref: '#/components/schemas/ProjectUrn'
        - $ref: '#/components/schemas/ProjectId'
  responses:
    UnexpectedError:
      description: unexpected error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            '400':
              value:
                status: 400
                title: Bad Request
            '401':
              value:
                status: 401
                title: Unauthorized
            '403':
              value:
                status: 403
                title: Forbidden
            '404':
              value:
                status: 404
                title: Not Found
            '405':
              value:
                status: 405
                title: Method Not Allowed
            '406':
              value:
                status: 406
                title: Not Acceptable
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://aec.cintoo.com/oauth/authorize
          tokenUrl: https://aec.cintoo.com/oauth/token
          scopes: {}
          refreshUrl: https://aec.cintoo.com/oauth/token
x-tagGroups:
- name: General
  tags:
  - errors_list
  - internal_information
  - token_management
  - Permissions
  - Authentication
- name: Resources
  tags:
  - Resources
- name: Tenant
  tags:
  - Tenant
- name: Account
  tags:
  - Account
  - Subscription
  - Role
  - User
  - Group
  - Trusted Device
- name: Subscription
  tags:
  - Usage Report
- name: Project
  tags:
  - Project
  - Members
  - Workzone
- name: Project Data
  tags:
  - File
  - Annotation
  - Saved View
  - Share Link
  - Crop
  - Measurement
  - Tag List
  - Tag
- name: Jobs
  tags:
  - Progress Monitoring
  - Import Model
  - Export Scene
  - Segmentation
  - Video360
  - Import IDD
- name: Integrations
  tags:
  - Integrations
  - Konekt
  - Autodesk
  - Procore
- name: Tutorials
  tags:
  - tuto_upload_file
  - understand_tag_data