diff --git a/.github/workflows/sync-api.yml b/.github/workflows/sync-api.yml index 2a864c9..d2ee224 100644 --- a/.github/workflows/sync-api.yml +++ b/.github/workflows/sync-api.yml @@ -50,15 +50,50 @@ jobs: - name: Fetch latest API specs run: pnpm fetch-specs + - name: Redact specs + run: pnpm redact-specs + - name: Fix specs run: pnpm fix-specs + - name: Generate API servers + run: pnpm generate-api-servers + - name: Generate types run: pnpm generate-types - name: Generate SDK run: pnpm generate-sdk + - name: Classify API changes + id: classify + run: | + CLASSIFICATION=$(jq -r .classification sync-report.json) + # Validate against the closed set before it flows into $GITHUB_OUTPUT + # and later shell steps. sync-report.json is derived from uncontrolled + # portal input; an unexpected value here is a corrupt report, not a + # valid state, so fail loudly rather than propagate it. + case "$CLASSIFICATION" in + benign|additive|breaking) ;; + *) echo "Unexpected classification: $CLASSIFICATION"; exit 1 ;; + esac + ADDED_COUNT=$(jq '.newOperations | length' sync-report.json) + + echo "Classification: $CLASSIFICATION" + echo "Added operations: $ADDED_COUNT" + + echo "classification=$CLASSIFICATION" >> $GITHUB_OUTPUT + echo "added_count=$ADDED_COUNT" >> $GITHUB_OUTPUT + + # Neutralize embedded CR/LF in portal-derived fields (spec, path, name) + # so a newline inside an operation string cannot inject a spurious + # heredoc terminator or a new key=value line into $GITHUB_OUTPUT. + { + echo "added_ops<> $GITHUB_OUTPUT + - name: Lint fix generated code run: pnpm lint:fix @@ -75,10 +110,11 @@ jobs: SPEC_CHANGES=$(git diff --name-only -- 'specs/raw/*.yaml' 'specs/fixed/*.yaml' | wc -l) API_CHANGES=$(git diff --name-only -- 'src/api/*.ts' | wc -l) TYPE_CHANGES=$(git diff --name-only -- 'src/types/generated/*.ts' | grep -v 'index.ts' | wc -l) + MANIFEST_CHANGES=$(git diff --name-only -- 'scripts/api-surface.yaml' | wc -l) - TOTAL=$((SPEC_CHANGES + API_CHANGES + TYPE_CHANGES)) + TOTAL=$((SPEC_CHANGES + API_CHANGES + TYPE_CHANGES + MANIFEST_CHANGES)) - echo "Spec changes: $SPEC_CHANGES, API changes: $API_CHANGES, Type changes: $TYPE_CHANGES" + echo "Spec changes: $SPEC_CHANGES, API changes: $API_CHANGES, Type changes: $TYPE_CHANGES, Manifest changes: $MANIFEST_CHANGES" git status --porcelain if [[ $TOTAL -gt 0 ]]; then @@ -92,6 +128,8 @@ jobs: - name: Determine version bump if: steps.changes.outputs.has_changes == 'true' || github.event.inputs.force_release == 'true' id: version + env: + CLASSIFICATION: ${{ steps.classify.outputs.classification }} run: | # Get current version from package.json CURRENT_VERSION=$(node -p "require('./package.json').version") @@ -100,9 +138,18 @@ jobs: # Parse version components IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" - # Bump patch version - NEW_PATCH=$((PATCH + 1)) - NEW_VERSION="${MAJOR}.${MINOR}.${NEW_PATCH}" + # Additive changes bump minor and reset patch to 0; everything else + # (benign spec churn, forced release) keeps the patch-only bump. + # Guarded strictly on the classification value, never on whether + # scripts/api-surface.yaml itself shows a diff. CLASSIFICATION travels + # through step env rather than direct expression interpolation. + if [[ "$CLASSIFICATION" == "additive" ]]; then + NEW_MINOR=$((MINOR + 1)) + NEW_VERSION="${MAJOR}.${NEW_MINOR}.0" + else + NEW_PATCH=$((PATCH + 1)) + NEW_VERSION="${MAJOR}.${MINOR}.${NEW_PATCH}" + fi echo "New version: $NEW_VERSION" echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT @@ -115,14 +162,26 @@ jobs: - name: Update CHANGELOG.md if: steps.changes.outputs.has_changes == 'true' || github.event.inputs.force_release == 'true' + env: + ADDED_OPS: ${{ steps.classify.outputs.added_ops }} + CLASSIFICATION: ${{ steps.classify.outputs.classification }} run: | DATE=$(date +%Y-%m-%d) VERSION="${{ steps.version.outputs.new_version }}" + # Additive runs render the new operations under their own heading; + # everything else keeps today's plain entry. ADDED_OPS travels + # through env rather than direct expression interpolation below, so + # a backtick or paren in an operation name cannot break the script. + ADDED_BLOCK="" + if [[ "$CLASSIFICATION" == "additive" ]]; then + ADDED_BLOCK=$'### Added\n'"$ADDED_OPS"$'\n\n' + fi + # Create new changelog entry ENTRY="## [$VERSION] - $DATE - ### Changed + ${ADDED_BLOCK}### Changed - Synced with latest John Deere API specifications " @@ -205,12 +264,22 @@ jobs: # modes are eliminated by letting the tag trigger drive the release. - name: Summary + env: + ADDED_OPS: ${{ steps.classify.outputs.added_ops }} + CLASSIFICATION: ${{ steps.classify.outputs.classification }} run: | if [[ "${{ steps.changes.outputs.has_changes }}" == "true" ]]; then echo "### ✅ API Sync Complete" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "Released version: **v${{ steps.version.outputs.new_version }}**" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY + echo "Classification: **$CLASSIFICATION**" >> $GITHUB_STEP_SUMMARY + if [[ "$CLASSIFICATION" == "additive" ]]; then + echo "" >> $GITHUB_STEP_SUMMARY + echo "New operations:" >> $GITHUB_STEP_SUMMARY + echo "$ADDED_OPS" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY cat << 'SUMMARY_EOF' >> $GITHUB_STEP_SUMMARY ${{ steps.summary.outputs.summary }} SUMMARY_EOF @@ -223,3 +292,25 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "The John Deere API specifications have not changed since the last sync." >> $GITHUB_STEP_SUMMARY fi + + - name: Breaking-change guidance + if: failure() + run: | + CLASSIFICATION="" + if [[ -f sync-report.json ]]; then + CLASSIFICATION=$(jq -r .classification sync-report.json 2>/dev/null || echo "") + fi + + if [[ "$CLASSIFICATION" == "breaking" ]]; then + MISSING_OPS=$(jq -r '.missingOperations[] | "- `" + (.spec | gsub("\\r|\\n"; " ")) + "`: " + .method + " " + (.path | gsub("\\r|\\n"; " ")) + " (as `" + (.name | gsub("\\r|\\n"; " ")) + "`)"' sync-report.json 2>/dev/null || echo "") + + echo "### Breaking API changes detected" >> $GITHUB_STEP_SUMMARY || true + echo "" >> $GITHUB_STEP_SUMMARY || true + echo "Manifest operations missing upstream:" >> $GITHUB_STEP_SUMMARY || true + echo "" >> $GITHUB_STEP_SUMMARY || true + echo "$MISSING_OPS" >> $GITHUB_STEP_SUMMARY || true + echo "" >> $GITHUB_STEP_SUMMARY || true + echo "Remediation: upstream renamed a path: edit that entry's op: in scripts/api-surface.yaml to keep the name; endpoint removed upstream: delete the entry, a major-version consideration; see the header of scripts/api-surface.yaml" >> $GITHUB_STEP_SUMMARY || true + else + echo "Sync failed. Check the failed step's log above for details." >> $GITHUB_STEP_SUMMARY || true + fi diff --git a/.gitignore b/.gitignore index a44cdab..bbde10d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,9 @@ bash.exe.stackdump settings.local.json .gitnexus /.agents/skills/gitnexus/ + +# Machine-readable sync classification output (regenerated per run) +sync-report.json + +# Session scratch +.superpowers/ diff --git a/CHANGELOG.md b/CHANGELOG.md index d6a17ed..89adadb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,62 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.4.0] - 2026-07-02 + +The first live multi-document fetch. John Deere's portal returns more than one +OpenAPI document for several API slugs, and the pre-merge fetch kept only one +document per slug, silently dropping the rest. The pipeline now validates and +merges every document, surfacing 56 operations that were always live but never +generated. The same work hardens codegen against the spec-reordering class of +bug that took the daily sync down in June 2026. + +### Added + +- **56 operations from portal documents the fetch previously dropped.** Each API + slug can resolve to multiple OpenAPI documents; the multi-document merge now + folds every one of them into the generated spec instead of keeping a single + document. By family: + - **field-operations**: field-operation `measurementTypes` (list, get by type). + - **files**: `fileTransfers` (list, get, list by org, create). + - **flags**: `flagCategories` (list, get, create, update, delete) and + `flagCategoryPreferences` (list, get, update). + - **machine-locations**: machine `breadcrumbs` (list). + - **map-layers**: `mapLayers` and `fileResources` CRUD (get, list, create, + update, delete across both). + - **products**: `chemicals`, `fertilizers`, `dryBlends`, `tankMixes`, + `activeIngredients`, product `companies`, and `documents` (list/get plus the + org-scoped create/update and the associate-to-org / set-overrides actions). + - **webhook**: `eventSubscriptionDelivery` (list, patch). + +### Changed + +- **Codegen is now hardened against upstream spec reordering.** Public method + names are pinned to operation identity (HTTP method + normalized path) in the + committed `scripts/api-surface.yaml` manifest, so reordering a spec's `paths` + can no longer rebind a published method to a different endpoint. Multi-document + slugs are structurally merged (the primary document pinned by a repo-owned + table so the public type surface never silently renames), raw specs are + canonicalized to a deterministic key order so a portal reorder produces no + diff, and every run is classified benign / additive / breaking to gate + releases (additive auto-cuts a minor; breaking fails for a human to reconcile + the manifest). + +### Fixed + +- **The June 2026 daily-sync outage (red since 2026-06-24) is eliminated at its + root.** John Deere reordered and split the field-operations spec, which + silently rebound `FieldOperationsApi.get` to a different endpoint because method + names were assigned by document order; the `src/safe` facade then stopped + compiling and the sync died at build. Names are now keyed to operation identity, + so a reorder is inert. (Distinct from the 2026-06-07 equipment build break fixed + in 2.2.0.) +- **Equipment return types restored against a John Deere doc regression.** JD's + 2026-07 equipment-doc edit dropped the `values.items` `$ref` from two 200 + responses while leaving the target schemas defined, collapsing + `EquipmentApi.get` to `PaginatedResponse` and `EquipmentApi.getEquipment` + to `unknown`. A guarded `fix-specs` transform restores the refs while the + schemas exist and no-ops once JD repairs the doc. + ## [2.3.1] - 2026-06-19 ### Changed diff --git a/CLAUDE.md b/CLAUDE.md index d8cc3e0..3f6ae94 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## What this is -Unofficial TypeScript SDK for John Deere Operations Center API. 28 APIs / 146 operations. Mostly generated code: specs +Unofficial TypeScript SDK for John Deere Operations Center API. 28 APIs / 202 operations. Mostly generated code: specs are pulled from John Deere's portal, patched, and fed through a codegen pipeline into `src/api/*.ts`, `src/types/generated/*`, `src/api-servers.generated.ts`, and `src/hateoas-map.ts`. @@ -37,13 +37,55 @@ runner (`node:test` / `node:assert`), not Jest or Vitest. ### Codegen pipeline (`pnpm generate`) ``` -fetch-specs → fix-specs → generate-api-servers → generate-types → generate-sdk - raw/*.yaml fixed/*.yaml api-servers.ts types/generated api/*.ts +fetch-specs → redact-specs → fix-specs → generate-api-servers → generate-types → generate-sdk + raw/*.yaml raw/*.yaml fixed/*.yaml api-servers.ts types/generated api/*.ts ``` -Each stage is independently runnable (e.g. `pnpm fix-specs`). Re-run the whole pipeline after pulling new specs; CI's -`sync-api.yml` does this daily and opens a release if diffs appear under `specs/`, `src/api/`, or -`src/types/generated/`. +Each stage is independently runnable (e.g. `pnpm fix-specs`). Re-run the whole pipeline after pulling new specs. + +`fetch-specs` validates **every** document the portal returns for a slug. A slug can return more than one +document; when it does, they are structurally merged into a single spec (`mergeSpecDocs` in +`scripts/lib/spec-merge.ts`). The primary document is pinned by the repo-owned `PRIMARY_ENDPOINT_NAME` table +(falling back to the slug-named document, else a loud error); the primary owns the merged `info` and its +committed `components` names, so a portal reorder cannot silently rename the public type surface. The merged (or +single) document is then canonicalized to a deterministic key order, so an upstream reorder of +`paths`/`components` yields a byte-identical raw file instead of a misleading diff. Redaction runs per document +before parse; `redact-specs` stays downstream as an idempotent safety net. + +Servers reconciliation is family-aware. Documents that differ only as environment instances or doc defects of +the shared `https://{environment}.deere.com/platform` family resolve to the primary's servers block (`fix-specs` +normalizes it to the templated form downstream); a genuinely different family (a deere host on a non-platform +path, or mixed families) refuses to merge, preserving the per-family host trust boundary. + +#### The api-surface manifest (`scripts/api-surface.yaml`) + +Committed and version-controlled. It maps each operation's **identity** (HTTP method + normalized path) to the +public method name the generator emits, so an upstream `paths` reorder cannot rebind a published method to a +different endpoint (the failure that took the daily sync red on 2026-06-24: a `paths` reorder rebound +`FieldOperationsApi.get` to a different endpoint). Identity +normalizes every `{param}` to `{_}`, so a param rename (`{orgId}` becomes `{organizationId}`) is absorbed and +the method name is preserved. The one exception is sibling operations that differ **only** by param name +(crop-types declares both `GET /cropTypes/{name}` and `GET /cropTypes/{id}`): those match by exact raw path, so a +rename inside such a set is not absorbed and surfaces as breaking for a human to reconcile. `listAll` never +appears in the manifest; it is always derived from a `list` collection GET. New operations receive deterministic +proposed names (verb plus the capitalized last non-param segment, with a documented tiebreak chain; no +positional counters). + +Editing the `name:` values is how you approve an upstream change: repoint an entry's `op:` to a renamed path +(the name, hence the public method, is preserved), or delete an entry to drop a removed endpoint's method (a +major-version decision). A manifest entry with no matching operation fails the sync with per-entry diagnostics +rather than silently dropping the method. + +Every run is classified into `sync-report.json` (gitignored) for the workflow: + +- **benign**: no new and no missing operations. No release. +- **additive**: new operations, none missing. Minor release; `generate-sdk` rewrites the manifest, folding the + new entries in with their proposed names. +- **breaking**: a manifest entry lost its operation. The sync fails and surfaces the missing operations; a human + reconciles the manifest before any release. + +CI's `sync-api.yml` runs the pipeline daily, reads the classification, and bumps accordingly: additive cuts a +minor, benign spec churn a patch; a breaking run does not release. ## Architecture @@ -140,6 +182,12 @@ To change any of them, edit the corresponding generator in `scripts/` and re-run Hand-written core: `src/client.ts`, `src/environment-resolver.ts`, `src/errors.ts`, `src/index.ts`. +`scripts/api-surface.yaml` sits between the two: it is committed and version-controlled, but `generate-sdk` +rewrites it wholesale on additive runs. Only its `name:` values are meant to be hand-edited (the rename/removal +approval point described above); per-entry hand comments do not survive a rewrite. `scripts/canonicalize-specs.ts` +is a rerunnable, idempotent one-off that renormalizes committed `specs/raw/*.yaml` to the key order `fetch-specs` +now emits, so live fetches diff cleanly against them. + ## Testing conventions Tests use `tests/helpers/mock-fetch.ts` for injecting fetch behaviour (JSON success, error, retry-sequence, spy, network diff --git a/docs/plans/2026-07-01-spec-identity-pipeline.md b/docs/plans/2026-07-01-spec-identity-pipeline.md new file mode 100644 index 0000000..0cfd150 --- /dev/null +++ b/docs/plans/2026-07-01-spec-identity-pipeline.md @@ -0,0 +1,166 @@ +# Identity-keyed codegen pipeline: eliminate the spec-churn breakage class + +## Context + +The daily "Sync John Deere API" workflow has been red since 2026-06-24 (8 consecutive runs). Root cause, confirmed by local reproduction: on 2026-06-23 JD re-published the field-operations spec with its `paths` reordered and split into two portal documents. `scripts/generate-sdk.ts` derives public method names from spec document order (JD specs carry no operationIds; `inferMethodName` collapses sibling GETs to the same candidate name; collisions resolve first-come-first-served in `Object.entries(spec.paths)` order, `generate-sdk.ts:465-479`). The reorder rebound `FieldOperationsApi.get` from `GET /fieldOperations/{operationId}` to the shapefile endpoint `GET /fieldOps/{operationId}`; the hand-written facade `src/safe/field-operations.ts:186` (which forces `embed: 'measurementTypes'`) stopped compiling, and the sync dies at Build daily. + +The near-miss is worse than the outage: for any caller not passing `embed` (e.g. `deere.fieldOperations.get(id)`), the rebinding compiles clean, silently calls the wrong endpoint, and the sync auto-publishes to npm. + +Second defect, same class: `scripts/lib/fetched-spec-utils.ts:48-54` keeps only `responseBody[0]` of the portal's JSON array. Live survey (2026-07-01): 7 of 28 slugs return multiple documents, 43 total, 15 silently dropped today (products=8 docs, flags=3, map-layers=3, field-operations-api / files / webhook / machine-locations=2 each). Documents within a slug are distinguished only by `end_point_name` and `id`. + +Related hygiene defects found during planning (must fix or the loud-failure design is fiction): +- All four pipeline entrypoints end with `main().catch(console.error)` (fetch-specs.ts:124, fix-specs.ts:823, generate-types.ts:93, generate-sdk.ts:1008): any thrown error logs and **exits 0**. fix-specs additionally swallows per-file failures (`fix-specs.ts:803-816` counts them and continues), so embed-contracts' "abort loudly" is currently silent in CI. +- `.github/workflows/sync-api.yml` never runs `redact-specs` or `generate-api-servers` (steps at lines 50-69), so an upstream servers change never regenerates `src/api-servers.generated.ts` in the daily sync. +- `generate-types.ts:78` and `generate-api-servers.ts:338` embed `new Date().toISOString()` in generated output: deterministic input produces nondeterministic output, dirtying any idempotence check. + +Class definition: the pipeline derives meaning (method identity, document selection) from meaningless positional properties of uncontrolled upstream input, and its failure modes are silent. The fix keys all identity to `(HTTP method, normalized path)`, consumes all documents, makes every failure loud, and classifies + gates upstream changes. + +## User-approved design decisions + +1. **Naming: committed manifest.** New `scripts/api-surface.yaml` maps operation identity to method name, seeded from today's generated names so the public npm surface does not change. New upstream operations get deterministic auto-appended names. A mapped operation missing upstream fails the sync loudly. +2. **Multi-doc: structural merge.** fetch-specs consumes all portal documents per slug and merges them into the existing single `specs/raw/{slug}.yaml`. Filenames stay stable, so `SpecName`, `API_SERVERS`, `embed-contracts.yaml` `spec:` keys, generated class names, and `src/safe/*` are untouched. +3. **Release gate: classified.** Benign (no substantive diff) → no release. Additive (manifest gained entries) → auto **minor**. Breaking (manifest op missing upstream) → job fails with a named diagnostic. Everything else that diffs → patch, as today. + +## Architecture + +### A. `scripts/lib/api-surface.ts` (new, pure) + +Side-effect-free module per repo convention (entrypoints run `main()` on import and are untestable; precedent `scripts/lib/sdk-gen-utils.ts`). Move `normalizePathPattern` here from `generate-sdk.ts:761` (generate-sdk re-imports, so HATEOAS and manifest identity cannot drift). + +- Identity: `` `${METHOD} ${normalizePathPattern(path)}` ``. Param renames (`{orgId}` → `{organizationId}`) do not change identity. +- Manifest format (`scripts/api-surface.yaml`, one entry per operation; `listAll` is a derived twin, never an entry): + +```yaml +version: 1 +specs: + field-operations-api: + - op: GET /fieldOperations/{operationId} # display path; matched via normalizePathPattern + name: get +``` + +- **Write policy: full regeneration, never append.** `serializeApiSurface()` emits a fixed header comment (purpose, breaking-failure runbook, "hand-edit only `name:` values; per-entry comments unsupported"), specs sorted, ops sorted by normalized key. Hand-renamed `name:` values round-trip; display paths auto-refresh on regeneration. +- `loadApiSurface()`: loud validation. Duplicate normalized key per spec, duplicate name per spec, name not matching `/^[a-z][a-zA-Z0-9]*$/`, reserved names (`constructor`, `spec`, `client`), or an explicit `listAll` in a spec whose `list` is a collection GET → throw. +- `resolveMethodNames(specName, ops, surface)` → `{ names, newEntries, missing }`. Pure; output invariant under ops-array order (the class-elimination property). +- `proposeName(op, takenNames)`: verb by method (`get`→`get`/`list` by isCollection, `post`→`create`, `put`→`update`, `patch`→`patch`, `delete`→`delete`) + last non-param path segment capitalized **preserving interior camel humps** (`measurementTypes` → `listMeasurementTypes`; deliberate divergence from legacy `toPascalCase`, documented in the manifest header since new names are new surface). Never a bare verb, never a positional counter. Tiebreaks: prepend preceding segments, then `By${Capitalize(lastPathParam)}`. `takenNames` includes implied `listAll` twins. New ops processed sorted by `(spec, opKey)`. +- `classifyRun({newEntries, missing, specsChanged})` → `'benign' | 'additive' | 'breaking'` (pure, tested; workflow consumes the result via sync-report.json). + +### B. `scripts/generate-sdk.ts`: manifest-driven naming + +- Manifest absent → hard fail pointing at the seed script. Never auto-seed (auto-seeding from freshly fetched specs is precisely the incident). +- Per spec: `resolveMethodNames`. Aggregate `missing` across ALL specs, then print one diagnostic per entry (spec, `METHOD display-path`, bound name, hint: "rename upstream? update the entry's `op:` to keep the name. Endpoint really gone? delete the entry (breaking; major-version consideration)"), write `sync-report.json`, and `process.exit(1)`. This fires before any generated file is written. +- `newEntries` → use proposed names, rewrite `scripts/api-surface.yaml` via `serializeApiSurface`, log additions, record in `sync-report.json` (`{classification, newOperations: [{spec, method, path, name}], missingOperations: []}`, repo root, gitignored; biome ignores json/yaml so `lint:fix` cannot churn either file). +- `generateMethod` consumes a precomputed name; delete `inferMethodName` + the `usedMethodNames` collision loop (after the seed lands; a defensive throw on duplicate names stays). +- `listAll` twin rule unchanged: emitted iff resolved name `=== 'list'` and collection GET (`generate-sdk.ts:560-575`). +- Everything else (parseSpec, deere.ts / index / hateoas-map generation) unchanged. + +### C. `scripts/lib/spec-merge.ts` (new, pure) + +`mergeSpecDocs(slug, docs: {endPointName, id, doc}[])`: + +- **Doc order: repo-owned, never portal-positional.** Primary doc first via a hardcoded `PRIMARY_ENDPOINT_NAME` table (precedent: `ENV_TIER` in generate-api-servers.ts), seeded from committed raw `info.title` identities: products→`varieties`, field-operations-api→`field-operation`, files→`files-api`, plus the other four multi-doc slugs. Remaining docs sorted by `end_point_name`. Unknown multi-doc slug with no table entry and no slug-match heuristic hit → loud error demanding a table entry (prevents a silent primary flip renaming the public type surface). Single-doc slugs bypass merge. +- **Paths**: union. Same literal path in two docs → merge method-by-method; same path+method both present → deep-equal (key-order-insensitive) → keep primary's, else loud error. Different literal paths sharing a normalized pattern AND a method → loud error (manifest identity would be ambiguous). +- **Components** (all categories, generic): absent → add; deep-equal → dedupe keeping primary's; conflict → rename the non-primary doc's copy to `${Name}_${PascalCase(endPointName)}` and rewrite every `#/components//` `$ref` throughout that doc's whole subtree (one doc-wide walk covers paths/responses/parameters/requestBodies automatically). **Fixpoint loop**: renames can invalidate earlier deep-equal decisions, so re-run compare→rename until stable, iteration-capped with a loud error. Primary-doc names never change, structurally protecting `src/safe/*` type refs and `embed-contracts.yaml` targets. +- **Servers**: declaring docs must deep-equal, else loud error; non-declaring docs inherit. +- **info / tags / extras**: primary's; union `tags` by name; stamp `x-source-documents: [{endPointName, id}]` at spec root. + +### D. Canonicalization: `scripts/lib/spec-canonicalize.ts` (new, pure) + +- `canonicalizeSpec(doc)`: sort `paths` keys and every `components.`'s keys lexicographically; everything else keeps document order. Applied to EVERY slug at fetch time (the incident was an intra-doc reorder in a single-doc pipeline). +- `stringifySpec(doc)`: `yaml.stringify(doc, { lineWidth: 0, defaultKeyType: 'PLAIN', defaultStringType: 'QUOTE_DOUBLE', aliasDuplicateObjects: false })`. Same options as fix-specs plus `aliasDuplicateObjects: false` (dedup'd merged docs share parsed subtrees; without it yaml emits surprise `&anchor`/`*alias` nodes). Redaction stays text-level per-doc BEFORE parse (portal text → `redactSpecContent` → parse → merge → canonicalize → stringify); `lineWidth: 0` keeps `spec-redactor.ts`'s line-anchored regexes valid for the later `redact-specs` re-pass. + +### E. Fetch boundary consumes everything + +- `scripts/lib/fetched-spec-utils.ts`: validate ALL array elements (require `id`, `name`, `end_point_name`, parseable `yml_content`; redact per doc); any invalid doc fails the whole slug (null → stale file kept, as today). +- `scripts/fetch-specs.ts`: per slug: validate all → parse → merge (>1 doc) → canonicalize → stringify → write `{slug}.yaml`. `summary.json` gains per-slug `docs: [{id, endPointName}]` (write-only file, no consumers). +- `scripts/check-api-health.ts:87,91`: healthy iff array non-empty and every element has content; add per-slug `docCount` (verify the badge jq in the health workflow tolerates the shape). + +### F. `.github/workflows/sync-api.yml`: classified gate + +- Add the missing `pnpm redact-specs` (after fetch) and `pnpm generate-api-servers` (after fix) steps, mirroring `pnpm generate` order. +- New `Classify sync` step reads `sync-report.json` with jq → outputs `classification`, `added_ops` markdown list. +- Version bump: additive → `MINOR+1` **and `PATCH=0`** (the current script only increments patch; naive minor logic would mint 2.4.12-style versions); otherwise patch. `force_release=true` with benign classification stays patch (guard on `classification == 'additive'`, not on manifest-diff presence). +- Check-for-changes globs: add `scripts/api-surface.yaml` (belt-and-braces; `git add .` already commits it). +- CHANGELOG step: additive runs render `### Added` with one line per new operation (release.yml:49-63 extracts this section into the GitHub release; lines must not start with `## [`, trivially true). +- `if: failure()` summary step pointing at the Generate SDK log and the manifest runbook; generate-sdk writes sync-report.json BEFORE exiting 1 so the step can list missing ops; the step tolerates a missing file. +- Keep stopping at "push tag" (release.yml/publish.yml handoff unchanged and version-agnostic). + +### G. Hygiene (prerequisite for everything above being loud and deterministic) + +- All four entrypoints: `main().catch(...)` sets a nonzero exit; fix-specs `main()` exits 1 when its per-file `failed` counter is nonzero. +- Remove the `new Date().toISOString()` stamps from generate-types.ts:78 and generate-api-servers.ts:338 (nondeterministic output from deterministic input is the class under repair; git already records dates). This makes `pnpm generate` fully idempotent, so gates need no file exclusions. +- `scripts/generate-types.ts:35`: sort `readdirSync` (types index export order is currently filesystem-order nondeterministic). + +## Migration sequencing (the trap to avoid) + +The manifest must be seeded from CURRENT COMMITTED `specs/fixed/*` (still pre-reorder: committed field-operations has `/fieldOperations/{operationId}` before `/fieldOps/{operationId}`) using the LEGACY algorithm, so seeded names are exactly today's public API (including `getEquipmentisgtypes2`, `getEquipmentmodels2`). Only after the byte-identity gate passes does any fetch/merge/canonicalization change land. The seed and legacy-naming code are deleted once the gate passes (re-running a seed later would pin possibly-rebound names; git history preserves it). + +## Implementation order (worktree branch `fix/spec-identity-pipeline`; TDD per commit) + +1. **Hygiene**: entrypoint exit codes, fix-specs failure propagation, timestamp removal, generate-types sort. Entrypoints are untestable by convention; verify by command (`pnpm fix-specs && pnpm generate-api-servers && pnpm generate-types && git diff --stat` → only the two de-timestamped files change, once). +2. **Extract legacy naming verbatim** into `scripts/lib/legacy-method-names.ts` (`inferMethodName` from generate-sdk.ts:205-233 + the collision loop from :465-479 + `toPascalCase`); generate-sdk consumes precomputed names (resolution hoisted to `generateApiClass`). Tests first: `tests/legacy-method-names.test.ts` locks current behavior including order-sensitivity (asserted deliberately; this freezes the bug we're replacing). Gate: regenerate from committed specs → `git diff --exit-code src/api src/deere.ts src/hateoas-map.ts src/types`. +3. **api-surface lib** (tests first: `tests/api-surface.test.ts`): loader validation failures, round-trip `load(serialize(x)) == x`, resolve hit/new/missing buckets, `proposeName` rules + tiebreaks + twin-aware takenNames, `classifyRun`, and the fast-check reorder-immunity property (resolution invariant under ops permutation; style precedent `tests/fuzz.test.ts`). Also export a pure `extractOps(parsedYaml)` used by both seed and generate-sdk. +4. **Seed**: `scripts/seed-api-surface.ts` (refuses if manifest exists) replays legacy naming over committed `specs/fixed` → commit `scripts/api-surface.yaml` (~133 entries; 156 methods minus 23 derived listAll twins). Spot-check in review: `field-operations-api.get` = `GET /fieldOperations/{_}`, `equipment.get` = `GET /equipment` (the collection; name/REST inversion is pre-existing), counter names present verbatim. +5. **Switch generate-sdk to the manifest** (missing → aggregate diagnostic + report + exit 1; new → propose + rewrite manifest + report). Gitignore `sync-report.json`. **Stage gate A (byte identity)**: regenerate from committed specs → `git diff --exit-code src/api src/deere.ts src/hateoas-map.ts src/types scripts/api-surface.yaml` all empty, then full `pnpm build && pnpm typecheck && pnpm typecheck:test && pnpm test`. Then delete `seed-api-surface.ts`, `legacy-method-names.ts`, and their tests. +6. **spec-canonicalize lib** (tests first: shuffle-then-canonicalize byte-equality property, idempotence, non-target keys keep document order). +7. **spec-merge lib + fetch validation** (tests first: `tests/spec-merge.test.ts` covering disjoint union, method-level same-path merge, deep-equal dedupe vs conflict error, normalized-pattern collision error, rename + `$ref` rewrite cascade with the fixpoint case, servers rules, primary table + heuristic + no-match error, a products-shaped 3-doc fixture; extend `tests/fetched-spec-utils.test.ts` for multi-doc/missing-`end_point_name`/one-bad-doc-fails-slug). Update `check-api-health.ts`. +8. **Wire fetch-specs** (merge + canonicalize + summary.json docs metadata). +9. **One-time canonicalization of committed specs** via a tiny `scripts/canonicalize-specs.ts` + regenerate. Isolates order-only churn from merge churn, and its gate is the real-world reorder-immunity proof: `git diff --exit-code scripts/api-surface.yaml` (manifest unchanged though every spec reordered), `src/deere.ts` unchanged, full test suite green. +10. **Workflow**: sync-api.yml changes per F. Verify with local `actionlint`. +11. **First live fetch (stage gate B, human-reviewed within this PR)**: `pnpm generate` against the live portal. Expected: 7 slugs' raw files merge in the 15 dropped documents; manifest auto-appends new operations (**review the proposed names by hand; they become permanent public API on merge**); `FieldOperationsApi.get` still `@generated from GET /fieldOperations/{operationId}`; loud stops (products path dupes, embed-contract sentinel hits, servers conflicts) resolved as deliberate decisions (table/registry edits). Then `pnpm lint:fix && pnpm build && pnpm typecheck && pnpm typecheck:test && pnpm test && pnpm test:fuzz`, and a second `pnpm generate` → classification `benign`, zero diff (idempotence). +12. **Docs + release**: CLAUDE.md pipeline section (manifest, merge, canonicalization, release buckets, breaking-fix runbook "editing api-surface.yaml is how you approve upstream breaking changes"); CHANGELOG entry. After merge to main: `npm version minor && git push --follow-tags` per the repo's release process (the PR itself is the first additive release; the next scheduled sync should then report benign/no-change, which is the end-to-end proof). + +## Repo-convention obligations (AGENTS.md, mandatory) + +- Before editing each symbol: `mcp__gitnexus__impact({target, direction: "upstream"})` for `generateMethod`, `inferMethodName`, `parseSpec`, `fixSpec`, `validateFetchedSpec`, `fetchApiSpec`; warn on HIGH/CRITICAL. +- Before each commit: `mcp__gitnexus__detect_changes()`; final review vs main with `{scope: "compare", base_ref: "main"}`. +- Reindex after the big regeneration commits (`node .gitnexus/run.cjs analyze`). +- No AI attribution anywhere (commits, PR). + +## Risks and mitigations + +- **Products 8-doc merge blast radius**: shared boilerplate schemas dedupe via deep-equal; true conflicts rename only non-primary copies (primary = varieties, whose names the committed types already use). Fixpoint keeps the rewrite sound. If the live run shows pathological rename counts, the fallback lever is "equal modulo consistently-renamed refs" dedupe; do not build speculatively. +- **embed-contracts vs merged field-operations**: measurement-type doc redefining a patched schema either dedupes (deep-equal), renames (different), or, if JD now documents a patched field on the primary, hits the sentinel abort, which fix-specs now propagates as exit 1 → loud sync failure with the registry's own remediation text. All three outcomes are correct by design; (c) is a registry edit, not a code change. +- **First live run unattended is forbidden**: auto-proposed names become permanent public API; the sync stays red until the PR lands, which is safe (it has been red since 06-24 and cannot publish anything). +- **Whole-slug 404 upstream keeps the stale raw file** (unchanged behavior, invisible to the sync): accepted gap; the separate api-health workflow covers slug-level availability. A *document* vanishing from a multi-doc slug surfaces as missing manifest ops → breaking, loud. +- **HATEOAS map growth from new paths**: automatic; generator collision warnings print during stage gate B; review in the PR diff. + +## Verification + +```bash +# unit + property suites (new) +cross-env TSX_TSCONFIG_PATH=tsconfig.test.json node --import tsx/esm --test tests/api-surface.test.ts +cross-env TSX_TSCONFIG_PATH=tsconfig.test.json node --import tsx/esm --test tests/spec-canonicalize.test.ts +cross-env TSX_TSCONFIG_PATH=tsconfig.test.json node --import tsx/esm --test tests/spec-merge.test.ts + +# stage gate A: seeded manifest reproduces today's public API byte-for-byte (commits 2 and 5) +pnpm generate-sdk +git diff --exit-code -- src/api src/deere.ts src/hateoas-map.ts src/types scripts/api-surface.yaml + +# reorder-immunity, real-world (commit 9): canonicalize committed specs, regenerate, manifest must not move +pnpm canonicalize-specs && pnpm fix-specs && pnpm generate-api-servers && pnpm generate-types && pnpm generate-sdk +git diff --exit-code -- scripts/api-surface.yaml && git diff --stat src/deere.ts # expect empty + +# stage gate B: live pipeline (commit 11) +pnpm generate +grep -B1 -A4 "async get(" src/api/field-operations-api.ts # @generated from GET /fieldOperations/{operationId} +pnpm lint:fix && pnpm build && pnpm typecheck && pnpm typecheck:test && pnpm test && pnpm test:fuzz + +# idempotence (timestamps removed in commit 1, so this is exact) +pnpm generate && git status --porcelain # empty after the second run; sync-report.json classification = benign + +# whole suite + workflow lint +pnpm lint && pnpm build && pnpm typecheck && pnpm typecheck:test && pnpm test && pnpm test:fuzz +actionlint .github/workflows/sync-api.yml +``` + +Plus GitNexus `detect_changes` before each commit. The workflow's classification branches can only be fully exercised by scheduled runs; the first post-merge sync (expected: benign, no release) is the final end-to-end check. + +## Amendments (2026-07-02, during execution) + +These record where the implementation refined or diverged from the design above. The superseded passages are left intact as a historical design record; where an amendment conflicts with the original text, the amendment is authoritative. + +1. **Sibling identity exception (supersedes the line-61 merge rule; qualifies the line-30 identity rule).** Two entries that share a normalized key are legal when their raw paths differ, and such siblings are matched by exact literal path, not by normalized key alone. A param rename on one of them (for example `{name}` becoming `{id}`) therefore surfaces as a breaking change rather than being silently absorbed. This qualifies line 30's claim that param renames never change identity: it holds for a lone operation, but two siblings sharing one normalized pattern stay distinct by their literal paths. It supersedes line 61's rule that different literal paths sharing a normalized pattern plus a method are always a loud merge error. Motivated by crop-types, which declares both `GET /cropTypes/{name}` and `GET /cropTypes/{id}`: these normalize identically yet are distinct operations that must retain distinct names. + +2. **Platform-family servers reconciliation (extends the line-63 servers rule).** Declaring docs within the John Deere `platform` server family resolve to the primary doc's servers block instead of refusing on any textual difference. Junk placeholder server blocks inherit the primary's block with a warning. Genuinely different server families (a real host-family divergence) still refuse to merge, as line 63 originally specified. Motivated by machine-locations, whose `api` versus `partnerapi` platform variants are the same family, and by products, whose placeholder server blocks are not a real divergence. + +3. **Corrected accounting (supersedes the "~133 entries; 156 methods" counts near line 102).** The seeded manifest holds 123 entries, which expand to 146 operations once the 23 derived `listAll` twins are counted (123 + 23 = 146 operations pre-fetch). After the 56 additive operations from the previously dropped portal documents land, the manifest holds 179 entries and 202 operations; the 56 new ops are all `listFoo`-named rather than bare `list`, so they add no twins (146 + 56 = 202). diff --git a/package.json b/package.json index 48b3962..66c2314 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "prepublishOnly": "pnpm clean && pnpm build", "fetch-specs": "tsx scripts/fetch-specs.ts", "redact-specs": "tsx scripts/redact-specs.ts", + "canonicalize-specs": "tsx scripts/canonicalize-specs.ts", "fix-specs": "tsx scripts/fix-specs.ts", "generate-api-servers": "tsx scripts/generate-api-servers.ts", "generate-types": "tsx scripts/generate-types.ts", diff --git a/scripts/api-surface.yaml b/scripts/api-surface.yaml new file mode 100644 index 0000000..91d81b6 --- /dev/null +++ b/scripts/api-surface.yaml @@ -0,0 +1,421 @@ +# api-surface.yaml +# +# Operation identity to public method name registry. Each entry maps one API +# operation, keyed by (HTTP method, normalized path), to the public method name +# the SDK generator emits. The generator never invents or rebinds a name: a +# name lives in this file or the operation has no name yet. +# +# Path-param names normally do not affect identity (GET /orgs/{orgId} and +# GET /orgs/{organizationId} are the same operation), so an upstream param +# rename is absorbed and the public method is preserved. The exception is +# sibling operations that differ ONLY by param name: crop-types declares both +# GET /cropTypes/{name} and GET /cropTypes/{id} as distinct operations. Those +# are matched by exact path, so a param rename within such a sibling set is not +# absorbed; the old entry goes missing and the rename surfaces as a breaking +# diagnostic for a human to reconcile. +# +# This file is REGENERATED by generate-sdk whenever new upstream operations +# appear, so it is rewritten wholesale. Per-entry hand comments are not +# preserved; only the "name:" values are meant to be hand-edited. +# +# Breaking-change runbook: +# Upstream renamed a path: update that entry's "op:" to the new path. The +# name stays, so the public method is preserved. +# Upstream removed an endpoint: delete the entry. That drops the public +# method, which is a major-version consideration. +# +# Proposed names for NEW operations preserve interior camel humps (for example +# "listMeasurementTypes", not "listMeasurementtypes"), unlike the historical +# names seeded from the legacy generator. +# +# "listAll" never appears here: it is a derived twin of any collection GET +# named "list", emitted automatically by the generator. +# +version: 1 +specs: + aemp: + - op: GET /Fleet/{pageNumber} + name: get + assets: + - op: DELETE /assets/{assetId} + name: delete + - op: GET /assetCatalog + name: getAssetcatalog + - op: GET /assets/{assetId} + name: get + - op: GET /assets/{assetId}/locations + name: listLocations + - op: GET /organizations/{orgId}/assets + name: list + - op: POST /assets/{assetId}/locations + name: createLocations + - op: POST /organizations/{orgId}/assets + name: create + - op: PUT /assets/{assetId} + name: update + boundaries: + - op: DELETE /organizations/{orgId}/fields/{fieldId}/boundaries/{boundaryId} + name: delete + - op: GET /fieldOperations/{operationId}/boundary + name: get + - op: GET /organizations/{orgId}/boundaries + name: list + - op: GET /organizations/{orgId}/fields/{fieldId}/boundaries + name: listBoundaries + - op: GET /organizations/{orgId}/fields/{fieldId}/boundaries/{boundaryId} + name: getBoundaries + - op: POST /organizations/{orgId}/fields/{fieldId}/boundaries + name: create + - op: PUT /organizations/{orgId}/fields/{fieldId}/boundaries/{boundaryId} + name: update + clients: + - op: DELETE /organizations/{orgId}/clients/{clientId} + name: delete + - op: GET /organizations/{orgId}/clients + name: list + - op: GET /organizations/{orgId}/clients/{clientId} + name: get + - op: GET /organizations/{orgId}/clients/{id}/farms + name: listFarms + - op: GET /organizations/{orgID}/clients/{id}/fields + name: listFields + - op: POST /organizations/{orgId}/clients + name: create + - op: PUT /organizations/{orgId}/clients/{clientId} + name: update + connection-management: + - op: DELETE /connections/{connectionId} + name: delete + - op: DELETE /organizations/{orgId}/connections + name: deleteConnections + - op: GET /connections + name: list + crop-types: + - op: GET /cropTypes + name: list + - op: GET /cropTypes/{id} + name: getCroptypes + - op: GET /cropTypes/{name} + name: get + - op: GET /organizations/{organizationId}/cropTypes + name: listCroptypes + equipment: + - op: DELETE /equipment/{id} + name: delete + - op: GET /equipment + name: get + - op: GET /equipment/{id} + name: getEquipment + - op: GET /equipmentISGTypes + name: listEquipmentisgtypes + - op: GET /equipmentMakes + name: list + - op: GET /equipmentMakes/{equipmentMakeId} + name: getEquipmentmakes + - op: GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes + name: getEquipmentisgtypes + - op: GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId} + name: getEquipmentisgtypes2 + - op: GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels + name: getEquipmentmodels + - op: GET /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels/{equipmentModelId} + name: getEquipmentmodels2 + - op: GET /equipmentMakes/{equipmentMakeId}/equipmentTypes + name: getEquipmenttypes + - op: GET /equipmentModels + name: listEquipmentmodels + - op: GET /equipmentTypes + name: listEquipmenttypes + - op: POST /organizations/{organizationId}/equipment + name: create + - op: PUT /equipment/{id} + name: update + equipment-measurement: + - op: POST /organizations/{organizationId}/equipment/{principalId}/measurements + name: create + farms: + - op: DELETE /organizations/{orgId}/farms/{farmId} + name: delete + - op: GET /organizations/{orgId}/farms + name: list + - op: GET /organizations/{orgId}/farms/{farmId} + name: get + - op: GET /organizations/{orgId}/farms/{farmId}/clients + name: listClients + - op: GET /organizations/{orgID}/farms/{id}/fields + name: listFields + - op: POST /organizations/{orgId}/farms + name: create + - op: PUT /organizations/{orgId}/farms/{farmId} + name: update + field-operations-api: + - op: GET /fieldOperations/{operationId} + name: get + - op: GET /fieldOperations/{operationId}/measurementTypes + name: listMeasurementTypes + - op: GET /fieldOperations/{operationId}/measurementTypes/{measurementType} + name: getMeasurementTypes + - op: GET /fieldOps/{operationId} + name: getFieldops + - op: GET /organizations/{orgId}/fields/{fieldId}/fieldOperations + name: list + fields: + - op: DELETE /organizations/{orgId}/fields/{fieldId} + name: delete + - op: GET /organizations/{orgId}/fields + name: list + - op: GET /organizations/{orgId}/fields/{fieldId} + name: get + - op: GET /organizations/{orgID}/fields/{id}/clients + name: listClients + - op: GET /organizations/{orgId}/fields/{fieldId}/farms + name: listFarms + - op: POST /organizations/{orgId}/fields + name: create + - op: PUT /organizations/{orgId}/fields/{fieldId} + name: update + files: + - op: GET /fileTransfers + name: listFileTransfers + - op: GET /fileTransfers/{id} + name: getFileTransfers + - op: GET /files + name: list + - op: GET /files/{fileId} + name: get + - op: GET /organizations/{orgId}/fileTransfers + name: listOrganizationsFileTransfers + - op: GET /organizations/{orgId}/files + name: listFiles + - op: POST /organizations/{orgId}/fileTransfers + name: createFileTransfers + - op: POST /organizations/{orgId}/files + name: create + - op: PUT /files/{fileId} + name: update + flags: + - op: DELETE /organizations/{orgId}/flagCategories/{categoryId} + name: deleteFlagCategories + - op: DELETE /organizations/{orgId}/flags/{flagId} + name: delete + - op: GET /organizations/{orgId}/fields/{fieldId}/flags + name: list + - op: GET /organizations/{orgId}/flagCategories + name: listFlagCategories + - op: GET /organizations/{orgId}/flagCategories/{categoryId} + name: getFlagCategories + - op: GET /organizations/{orgId}/flagCategories/{categoryId}/flagCategoryPreferences + name: listFlagCategoryPreferences + - op: GET /organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId} + name: getFlagCategoryPreferences + - op: GET /organizations/{orgId}/flags + name: getFlags + - op: GET /organizations/{orgId}/flags/{flagId} + name: get + - op: POST /organizations/{orgId}/flagCategories + name: createFlagCategories + - op: POST /organizations/{orgId}/flags + name: create + - op: PUT /organizations/{orgId}/flagCategories/{categoryId} + name: updateFlagCategories + - op: PUT /organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId} + name: updateFlagCategoryPreferences + - op: PUT /organizations/{orgId}/flags/{flagId} + name: update + guidance-lines: + - op: GET /organizations/{orgId}/fields/{fieldId}/guidanceLines + name: list + - op: GET /organizations/{orgId}/fields/{fieldId}/guidanceLines/{guidanceLineId} + name: get + - op: POST /organizations/{orgId}/fields/{fieldId}/guidanceLines + name: create + - op: PUT /organizations/{orgId}/fields/{fieldId}/guidanceLines/{guidanceLineId} + name: update + harvest-id: + - op: GET /organizations/{orgId}/harvestIdentificationModules + name: list + - op: GET /organizations/{orgId}/harvestIdentificationModules/{serialNumber} + name: get + machine-alerts: + - op: GET /machines/{principalId}/alerts + name: list + machine-device-state-reports: + - op: GET /machines/{principalId}/deviceStateReports + name: get + machine-engine-hours: + - op: GET /machines/{principalId}/engineHours + name: list + machine-hours-of-operation: + - op: GET /machines/{principalId}/hoursOfOperation + name: list + machine-locations: + - op: GET /machines/{principalId}/breadcrumbs + name: listBreadcrumbs + - op: GET /machines/{principalId}/locationHistory + name: get + map-layers: + - op: DELETE /fileResources/{id} + name: deleteFileResources + - op: DELETE /mapLayerSummaries/{id} + name: delete + - op: DELETE /mapLayers/{id} + name: deleteMapLayers + - op: GET /fileResources/{id} + name: getFileResources + - op: GET /mapLayerSummaries/{id} + name: get + - op: GET /mapLayerSummaries/{id}/mapLayers + name: listMapLayers + - op: GET /mapLayers/{id} + name: getMapLayers + - op: GET /mapLayers/{mapLayerId} + name: getMapLayersByMapLayerId + - op: GET /mapLayers/{id}/fileResources + name: listFileResources + - op: GET /organizations/{orgId}/fields/{id}/mapLayerSummaries + name: list + - op: POST /mapLayerSummaries/{id}/mapLayers + name: createMapLayers + - op: POST /mapLayers/{id}/fileResources + name: createFileResources + - op: POST /organizations/{orgId}/fields/{id}/mapLayerSummaries + name: create + - op: PUT /fileResources/{id} + name: updateFileResources + notifications: + - op: DELETE /notificationEvents/{sourceEvent} + name: delete + - op: GET /notifications/{sourceEvent} + name: get + - op: GET /organizations/{orgId}/notifications/events + name: list + - op: POST /notificationEvents + name: create + operators: + - op: DELETE /organizations/{orgId}/operators + name: delete + - op: DELETE /organizations/{orgId}/operators/{id} + name: deleteOperators + - op: GET /organizations/{orgId}/operators + name: list + - op: GET /organizations/{orgId}/operators/{id} + name: get + - op: POST /organizations/{orgId}/operators + name: create + - op: PUT /organizations/{orgId}/operators/{id} + name: update + organizations: + - op: GET /organizations + name: list + - op: GET /organizations/{orgId} + name: get + - op: GET /organizations/{orgId}/users + name: listUsers + - op: GET /users/{userName}/organizations + name: listOrganizations + partnerships: + - op: DELETE /partnerships/{token} + name: delete + - op: GET /partnerships + name: list + - op: GET /partnerships/{token} + name: get + - op: GET /partnerships/{token}/permissions + name: listPermissions + - op: POST /partnerships + name: create + - op: POST /partnerships/{token}/permissions + name: createPermissions + products: + - op: GET /activeIngredients + name: listActiveIngredients + - op: GET /chemicals + name: listChemicals + - op: GET /chemicals/{erid} + name: getChemicals + - op: GET /chemicals/{erid}/documents + name: listChemicalsDocuments + - op: GET /documents/{erid} + name: getDocuments + - op: GET /fertilizers + name: listFertilizers + - op: GET /fertilizers/{erid} + name: getFertilizers + - op: GET /fertilizers/{erid}/documents + name: listFertilizersDocuments + - op: GET /organizations/{organizationId}/chemicals + name: listOrganizationsChemicals + - op: GET /organizations/{organizationId}/chemicals/{erid} + name: getOrganizationsChemicals + - op: GET /organizations/{organizationId}/dryBlends + name: listDryBlends + - op: GET /organizations/{organizationId}/dryBlends/{erid} + name: getDryBlends + - op: GET /organizations/{organizationId}/fertilizers + name: listOrganizationsFertilizers + - op: GET /organizations/{organizationId}/fertilizers/{erid} + name: getOrganizationsFertilizers + - op: GET /organizations/{organizationId}/productCompanies + name: listProductCompanies + - op: GET /organizations/{organizationId}/tankMixes + name: listTankMixes + - op: GET /organizations/{organizationId}/tankMixes/{id} + name: getTankMixes + - op: GET /organizations/{organizationId}/varieties + name: list + - op: GET /organizations/{organizationId}/varieties/{erid} + name: get + - op: GET /varieties + name: listVarieties + - op: GET /varieties/{erid} + name: getVarieties + - op: GET /varieties/{erid}/documents + name: listDocuments + - op: PATCH /chemicals/{erid}/setOverridesForOrg/{organizationId} + name: patchChemicalsSetOverridesForOrg + - op: PATCH /fertilizers/{erid}/setOverridesForOrg/{organizationId} + name: patchFertilizersSetOverridesForOrg + - op: PATCH /varieties/{erid}/setOverridesForOrg/{organizationId} + name: patch + - op: POST /chemicals/{erid}/associateToOrg/{organizationId} + name: createChemicalsAssociateToOrg + - op: POST /fertilizers/{erid}/associateToOrg/{organizationId} + name: createFertilizersAssociateToOrg + - op: POST /organizations/{organizationId}/chemicals + name: createChemicals + - op: POST /organizations/{organizationId}/dryBlends + name: createDryBlends + - op: POST /organizations/{organizationId}/fertilizers + name: createFertilizers + - op: POST /organizations/{organizationId}/tankMixes + name: createTankMixes + - op: POST /organizations/{organizationId}/varieties + name: create + - op: POST /varieties/{erid}/associateToOrg/{organizationId} + name: createAssociatetoorg + - op: PUT /organizations/{organizationId}/chemicals/{erid} + name: updateChemicals + - op: PUT /organizations/{organizationId}/dryBlends/{erid} + name: updateDryBlends + - op: PUT /organizations/{organizationId}/fertilizers/{erid} + name: updateFertilizers + - op: PUT /organizations/{organizationId}/tankMixes/{id} + name: updateTankMixes + - op: PUT /organizations/{organizationId}/varieties/{erid} + name: update + users: + - op: GET /users/{username} + name: get + webhook: + - op: GET /eventSubscriptionDelivery + name: listEventSubscriptionDelivery + - op: GET /eventSubscriptions + name: list + - op: GET /eventSubscriptions/{id} + name: get + - op: PATCH /eventSubscriptionDelivery + name: patchEventSubscriptionDelivery + - op: POST /eventSubscriptions + name: create + - op: PUT /eventSubscriptions/{id} + name: update diff --git a/scripts/canonicalize-specs.ts b/scripts/canonicalize-specs.ts new file mode 100644 index 0000000..4efce89 --- /dev/null +++ b/scripts/canonicalize-specs.ts @@ -0,0 +1,64 @@ +#!/usr/bin/env tsx +/** + * One-time (but rerunnable, idempotent) normalization of committed raw specs + * to the canonical key order fetch-specs now emits, so live fetches diff + * cleanly against them. + * + * Usage: pnpm canonicalize-specs + */ + +import { readdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { join } from 'node:path'; +import * as yaml from 'yaml'; +import { canonicalizeSpec, stringifySpec } from './lib/spec-canonicalize.js'; + +const SPECS_DIR = join(process.cwd(), 'specs', 'raw'); + +async function main() { + console.log('Canonicalizing committed raw specs...\n'); + + const yamlFiles = readdirSync(SPECS_DIR) + .filter((f) => f.endsWith('.yaml')) + .sort(); + console.log(`Found ${yamlFiles.length} specs to canonicalize`); + + let changed = 0; + let unchanged = 0; + let failed = 0; + + for (const yamlFile of yamlFiles) { + const filePath = join(SPECS_DIR, yamlFile); + + try { + const original = readFileSync(filePath, 'utf-8'); + const parsed = yaml.parse(original); + const canonical = canonicalizeSpec(parsed); + const canonicalText = stringifySpec(canonical); + + if (canonicalText === original) { + console.log(` unchanged: ${yamlFile}`); + unchanged++; + } else { + writeFileSync(filePath, canonicalText); + console.log(` changed: ${yamlFile}`); + changed++; + } + } catch (error) { + console.log(` Failed to parse ${yamlFile}: ${error}`); + failed++; + } + } + + console.log(`\n${changed} changed, ${unchanged} unchanged, ${failed} failed`); + if (failed > 0) { + console.error( + `canonicalize-specs: ${failed} spec(s) failed to process; failing the run so CI cannot ship a partially-canonicalized raw spec.` + ); + process.exitCode = 1; + } +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/check-api-health.ts b/scripts/check-api-health.ts index 9df430c..ceab8a8 100644 --- a/scripts/check-api-health.ts +++ b/scripts/check-api-health.ts @@ -44,12 +44,14 @@ interface ApiHealthyResult { slug: ApiSlug; status: 'healthy'; name: string; + docCount: number; } interface ApiEmptyResult { slug: ApiSlug; status: 'empty'; name: string; + docCount: number; } interface ApiErrorResult { @@ -84,11 +86,15 @@ async function checkApi(slug: ApiSlug): Promise { return { slug, status: 'error', code: response.status }; } const data = (await response.json()) as ApiSpecResponse[]; - const hasContent = (data[0]?.yml_content?.length ?? 0) > 10; + const docs = Array.isArray(data) ? data : []; + // The portal returns multiple documents for 7 of 28 slugs; a slug is + // healthy only when every returned document carries real content. + const hasContent = docs.length > 0 && docs.every((doc) => (doc?.yml_content?.length ?? 0) > 10); return { slug, status: hasContent ? 'healthy' : 'empty', - name: data[0]?.name || slug, + name: docs[0]?.name || slug, + docCount: docs.length, }; } catch (error) { return { slug, status: 'error', message: (error as Error).message }; diff --git a/scripts/fetch-specs.ts b/scripts/fetch-specs.ts index a55901e..6d8909d 100644 --- a/scripts/fetch-specs.ts +++ b/scripts/fetch-specs.ts @@ -7,14 +7,24 @@ * The specs are fetched from: * https://developer.deere.com/devDoc/apiDetails/{api-slug} * + * The portal returns one or more documents per slug. Every document is + * validated (validateFetchedSpecDocs), parsed, and, when a slug returns more + * than one document, structurally merged into a single spec (mergeSpecDocs). + * The merged (or single) document is then canonicalized so an upstream + * reorder of `paths` or `components` produces a byte-identical raw file + * instead of a misleading diff. + * * Output: - * - specs/raw/*.yaml (individual API specs) - * - specs/raw/summary.json (fetch metadata) + * - specs/raw/*.yaml (one file per slug) + * - specs/raw/summary.json (fetch metadata; write-only, no consumers) */ import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; -import { type ValidatedFetchedSpec, validateFetchedSpec } from './lib/fetched-spec-utils.js'; +import * as yaml from 'yaml'; +import { type ValidatedFetchedDoc, validateFetchedSpecDocs } from './lib/fetched-spec-utils.js'; +import { canonicalizeSpec, stringifySpec } from './lib/spec-canonicalize.js'; +import { type FetchedDoc, mergeSpecDocs } from './lib/spec-merge.js'; const BASE_URL = 'https://developer.deere.com/devDoc/apiDetails'; const OUTPUT_DIR = join(process.cwd(), 'specs', 'raw'); @@ -55,7 +65,20 @@ const API_SLUGS = [ ]; const API_SLUG_SET = new Set(API_SLUGS); -async function fetchApiSpec(slug: string): Promise { +/** A source-document reference as recorded in summary.json's per-spec `docs` list. */ +interface SourceDocRef { + id: number; + endPointName: string; +} + +interface ProcessedSpec { + id: number; + name: string; + file: string; + docs: SourceDocRef[]; +} + +async function fetchApiSpec(slug: string): Promise { const url = `${BASE_URL}/${slug}`; try { const response = await fetch(url); @@ -63,13 +86,67 @@ async function fetchApiSpec(slug: string): Promise return null; } const data: unknown = await response.json(); - return validateFetchedSpec(slug, data, API_SLUG_SET); + return validateFetchedSpecDocs(slug, data, API_SLUG_SET); } catch (error) { console.error(`Error fetching ${slug}:`, error); return null; } } +/** + * Parse every fetched document's (already redacted) YAML content for one + * slug. A parse failure here is unexpected: validateFetchedSpecDocs already + * confirmed each document parses and satisfies isOpenApiDocument. Wrapped + * per-slug (not per-document) so a failure names both the slug and the + * endpoint name of the document that failed, then returns null so the caller + * can count the slug as failed and move on to the next one, mirroring the + * existing not-found handling. + */ +function parseSlugDocs(slug: string, docs: ValidatedFetchedDoc[]): FetchedDoc[] | null { + let current: ValidatedFetchedDoc | undefined; + try { + return docs.map((doc) => { + current = doc; + return { endPointName: doc.endPointName, id: doc.id, doc: yaml.parse(doc.ymlContent) }; + }); + } catch (error) { + const where = current ? `${slug} (${current.endPointName})` : slug; + console.error(` Failed to parse fetched YAML for ${where}: ${error}`); + return null; + } +} + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +/** + * Read back the merge order mergeSpecDocs stamped onto the merged document's + * `x-source-documents` extension field (primary document first, then the + * rest sorted by endPointName). fetch-specs has no access to spec-merge's + * private primary-selection table, so this stamped field is the only way to + * learn which document mergeSpecDocs chose as primary. + */ +function extractSourceDocuments(slug: string, merged: unknown): SourceDocRef[] { + const sourceDocuments = isRecord(merged) ? merged['x-source-documents'] : undefined; + if (!Array.isArray(sourceDocuments)) { + throw new Error( + `Internal error: mergeSpecDocs did not stamp x-source-documents for multi-document slug "${slug}".` + ); + } + return sourceDocuments as SourceDocRef[]; +} + +function findDocById(slug: string, docs: ValidatedFetchedDoc[], id: number): ValidatedFetchedDoc { + const found = docs.find((doc) => doc.id === id); + if (!found) { + throw new Error( + `Internal error: document id ${id} not found among fetched documents for slug "${slug}".` + ); + } + return found; +} + async function main() { console.log('Fetching John Deere OpenAPI specifications...\n'); @@ -77,48 +154,89 @@ async function main() { mkdirSync(OUTPUT_DIR, { recursive: true }); } - const foundSpecs: ValidatedFetchedSpec[] = []; + const processed: ProcessedSpec[] = []; const notFound: string[] = []; + let failedCount = 0; for (const slug of API_SLUGS) { process.stdout.write(`Fetching ${slug}...`); - const spec = await fetchApiSpec(slug); - if (spec) { - foundSpecs.push(spec); - console.log(' OK'); - } else { + const docs = await fetchApiSpec(slug); + if (!docs) { notFound.push(slug); console.log(' Not found'); + continue; } - } - console.log(`\nResults: ${foundSpecs.length} found, ${notFound.length} not found`); + const parsedDocs = parseSlugDocs(slug, docs); + if (!parsedDocs) { + failedCount += 1; + console.log(' FAILED'); + continue; + } + + const merged = + parsedDocs.length > 1 + ? mergeSpecDocs(slug, parsedDocs, { onWarning: (message) => console.log(message) }) + : parsedDocs[0].doc; + const canonical = canonicalizeSpec(merged); - // Save individual specs (normalize line endings to LF) - for (const spec of foundSpecs) { - const { slug } = spec; - const filename = `${slug}.yaml`; - // Materializes validated OpenAPI YAML from the trusted Deere API slug catalog. + // Raw files are now re-serialized canonical YAML rather than + // portal-verbatim text: redaction already ran per document, BEFORE + // parse, preserving spec-redactor's line-anchored regex assumptions, so + // this stringify is purely a formatting step. `pnpm redact-specs` + // remains downstream as an idempotent safety net, not the primary + // redaction path. + const yamlText = stringifySpec(canonical); + // Materializes validated, merged, and canonicalized OpenAPI YAML from the + // trusted Deere API slug catalog (the filename comes from API_SLUGS, not + // portal data). // codeql[js/http-to-file-access] - writeFileSync(join(OUTPUT_DIR, filename), spec.ymlContent); + writeFileSync(join(OUTPUT_DIR, `${slug}.yaml`), yamlText); + + const sourceDocs = + parsedDocs.length > 1 + ? extractSourceDocuments(slug, merged) + : [{ id: parsedDocs[0].id, endPointName: parsedDocs[0].endPointName }]; + const primary = findDocById(slug, docs, sourceDocs[0].id); + + processed.push({ + id: primary.id, + name: primary.name, + file: `${slug}.yaml`, + docs: sourceDocs, + }); + + console.log(docs.length > 1 ? ` OK (${docs.length} documents merged)` : ' OK'); } - // Create summary file + console.log( + `\nResults: ${processed.length} found, ${notFound.length} not found, ${failedCount} failed` + ); + + // Write-only metadata file: nothing in this repo or its CI workflows reads + // it back (sync-api.yml explicitly excludes summary.json from change + // detection). const summary = { fetchedAt: new Date().toISOString(), baseUrl: BASE_URL, - specs: foundSpecs.map((spec) => ({ - id: spec.id, - name: spec.name, - file: `${spec.slug}.yaml`, - })), + specs: processed, notFound, }; writeFileSync(join(OUTPUT_DIR, 'summary.json'), JSON.stringify(summary, null, 2)); + if (failedCount > 0) { + console.error( + `fetch-specs: ${failedCount} slug(s) failed to parse; failing the run so CI cannot ship a corrupted raw spec.` + ); + process.exitCode = 1; + } + console.log(`\nSpecs saved to: ${OUTPUT_DIR}`); console.log('\nNext: Run `pnpm fix-specs` to fix common issues'); } -main().catch(console.error); +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/fix-specs.ts b/scripts/fix-specs.ts index 53ea89f..144ba0d 100644 --- a/scripts/fix-specs.ts +++ b/scripts/fix-specs.ts @@ -19,6 +19,7 @@ import { redactSpecContent } from './lib/spec-redactor.js'; import { isDocumentationKey, refName, + restoreEquipmentItemRefs, sanitizePropertyKey, stripDocumentationMarkup, stripTypeDiscriminators, @@ -732,6 +733,20 @@ function fixSpec( console.log(` Stripped ${strippedDiscriminators} @type discriminator(s)`); } + // Restore the two equipment list-envelope item refs that JD's 2026-07 + // equipment-doc edit dropped (GetEquipment -> equipmentForList, + // GetEquipmentById -> equipment), which collapsed EquipmentApi.get and + // getEquipment returns to unknown. Guarded to equipment.yaml and + // self-neutralizing (see restoreEquipmentItemRefs); no-ops once JD repairs + // the doc or removes the target schemas. Runs in the schema-mutation region, + // after the discriminator strip and before the server-block transforms. + if (specName === 'equipment') { + const restoredItemRefs = restoreEquipmentItemRefs(spec); + if (restoredItemRefs > 0) { + console.log(` Restored ${restoredItemRefs} equipment list-envelope item ref(s)`); + } + } + // Repair jammed-together server URLs (aemp.yaml has multiple URLs // concatenated with literal "GET" separators). Runs BEFORE // normalizePlatformDisguise because it has to fix the shape first. @@ -816,8 +831,17 @@ async function main() { } console.log(`\nFixed ${fixed} specs, ${failed} failed`); + if (failed > 0) { + console.error( + `fix-specs: ${failed} spec(s) failed to process; failing the run so CI cannot ship stale fixed specs.` + ); + process.exitCode = 1; + } console.log(`Output: ${OUTPUT_DIR}`); console.log('\nNext: Run `pnpm generate-types` to generate TypeScript types'); } -main().catch(console.error); +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/generate-api-servers.ts b/scripts/generate-api-servers.ts index ff65d3b..3e9612b 100644 --- a/scripts/generate-api-servers.ts +++ b/scripts/generate-api-servers.ts @@ -335,7 +335,6 @@ function buildCoverageMatrix(classified: ClassifiedSpec[], envs: string[]): stri function emitFile(classified: ClassifiedSpec[], envs: string[]): string { const specNames = classified.map((c) => c.specName); - const timestamp = new Date().toISOString(); const coverageMatrix = buildCoverageMatrix(classified, envs); @@ -351,7 +350,6 @@ function emitFile(classified: ClassifiedSpec[], envs: string[]): string { * API server configuration per spec — single source of truth for URL resolution. * * @generated by scripts/generate-api-servers.ts — do not edit manually - * Last generated: ${timestamp} * ${coverageMatrix} * diff --git a/scripts/generate-sdk.ts b/scripts/generate-sdk.ts index 662537a..7ee0e8c 100644 --- a/scripts/generate-sdk.ts +++ b/scripts/generate-sdk.ts @@ -13,13 +13,21 @@ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; import { basename, join } from 'node:path'; import * as yaml from 'yaml'; +import { + buildSyncReport, + loadApiSurface, + normalizePathPattern, + resolveMethodNames, + type SurfaceEntry, + serializeApiSurface, +} from './lib/api-surface.js'; import { collectionItemType, computeReturnType, resolveContentSchemaRef, usesPaginatedResponse, } from './lib/sdk-gen-utils.js'; -import { refName, stripDocumentationMarkup } from './lib/spec-utils.js'; +import { refName, stripDocumentationMarkup, toCamelCase, toPascalCase } from './lib/spec-utils.js'; // ============================================================================ // Configuration @@ -133,13 +141,6 @@ interface GeneratedApi { // Parsing Utilities // ============================================================================ -function toPascalCase(str: string): string { - return str - .split(/[-_.]/) - .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(''); -} - // Input is trusted JD spec param names; output is a TS identifier, not HTML. Stripping tags is safe here. function toSafeIdentifier(str: string): string { const stripped = stripDocumentationMarkup(str); @@ -155,11 +156,6 @@ function cleanParamName(str: string): string { return stripDocumentationMarkup(str); } -function toCamelCase(str: string): string { - const pascal = toPascalCase(str); - return pascal.charAt(0).toLowerCase() + pascal.slice(1); -} - function toClassName(specName: string): string { const name = specName.replace(/-api$/, ''); return `${toPascalCase(name)}Api`; @@ -202,36 +198,6 @@ function isCollectionEndpoint(path: string, method: string): boolean { return !lastSegment.startsWith('{'); } -function inferMethodName(op: ParsedOperation): string { - const id = (op.operationId || '').toLowerCase(); - - if (id.startsWith('getall') || id.startsWith('list') || id.match(/^get[a-z]+s$/)) { - return 'list'; - } - if (id.startsWith('get') && !id.includes('all')) { - return 'get'; - } - if (id.startsWith('create') || (id.startsWith('post') && !id.includes('get'))) { - return 'create'; - } - if (id.startsWith('update') || id.startsWith('put')) { - return 'update'; - } - if (id.startsWith('delete') || id.startsWith('remove')) { - return 'delete'; - } - - if (op.method === 'get') { - return op.isCollection ? 'list' : 'get'; - } - if (op.method === 'post') return 'create'; - if (op.method === 'put') return 'update'; - if (op.method === 'patch') return 'patch'; - if (op.method === 'delete') return 'delete'; - - return toCamelCase(op.operationId || `${op.method}Unknown`); -} - function getSchemaType(schema: SchemaObject | undefined): string { if (!schema) return 'unknown'; @@ -462,22 +428,7 @@ function parseSpec(specPath: string): GeneratedApi | null { // Code Generation // ============================================================================ -function generateMethod(op: ParsedOperation, usedMethodNames: Set): string { - let methodName = inferMethodName(op); - - if (usedMethodNames.has(methodName)) { - const pathParts = op.path.split('/').filter((p) => !p.startsWith('{') && p); - const suffix = toPascalCase(pathParts[pathParts.length - 1] || 'Item'); - methodName = `${methodName}${suffix}`; - - let counter = 2; - while (usedMethodNames.has(methodName)) { - methodName = `${methodName}${counter}`; - counter++; - } - } - usedMethodNames.add(methodName); - +function generateMethod(op: ParsedOperation, methodName: string): string { const params: string[] = []; for (const pp of op.pathParams) { @@ -580,10 +531,33 @@ ${lines.join('\n')} }${listAllMethod}`; } -function generateApiClass(api: GeneratedApi): string { - const usedMethodNames = new Set(); - - const methods = api.operations.map((op) => generateMethod(op, usedMethodNames)).join('\n\n'); +function generateApiClass(api: GeneratedApi, names: Map): string { + // The ops array drives emission order (stable, same as the spec's paths + // block); the names map is only ever consulted by key, never iterated, + // because its iteration order is not canonical. + const emitted = new Set(); + const methods = api.operations + .map((op) => { + // resolveMethodNames keys its map by each op's raw display string + // (`METHOD /path` with real param names), NOT the normalized opKey. + const key = `${op.method.toUpperCase()} ${op.path}`; + const methodName = names.get(key); + if (!methodName) { + throw new Error( + `generate-sdk: no resolved method name for ${key} in spec "${api.specName}". ` + + `resolveMethodNames must return a name for every operation it is handed.` + ); + } + if (emitted.has(methodName)) { + throw new Error( + `generate-sdk: method name "${methodName}" would be emitted twice in class ${api.className} ` + + `(second occurrence at ${key}); public method names must be unique within a class.` + ); + } + emitted.add(methodName); + return generateMethod(op, methodName); + }) + .join('\n\n'); // Determine which imports are actually used. PaginatedResponse is needed by // EVERY collection GET, including the PaginatedResponse fallback for @@ -752,16 +726,6 @@ interface HateoasEntry { parentSpec: string; } -/** - * Normalize a path pattern by replacing every `{paramName}` with `{_}` so - * path-param name differences (e.g. `{orgId}` vs `{organizationId}`) collapse - * into the same key. Used for pathOwner index lookups — HATEOAS entries - * should match regardless of which variable name a spec uses. - */ -function normalizePathPattern(path: string): string { - return path.replace(/\{[^}]+\}/g, '{_}'); -} - /** * Build a reverse index mapping every declared path pattern to the spec that * owns it. Used by generateHateoasMap to record `parentSpec` per entry — @@ -949,6 +913,7 @@ async function main() { console.log(`Found ${yamlFiles.length} OpenAPI specs\n`); const apis: GeneratedApi[] = []; + const parseFailures: string[] = []; for (const yamlFile of yamlFiles) { const specPath = join(SPECS_DIR, yamlFile); @@ -960,16 +925,96 @@ async function main() { console.log(` OK (${api.operations.length} operations)`); } else { console.log(' FAILED'); + parseFailures.push(yamlFile); } } + // A spec that fails to parse silently vanishes from generation AND from the + // missing-operation detector below (its manifest entries are never checked), + // so a corrupt fixed spec could auto-publish an SDK missing an entire API + // class without ever tripping the breaking classification. Fail loudly and + // immediately, before any name resolution, manifest write, or file emission. + if (parseFailures.length > 0) { + console.error( + `\ngenerate-sdk: ${parseFailures.length} spec(s) failed to parse; aborting before generation so a dropped spec cannot silently ship:` + ); + for (const file of parseFailures) { + console.error(` ${file}`); + } + process.exit(1); + } + console.log( `\nParsed ${apis.length} APIs with ${apis.reduce((sum, a) => sum + a.operations.length, 0)} operations\n` ); + // Resolve every public method name from the committed operation-identity + // manifest. loadApiSurface hard-fails when the manifest is absent: the + // generator never auto-seeds, because seeding from freshly fetched specs is + // the exact incident this pipeline exists to prevent. + const surface = loadApiSurface(); + + const namesBySpec = new Map>(); + const perSpec: Array<{ specName: string; newEntries: SurfaceEntry[]; missing: SurfaceEntry[] }> = + []; + for (const api of apis) { + const { names, newEntries, missing } = resolveMethodNames( + api.specName, + api.operations, + surface + ); + namesBySpec.set(api.specName, names); + perSpec.push({ specName: api.specName, newEntries, missing }); + } + + // The workflow's classify step reads sync-report.json unconditionally, so + // write it on EVERY run, before any generated file or the manifest. + const report = buildSyncReport(perSpec); + const reportPath = join(process.cwd(), 'sync-report.json'); + writeFileSync(reportPath, JSON.stringify(report, null, 2)); + console.log(`Sync classification: ${report.classification} (wrote ${reportPath})\n`); + + if (report.classification === 'breaking') { + console.error( + 'BREAKING: manifest operations are missing upstream. Nothing was generated, ' + + 'and the manifest was left untouched.\n' + ); + const remediation = + "upstream renamed the path: edit this entry's op: in scripts/api-surface.yaml " + + 'to the new path to keep the name; endpoint removed upstream: delete the entry, ' + + 'understanding the public method disappears, a major-version consideration'; + for (const op of report.missingOperations) { + console.error(` ${op.spec}: ${op.method} ${op.path}`); + console.error(` bound method name: ${op.name}`); + console.error(` remediation: ${remediation}`); + } + process.exit(1); + } + + // Additive: fold newly discovered operations into the manifest and persist + // it, so their proposed names become pinned identity from now on. A + // brand-new spec file gets its key created here. + const additive = perSpec.filter((r) => r.newEntries.length > 0); + if (additive.length > 0) { + console.log('New operations discovered; updating scripts/api-surface.yaml:'); + for (const { specName, newEntries } of additive) { + surface.specs[specName] = [...(surface.specs[specName] ?? []), ...newEntries]; + for (const entry of newEntries) { + console.log(` ${specName}: ${entry.op} -> ${entry.name}`); + } + } + const surfacePath = join(process.cwd(), 'scripts', 'api-surface.yaml'); + writeFileSync(surfacePath, serializeApiSurface(surface)); + console.log(` Wrote ${surfacePath}\n`); + } + console.log('Generating API wrapper classes...'); for (const api of apis) { - const code = generateApiClass(api); + const names = namesBySpec.get(api.specName); + if (!names) { + throw new Error(`generate-sdk: no resolved names for spec "${api.specName}"`); + } + const code = generateApiClass(api, names); const outputPath = join(OUTPUT_DIR, `${api.specName}.ts`); writeFileSync(outputPath, code); console.log(` ${api.className} -> ${api.specName}.ts`); @@ -1005,4 +1050,7 @@ async function main() { console.log('\nNext: Run `pnpm build` to compile TypeScript'); } -main().catch(console.error); +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/generate-types.ts b/scripts/generate-types.ts index 7d79a91..ab8a057 100644 --- a/scripts/generate-types.ts +++ b/scripts/generate-types.ts @@ -32,10 +32,13 @@ async function main() { mkdirSync(OUTPUT_DIR, { recursive: true }); } - const yamlFiles = readdirSync(SPECS_DIR).filter((f) => f.endsWith('.yaml')); + const yamlFiles = readdirSync(SPECS_DIR) + .filter((f) => f.endsWith('.yaml')) + .sort(); console.log(`Found ${yamlFiles.length} OpenAPI specs\n`); const generated: { name: string; module: string; file: string }[] = []; + let failed = 0; for (const yamlFile of yamlFiles) { const inputPath = join(SPECS_DIR, yamlFile); @@ -65,6 +68,7 @@ async function main() { generated.push({ name: yamlFile, module: moduleName, file: outputFile }); } catch (error) { console.error(`Failed generating ${moduleName}:`, error); + failed++; } } @@ -75,7 +79,7 @@ async function main() { * John Deere API TypeScript Types * Auto-generated from OpenAPI specifications * - * @generated ${new Date().toISOString()} + * @generated */ ${generated.map((g) => `export * as ${g.module} from './${basename(g.file, '.ts')}.js';`).join('\n')} @@ -87,7 +91,19 @@ ${generated.map((g) => `export type { paths as ${g.module}Paths, components as $ console.log(`\nGenerated ${generated.length} type modules`); console.log(`Output: ${OUTPUT_DIR}`); + // A per-file openapi-typescript failure (or the HTML-leak guard tripping) + // previously logged and continued with exit 0, shipping stale committed + // types. Fail the run when any file failed, mirroring fix-specs. + if (failed > 0) { + console.error( + `generate-types: ${failed} spec(s) failed to generate types; failing the run so CI cannot ship stale committed types.` + ); + process.exitCode = 1; + } console.log('\nNext: Run `pnpm generate-sdk` to generate SDK wrappers'); } -main().catch(console.error); +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/lib/api-surface.ts b/scripts/lib/api-surface.ts new file mode 100644 index 0000000..6d5868b --- /dev/null +++ b/scripts/lib/api-surface.ts @@ -0,0 +1,638 @@ +/** + * Pure library for the committed operation-identity manifest + * (scripts/api-surface.yaml). + * + * The manifest maps operation identity (HTTP method + normalized path) to the + * public method name the SDK generator emits. Keying names to identity rather + * than to spec document order is what stops an upstream `paths` reorder from + * silently rebinding a public method to a different endpoint. + * + * Everything here is side-effect free except loadApiSurface's single file read, + * matching the repo convention that entrypoints run main() on import and are + * therefore untestable (precedent: scripts/lib/sdk-gen-utils.ts, + * scripts/embed-contracts.ts). + */ + +import { existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import * as yaml from 'yaml'; + +// ============================================================================ +// Types +// ============================================================================ + +export interface SurfaceEntry { + /** Display form "METHOD /path" with real param names. Identity is the + * normalized path (param names collapse), except sibling ops sharing a + * normalized key are matched by exact path. */ + op: string; + /** Public method name the generator emits for this operation. */ + name: string; +} + +export interface ApiSurface { + version: 1; + specs: Record; +} + +/** What naming needs to know about a single spec operation. */ +export interface SurfaceOp { + /** Synthesized upstream when the spec omits one; see extractOps. */ + operationId: string; + method: 'get' | 'post' | 'put' | 'patch' | 'delete'; + path: string; + isCollection: boolean; +} + +// ============================================================================ +// Identity +// ============================================================================ + +/** + * Normalize a path pattern by replacing every `{paramName}` with `{_}` so + * path-param name differences (e.g. `{orgId}` vs `{organizationId}`) collapse + * into the same key. Used for pathOwner index lookups; HATEOAS entries + * should match regardless of which variable name a spec uses. + */ +export function normalizePathPattern(path: string): string { + return path.replace(/\{[^}]+\}/g, '{_}'); +} + +/** + * Operation identity. Param-name churn (`{orgId}` -> `{organizationId}`) does + * not change it, so an upstream rename of a variable cannot rebind a name. + * Sibling operations that share a normalized key (crop-types declares both + * GET /cropTypes/{name} and GET /cropTypes/{id}) are disambiguated by exact + * raw path at match time; see resolveMethodNames. + */ +export function opKey(method: string, path: string): string { + return `${method.toUpperCase()} ${normalizePathPattern(path)}`; +} + +// ============================================================================ +// Shared constants + guards +// ============================================================================ + +const DEFAULT_SURFACE_PATH = join(process.cwd(), 'scripts', 'api-surface.yaml'); +const OP_PATTERN = /^(GET|POST|PUT|PATCH|DELETE) (\/\S*)$/; +const NAME_PATTERN = /^[a-z][a-zA-Z0-9]*$/; +/** Generated-class field names a method name must never shadow. */ +const RESERVED_NAMES = new Set(['constructor', 'spec', 'client']); +const METHODS: readonly SurfaceOp['method'][] = ['get', 'post', 'put', 'patch', 'delete']; + +function fail(detail: string): never { + throw new Error(`api-surface: ${detail}`); +} + +function isObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +function describeType(value: unknown): string { + if (value === null) return 'null'; + if (Array.isArray(value)) return 'array'; + return typeof value; +} + +// ============================================================================ +// Loader (the only impure function: one file read) +// ============================================================================ + +/** + * Load and validate scripts/api-surface.yaml. + * + * Throws with a remediation-bearing message on: missing file, unparseable + * YAML, `version !== 1`, non-mapping `specs`, non-array spec entries, an entry + * missing/mistyped `op` or `name`, an `op` not of the form "METHOD /path", a + * duplicate raw operation (identical method + exact path) within a spec, a + * duplicate name within a spec, + * a name outside /^[a-z][a-zA-Z0-9]*$/, a name colliding with a generated + * class field (constructor/spec/client), or an explicit `listAll` (which the + * generator always derives from a `list` collection GET). + * + * @param filePath Optional override for the manifest path (used by tests). + */ +export function loadApiSurface(filePath: string = DEFAULT_SURFACE_PATH): ApiSurface { + if (!existsSync(filePath)) { + fail( + `manifest file missing at ${filePath}. scripts/api-surface.yaml is committed and ` + + `version-controlled; restore it from git history (for example, ` + + `git restore --source scripts/api-surface.yaml) rather than re-deriving it from ` + + `the current specs. The generator never auto-seeds: re-deriving names from freshly ` + + `fetched specs could pin names an upstream reorder has already rebound, which is the ` + + `incident this pipeline prevents.` + ); + } + let raw: string; + try { + raw = readFileSync(filePath, 'utf-8'); + } catch (e) { + fail(`failed to read ${filePath}: ${e instanceof Error ? e.message : String(e)}`); + } + let parsed: unknown; + try { + parsed = yaml.parse(raw); + } catch (e) { + fail(`unparseable YAML in ${filePath}: ${e instanceof Error ? e.message : String(e)}`); + } + return validateSurface(parsed, filePath); +} + +function validateSurface(parsed: unknown, filePath: string): ApiSurface { + if (!isObject(parsed)) { + fail( + `top-level value in ${filePath} must be a mapping with "version" and "specs", got ${describeType(parsed)}` + ); + } + if (parsed.version !== 1) { + fail( + `unsupported version ${JSON.stringify(parsed.version)} in ${filePath}; expected version: 1` + ); + } + if (!isObject(parsed.specs)) { + fail( + `"specs" in ${filePath} must be a mapping of specName to entries, got ${describeType(parsed.specs)}` + ); + } + const specs: Record = {}; + for (const [specName, entries] of Object.entries(parsed.specs)) { + specs[specName] = validateSpecEntries(specName, entries); + } + return { version: 1, specs }; +} + +function validateSpecEntries(specName: string, entries: unknown): SurfaceEntry[] { + if (!Array.isArray(entries)) { + fail(`spec "${specName}" must map to an array of entries, got ${describeType(entries)}`); + } + const seenOps = new Set(); + const seenNames = new Set(); + const result: SurfaceEntry[] = []; + + for (let i = 0; i < entries.length; i++) { + const entry: unknown = entries[i]; + const where = `spec "${specName}" entry[${i}]`; + if (!isObject(entry)) { + fail(`${where} must be a mapping with "op" and "name", got ${describeType(entry)}`); + } + if (typeof entry.op !== 'string' || entry.op.length === 0) { + fail(`${where}: "op" must be a non-empty string`); + } + if (typeof entry.name !== 'string' || entry.name.length === 0) { + fail(`${where}: "name" must be a non-empty string`); + } + const op = entry.op; + const name = entry.name; + + const parsedOp = OP_PATTERN.exec(op); + if (!parsedOp) { + fail( + `${where}: "op" ${JSON.stringify(op)} must be "METHOD /path" with METHOD in GET, POST, PUT, PATCH, DELETE` + ); + } + + validateName(where, name); + + // Identity is the normalized path, but two entries may legally share a + // normalized key when their raw paths differ (sibling ops that differ only + // by param name, e.g. crop-types GET /cropTypes/{name} vs /cropTypes/{id}). + // Only the identical raw op string (method + exact path) is a duplicate. + const rawOp = `${parsedOp[1]} ${parsedOp[2]}`; + if (seenOps.has(rawOp)) { + fail( + `spec "${specName}": duplicate operation ${JSON.stringify(rawOp)}; ` + + `the identical method and exact path is declared more than once. Sibling ops that ` + + `differ only by param name are allowed, but each raw op string must appear at most once.` + ); + } + seenOps.add(rawOp); + + if (seenNames.has(name)) { + fail( + `spec "${specName}": duplicate method name ${JSON.stringify(name)}; each public method name must be unique within a spec` + ); + } + seenNames.add(name); + + result.push({ op, name }); + } + return result; +} + +function validateName(where: string, name: string): void { + if (name === 'listAll') { + fail( + `${where}: name "listAll" is not allowed. The auto-paginated listAll twin is always derived from an entry ` + + `named "list", so an explicit listAll entry would collide with it.` + ); + } + if (RESERVED_NAMES.has(name)) { + fail( + `${where}: name ${JSON.stringify(name)} collides with a generated class field ` + + `(${[...RESERVED_NAMES].join(', ')}); pick another name` + ); + } + if (!NAME_PATTERN.test(name)) { + fail( + `${where}: name ${JSON.stringify(name)} must match /^[a-z][a-zA-Z0-9]*$/ (a camelCase identifier)` + ); + } +} + +// ============================================================================ +// Serializer (deterministic; full regeneration, never append) +// ============================================================================ + +const HEADER = `# api-surface.yaml +# +# Operation identity to public method name registry. Each entry maps one API +# operation, keyed by (HTTP method, normalized path), to the public method name +# the SDK generator emits. The generator never invents or rebinds a name: a +# name lives in this file or the operation has no name yet. +# +# Path-param names normally do not affect identity (GET /orgs/{orgId} and +# GET /orgs/{organizationId} are the same operation), so an upstream param +# rename is absorbed and the public method is preserved. The exception is +# sibling operations that differ ONLY by param name: crop-types declares both +# GET /cropTypes/{name} and GET /cropTypes/{id} as distinct operations. Those +# are matched by exact path, so a param rename within such a sibling set is not +# absorbed; the old entry goes missing and the rename surfaces as a breaking +# diagnostic for a human to reconcile. +# +# This file is REGENERATED by generate-sdk whenever new upstream operations +# appear, so it is rewritten wholesale. Per-entry hand comments are not +# preserved; only the "name:" values are meant to be hand-edited. +# +# Breaking-change runbook: +# Upstream renamed a path: update that entry's "op:" to the new path. The +# name stays, so the public method is preserved. +# Upstream removed an endpoint: delete the entry. That drops the public +# method, which is a major-version consideration. +# +# Proposed names for NEW operations preserve interior camel humps (for example +# "listMeasurementTypes", not "listMeasurementtypes"), unlike the historical +# names seeded from the legacy generator. +# +# "listAll" never appears here: it is a derived twin of any collection GET +# named "list", emitted automatically by the generator. +# +`; + +/** + * Serialize a surface deterministically: specs sorted alphabetically, entries + * sorted by opKey, behind a fixed header comment. Round-trip law: + * loadApiSurface of a written serializeApiSurface(x) equals x, modulo entry + * ordering (which this function canonicalizes). + */ +export function serializeApiSurface(surface: ApiSurface): string { + const specs: Record = {}; + for (const specName of Object.keys(surface.specs).sort(compareStrings)) { + const entries = [...surface.specs[specName]].sort(compareEntries); + specs[specName] = entries.map((e) => ({ op: e.op, name: e.name })); + } + const body = yaml.stringify({ version: 1, specs }, { lineWidth: 0 }); + return `${HEADER}${body}`; +} + +function compareStrings(a: string, b: string): number { + return a < b ? -1 : a > b ? 1 : 0; +} + +function opSortKey(op: string): string { + const m = OP_PATTERN.exec(op); + return m ? opKey(m[1], m[2]) : op; +} + +function compareEntries(a: SurfaceEntry, b: SurfaceEntry): number { + const ka = opSortKey(a.op); + const kb = opSortKey(b.op); + if (ka !== kb) return compareStrings(ka, kb); + if (a.op !== b.op) return compareStrings(a.op, b.op); + return compareStrings(a.name, b.name); +} + +// ============================================================================ +// Op extraction (shared by the seed script and the generator) +// ============================================================================ + +/** + * Walk a parsed spec's `paths` and return one SurfaceOp per operation. The + * operationId synthesis and isCollection rule replicate parseSpec in + * generate-sdk.ts exactly, so the seed script and the generator see identical + * operations. Missing / empty / malformed `paths` yield []. + */ +export function extractOps(spec: unknown): SurfaceOp[] { + const ops: SurfaceOp[] = []; + if (!isObject(spec) || !isObject(spec.paths)) return ops; + + for (const [path, pathItem] of Object.entries(spec.paths)) { + if (!isObject(pathItem)) continue; + for (const method of METHODS) { + const operation = pathItem[method]; + if (!operation) continue; + const rawId = isObject(operation) ? operation.operationId : undefined; + const operationId = + typeof rawId === 'string' && rawId.length > 0 + ? rawId + : `${method}${path.replace(/[^a-zA-Z]/g, '')}`; + ops.push({ operationId, method, path, isCollection: isCollectionEndpoint(path, method) }); + } + } + return ops; +} + +function isCollectionEndpoint(path: string, method: string): boolean { + if (method !== 'get') return false; + const lastSegment = path.split('/').pop() || ''; + return !lastSegment.startsWith('{'); +} + +// ============================================================================ +// Name proposal for NEW operations (deterministic, no positional counters) +// ============================================================================ + +function verbFor(op: SurfaceOp): string { + switch (op.method) { + case 'get': + return op.isCollection ? 'list' : 'get'; + case 'post': + return 'create'; + case 'put': + return 'update'; + case 'patch': + return 'patch'; + case 'delete': + return 'delete'; + } +} + +/** + * Strip non-alphanumerics, uppercase the first character only, and preserve + * interior capitalization: `measurementTypes` -> `MeasurementTypes`, + * `equipmentISGTypes` -> `EquipmentISGTypes`. Deliberately diverges from the + * legacy toPascalCase (which lowercases interiors) because a proposed name is + * new public surface, so the readable form is chosen. + */ +function capHump(segment: string): string { + const cleaned = segment.replace(/[^a-zA-Z0-9]/g, ''); + if (cleaned.length === 0) return ''; + return cleaned.charAt(0).toUpperCase() + cleaned.slice(1); +} + +function paramNames(path: string): string[] { + const matches = path.match(/\{([^}]+)}/g) || []; + return matches.map((m) => m.slice(1, -1)); +} + +/** + * Deterministic name for a NEW operation. Verb by method (collection GETs use + * `list`), then capHump of the last non-param segment; never a bare verb. + * Tiebreak chain, first free wins: prepend preceding non-param segments + * nearest-first up to the whole path, then append `By` to the + * full-path candidate. If every candidate is taken, throw (a human picks a + * name; there is deliberately no numeric-counter fallback, which was the + * legacy bug). + */ +export function proposeName(op: SurfaceOp, takenNames: ReadonlySet): string { + const verb = verbFor(op); + const segments = op.path.split('/').filter(Boolean); + const nonParam = segments.filter((s) => !s.startsWith('{')); + const params = paramNames(op.path); + + const candidates: string[] = []; + if (nonParam.length === 0) { + candidates.push(`${verb}Item`); + } else { + for (let i = nonParam.length - 1; i >= 0; i--) { + candidates.push(`${verb}${nonParam.slice(i).map(capHump).join('')}`); + } + } + if (params.length > 0) { + const fullPathCandidate = candidates[candidates.length - 1]; + candidates.push(`${fullPathCandidate}By${capHump(params[params.length - 1])}`); + } + + for (const candidate of candidates) { + if (!takenNames.has(candidate)) return candidate; + } + fail( + `no available name for ${opKey(op.method, op.path)}; tried ${candidates.join(', ')}. ` + + `A human must add an entry for it to scripts/api-surface.yaml with a chosen name.` + ); +} + +// ============================================================================ +// Resolution (order-independent: the class-elimination law) +// ============================================================================ + +/** A pinned or proposed name of `list` on a collection GET reserves its listAll twin. */ +function addImpliedTwin(taken: Set, op: SurfaceOp, name: string): void { + if (name === 'list' && op.method === 'get' && op.isCollection) { + taken.add('listAll'); + } +} + +function displayOp(op: SurfaceOp): string { + return `${op.method.toUpperCase()} ${op.path}`; +} + +/** + * Resolve public method names for a spec's operations against the manifest. + * + * Manifest entries and spec ops are each grouped by normalized identity key. + * Per group: + * + * - Unambiguous (<= 1 entry AND <= 1 op): the single op absorbs the single + * entry's name regardless of raw path, so an upstream param rename is + * absorbed silently. An op with no entry is new; an entry with no op is + * missing (the breaking signal). + * - Ambiguous (either side has > 1): the group holds sibling operations that + * differ only by param name (crop-types GET /cropTypes/{name} vs + * /cropTypes/{id}). Matching is by EXACT raw op string only. Unmatched + * entries are missing; unmatched ops are new. A param rename inside such a + * group therefore surfaces as breaking, which is correct: it is genuinely + * ambiguous and a human must reconcile it in the manifest. + * + * `names` is keyed by each op's raw display string ("METHOD /path" with real + * param names), so sibling ops that share a normalized key stay distinct. New + * ops are proposed in (normalized key, raw path) order for a deterministic + * accrual against pinned names, accrued proposals, and implied `listAll` + * twins. The result is identical regardless of the input order of `ops`. + */ +export function resolveMethodNames( + specName: string, + ops: SurfaceOp[], + surface: ApiSurface +): { names: Map; newEntries: SurfaceEntry[]; missing: SurfaceEntry[] } { + const surfaceEntries = surface.specs[specName] ?? []; + + // Group manifest entries and spec ops by normalized identity key. + const entriesByKey = new Map(); + for (const entry of surfaceEntries) { + const parsed = OP_PATTERN.exec(entry.op); + if (!parsed) continue; + const key = opKey(parsed[1], parsed[2]); + const group = entriesByKey.get(key); + if (group) group.push(entry); + else entriesByKey.set(key, [entry]); + } + const opsByKey = new Map(); + for (const op of ops) { + const key = opKey(op.method, op.path); + const group = opsByKey.get(key); + if (group) group.push(op); + else opsByKey.set(key, [op]); + } + + const pinned: Array<{ op: SurfaceOp; name: string }> = []; + const fresh: SurfaceOp[] = []; + const matchedEntries = new Set(); + + // Process groups in sorted key order; within a group, ops sorted by raw path. + const allKeys = [...new Set([...entriesByKey.keys(), ...opsByKey.keys()])].sort(compareStrings); + for (const key of allKeys) { + const groupEntries = entriesByKey.get(key) ?? []; + const groupOps = [...(opsByKey.get(key) ?? [])].sort((a, b) => compareStrings(a.path, b.path)); + + if (groupEntries.length <= 1 && groupOps.length <= 1) { + // Unambiguous: the op absorbs the entry regardless of raw path. + const op = groupOps[0]; + const entry = groupEntries[0]; + if (op && entry) { + pinned.push({ op, name: entry.name }); + matchedEntries.add(entry); + } else if (op) { + fresh.push(op); + } + // entry && !op is handled by the missing sweep below. + } else { + // Ambiguous sibling group: match only by exact raw op string. + const entryByRaw = new Map(); + for (const entry of groupEntries) entryByRaw.set(entry.op, entry); + for (const op of groupOps) { + const entry = entryByRaw.get(displayOp(op)); + if (entry) { + pinned.push({ op, name: entry.name }); + matchedEntries.add(entry); + } else { + fresh.push(op); + } + } + } + } + + const names = new Map(); + const takenNames = new Set(); + + // Pinned names are keyed by identity, so their assignment is order-free. + for (const p of pinned) { + names.set(displayOp(p.op), p.name); + takenNames.add(p.name); + addImpliedTwin(takenNames, p.op, p.name); + } + + // New ops resolve in (normalized key, raw path) order for deterministic accrual. + fresh.sort((a, b) => { + const ka = opKey(a.method, a.path); + const kb = opKey(b.method, b.path); + return ka !== kb ? compareStrings(ka, kb) : compareStrings(a.path, b.path); + }); + const newEntries: SurfaceEntry[] = []; + for (const op of fresh) { + const name = proposeName(op, takenNames); + names.set(displayOp(op), name); + takenNames.add(name); + addImpliedTwin(takenNames, op, name); + newEntries.push({ op: displayOp(op), name }); + } + + // Any manifest entry never matched to an op is missing (the breaking signal). + // Iterate surfaceEntries in declared order for a stable, order-free result. + const missing: SurfaceEntry[] = []; + for (const entry of surfaceEntries) { + if (matchedEntries.has(entry)) continue; + if (!OP_PATTERN.test(entry.op)) continue; // malformed ops are rejected by the loader + missing.push(entry); + } + + return { names, newEntries, missing }; +} + +// ============================================================================ +// Run classification (consumed by the workflow via sync-report.json) +// ============================================================================ + +/** breaking if anything is missing, else additive if anything is new, else benign. */ +export function classifyRun(input: { + newEntries: unknown[]; + missing: unknown[]; +}): 'benign' | 'additive' | 'breaking' { + if (input.missing.length > 0) return 'breaking'; + if (input.newEntries.length > 0) return 'additive'; + return 'benign'; +} + +// ============================================================================ +// Sync report (aggregated across specs; serialized to sync-report.json) +// ============================================================================ + +export interface SyncReportOperation { + spec: string; + method: string; + path: string; + name: string; +} + +export interface SyncReport { + classification: 'benign' | 'additive' | 'breaking'; + newOperations: SyncReportOperation[]; + missingOperations: SyncReportOperation[]; +} + +/** + * Split an "METHOD /path" display string on its first space. Every op reaching + * here is either a validated manifest entry or displayOp(op) output, so it is + * always METHOD, a single space, then a param-bearing path (which never + * contains a space). + */ +function splitOpDisplay(op: string): { method: string; path: string } { + const space = op.indexOf(' '); + return { method: op.slice(0, space), path: op.slice(space + 1) }; +} + +function compareSyncOps(a: SyncReportOperation, b: SyncReportOperation): number { + if (a.spec !== b.spec) return compareStrings(a.spec, b.spec); + if (a.method !== b.method) return compareStrings(a.method, b.method); + return compareStrings(a.path, b.path); +} + +/** + * Aggregate per-spec resolveMethodNames output into one run-level report. + * New and missing operations are flattened across specs, each op display + * string split into method + path, both arrays sorted by (spec, method, path) + * for deterministic output, and the run classified via classifyRun over the + * aggregated totals. The workflow consumes this as sync-report.json. + */ +export function buildSyncReport( + perSpec: Array<{ specName: string; newEntries: SurfaceEntry[]; missing: SurfaceEntry[] }> +): SyncReport { + const newOperations: SyncReportOperation[] = []; + const missingOperations: SyncReportOperation[] = []; + for (const { specName, newEntries, missing } of perSpec) { + for (const entry of newEntries) { + const { method, path } = splitOpDisplay(entry.op); + newOperations.push({ spec: specName, method, path, name: entry.name }); + } + for (const entry of missing) { + const { method, path } = splitOpDisplay(entry.op); + missingOperations.push({ spec: specName, method, path, name: entry.name }); + } + } + newOperations.sort(compareSyncOps); + missingOperations.sort(compareSyncOps); + return { + classification: classifyRun({ newEntries: newOperations, missing: missingOperations }), + newOperations, + missingOperations, + }; +} diff --git a/scripts/lib/fetched-spec-utils.ts b/scripts/lib/fetched-spec-utils.ts index 27d7a9c..30df38f 100644 --- a/scripts/lib/fetched-spec-utils.ts +++ b/scripts/lib/fetched-spec-utils.ts @@ -1,10 +1,11 @@ import * as yaml from 'yaml'; import { redactSpecContent } from './spec-redactor.js'; -export interface ValidatedFetchedSpec { +export interface ValidatedFetchedDoc { slug: string; id: number; name: string; + endPointName: string; ymlContent: string; } @@ -36,34 +37,59 @@ export function normalizeSpecContent(content: string): string { return content.replace(/\r\n/g, '\n'); } -export function validateFetchedSpec( +/** + * Validate EVERY document the portal returns for a slug (7 of 28 slugs return + * more than one). Throws if `slug` is not in `allowedSlugs` (an unexpected + * slug is a programmer/config error, not a data problem). Otherwise the + * response body must be a non-empty array, and every element must yield an + * `id: number`, `name: string`, non-empty `end_point_name: string`, and a + * `yml_content: string` that parses as an OpenAPI document. Each element's + * content is redacted before being returned. ANY invalid element fails the + * whole slug (returns null, so the caller keeps the stale committed file). + */ +export function validateFetchedSpecDocs( slug: string, responseBody: unknown, allowedSlugs: ReadonlySet -): ValidatedFetchedSpec | null { +): ValidatedFetchedDoc[] | null { if (!allowedSlugs.has(slug)) { throw new Error(`Unexpected API slug: ${slug}`); } - if (!Array.isArray(responseBody) || !isRecord(responseBody[0])) { + if (!Array.isArray(responseBody) || responseBody.length === 0) { return null; } - const rawSpec = responseBody[0]; - const { id, name, yml_content } = rawSpec; - if (typeof id !== 'number' || typeof name !== 'string' || typeof yml_content !== 'string') { - return null; - } + const docs: ValidatedFetchedDoc[] = []; + for (const element of responseBody) { + if (!isRecord(element)) { + return null; + } - const ymlContent = normalizeSpecContent(yml_content); - if (ymlContent.trim().length === 0 || !isOpenApiDocument(ymlContent)) { - return null; + const { id, name, end_point_name, yml_content } = element; + if ( + typeof id !== 'number' || + typeof name !== 'string' || + typeof end_point_name !== 'string' || + end_point_name.length === 0 || + typeof yml_content !== 'string' + ) { + return null; + } + + const ymlContent = normalizeSpecContent(yml_content); + if (ymlContent.trim().length === 0 || !isOpenApiDocument(ymlContent)) { + return null; + } + + docs.push({ + slug, + id, + name, + endPointName: end_point_name, + ymlContent: redactSpecContent(ymlContent), + }); } - return { - slug, - id, - name, - ymlContent: redactSpecContent(ymlContent), - }; + return docs; } diff --git a/scripts/lib/spec-canonicalize.ts b/scripts/lib/spec-canonicalize.ts new file mode 100644 index 0000000..413ca85 --- /dev/null +++ b/scripts/lib/spec-canonicalize.ts @@ -0,0 +1,102 @@ +/** + * Canonical key order for spec documents so upstream reorders produce + * byte-identical files at the fetch boundary. The June 2026 field-operations + * incident began with John Deere silently reordering the `paths` map inside + * a spec document: a semantically null change that nonetheless surfaced as a + * large, misleading diff once fetched. Sorting is limited to the top-level + * `paths` map and every category map under `components`, because those are + * the surfaces where upstream reorder churn actually happens. + * Member order elsewhere (method order inside a path item, property order + * inside a schema, parameter arrays, servers arrays, info fields) can be + * semantically meaningful to readers, so it is left exactly as declared. + */ + +import * as yaml from 'yaml'; + +function isPlainObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +function compareStrings(a: string, b: string): number { + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * Rebuild a plain object with its own keys sorted lexicographically. Values + * are shared by reference with the input, never cloned. + */ +function sortKeys(obj: Record): Record { + const result: Record = {}; + for (const key of Object.keys(obj).sort(compareStrings)) { + result[key] = obj[key]; + } + return result; +} + +/** + * Sort the category names directly under `components` (schemas, parameters, + * responses, requestBodies, headers, securitySchemes, and any future + * category), then sort each category map's own keys. A category value that + * is not a plain object is tolerated and passed through unchanged. + */ +function canonicalizeComponents(components: Record): Record { + const result: Record = {}; + for (const category of Object.keys(components).sort(compareStrings)) { + const value = components[category]; + result[category] = isPlainObject(value) ? sortKeys(value) : value; + } + return result; +} + +/** + * Return a structurally-equal spec document where exactly two kinds of maps + * are key-sorted lexicographically: the top-level `paths` map, and every + * category map under `components`, with the category names themselves + * sorted too. Everything else, method order inside a path item, property + * order inside a schema, parameter arrays, servers arrays, info fields, + * keeps its original document order. + * + * A `paths` or `components` value that is missing or not a plain object is + * tolerated: it passes through untouched rather than throwing. A non-object + * `doc` (including `null`/`undefined`) passes through untouched too. + * + * Never mutates its input. The top-level document, `paths`, `components`, + * and each components category are rebuilt as new objects; every other + * subtree (path items, schemas, arrays, `info`, `servers`, ...) is shared by + * reference with the input, unchanged. + */ +export function canonicalizeSpec(doc: unknown): unknown { + if (!isPlainObject(doc)) return doc; + + const result: Record = { ...doc }; + + if (isPlainObject(doc.paths)) { + result.paths = sortKeys(doc.paths); + } + + if (isPlainObject(doc.components)) { + result.components = canonicalizeComponents(doc.components); + } + + return result; +} + +/** + * Serialize a spec document with the same emission options fix-specs.ts + * uses (no line wrapping, plain keys, double-quoted strings), plus + * `aliasDuplicateObjects: false`. Without that addition, two components that + * happen to share a JS object reference, as they will once the upcoming + * multi-doc merge deduplicates them, would stringify as a YAML `&anchor` / + * `*alias` pair instead of two independent blocks: a shape downstream + * tooling (openapi-typescript, the redactor's line-anchored regexes) has + * never seen. Returns whatever `yaml.stringify` produces, trailing newline + * included, with no further post-processing. + */ +export function stringifySpec(doc: unknown): string { + return yaml.stringify(doc, { + lineWidth: 0, + defaultKeyType: 'PLAIN', + defaultStringType: 'QUOTE_DOUBLE', + aliasDuplicateObjects: false, + }); +} diff --git a/scripts/lib/spec-merge.ts b/scripts/lib/spec-merge.ts new file mode 100644 index 0000000..e9981c6 --- /dev/null +++ b/scripts/lib/spec-merge.ts @@ -0,0 +1,660 @@ +/** + * Structurally merge the multiple OpenAPI documents the John Deere portal + * returns for a single API slug into one spec object. Pure: never mutates any + * input document (the $ref rewrite always operates on a deep copy). + * + * The primary document owns the merged spec's `info`, wins every deep-equal + * dedupe decision, and never has its components renamed. That protects the + * committed public type surface: the `components['schemas'][...]` references + * that src/safe and the embed-contracts patch targets are pinned to. The + * PRIMARY_ENDPOINT_NAME values below were pinned from the portal state + * recorded in the branch plan; each names the document whose content is the + * committed `specs/raw/{slug}.yaml` today. The first live fetch (a later, + * human-reviewed step) is the end-to-end verification, and a wrong entry + * surfaces there as a huge unexplained diff plus breaking diagnostics, not + * silently. + */ + +import { toPascalCase } from './spec-utils.js'; + +const PRIMARY_ENDPOINT_NAME: Record = { + 'field-operations-api': 'field-operation', + files: 'files-api', + flags: 'flags', + 'machine-locations': 'location-history', + 'map-layers': 'map-layer-summaries', + products: 'varieties', + webhook: 'event-subscription', +}; + +/** Top-level keys merged by dedicated logic (not the generic add-if-absent). */ +const SPECIAL_TOP_LEVEL_KEYS = new Set([ + 'paths', + 'components', + 'servers', + 'tags', + 'x-source-documents', +]); + +export interface FetchedDoc { + endPointName: string; + id: number; + doc: unknown; +} + +interface OrderedDoc { + endPointName: string; + id: number; + /** A deep copy that this module may freely mutate. */ + doc: unknown; +} + +export interface MergeOptions { + /** + * Safety bound on the component-rename fixpoint. Defaults to the total + * component count across documents, which a correct merge never reaches + * (each component is renamed at most once). Overridable to exercise the + * guard. + */ + maxRenameIterations?: number; + /** + * Invoked once per declaring document whose servers block carries a + * non-deere.com placeholder URL (a documentation-editor default such as + * `https://server.com`). The message names the slug, the document, and the + * offending URL(s). fetch-specs wires this to the console so CI logs surface + * the spec-quality defect; unit tests that do not assert on it leave it unset. + */ + onWarning?: (message: string) => void; +} + +// --------------------------------------------------------------------------- +// Small structural helpers +// --------------------------------------------------------------------------- + +function isPlainObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +function asObject(value: unknown): Record | undefined { + return isPlainObject(value) ? value : undefined; +} + +function compareStrings(a: string, b: string): number { + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * Deep structural equality that is insensitive to object key order but + * sensitive to array element order (an OpenAPI `enum` / `required` / `allOf` + * array is order-significant, whereas two schemas differing only by key order + * are the same schema). + */ +function deepEqualUnordered(a: unknown, b: unknown): boolean { + if (a === b) return true; + if (Array.isArray(a) || Array.isArray(b)) { + if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false; + for (let i = 0; i < a.length; i += 1) { + if (!deepEqualUnordered(a[i], b[i])) return false; + } + return true; + } + if (isPlainObject(a) && isPlainObject(b)) { + const aKeys = Object.keys(a); + const bKeys = Object.keys(b); + if (aKeys.length !== bKeys.length) return false; + for (const key of aKeys) { + if (!Object.hasOwn(b, key)) return false; + if (!deepEqualUnordered(a[key], b[key])) return false; + } + return true; + } + return false; +} + +function compareByEndpointThenId(a: FetchedDoc, b: FetchedDoc): number { + const byEndpoint = compareStrings(a.endPointName, b.endPointName); + return byEndpoint !== 0 ? byEndpoint : a.id - b.id; +} + +function totalComponentCount(docs: readonly OrderedDoc[]): number { + let count = 0; + for (const entry of docs) { + const components = asObject(asObject(entry.doc)?.components); + if (!components) continue; + for (const category of Object.values(components)) { + const categoryObj = asObject(category); + if (categoryObj) count += Object.keys(categoryObj).length; + } + } + return count; +} + +// --------------------------------------------------------------------------- +// Primary selection +// --------------------------------------------------------------------------- + +function selectPrimary(slug: string, sorted: readonly FetchedDoc[]): FetchedDoc { + const endpointNames = sorted.map((entry) => entry.endPointName).join(', '); + + const tableEndpoint = PRIMARY_ENDPOINT_NAME[slug]; + if (tableEndpoint !== undefined) { + const pinned = sorted.find((entry) => entry.endPointName === tableEndpoint); + if (pinned) return pinned; + throw new Error( + `mergeSpecDocs: slug "${slug}" pins primary document "${tableEndpoint}" in ` + + `PRIMARY_ENDPOINT_NAME, but no fetched document declares that end_point_name ` + + `(got: ${endpointNames}). Fix the table or the fetch.` + ); + } + + const slugMatch = sorted.find((entry) => entry.endPointName === slug); + if (slugMatch) return slugMatch; + + throw new Error( + `mergeSpecDocs: multi-document slug "${slug}" has no PRIMARY_ENDPOINT_NAME entry and ` + + `no document whose end_point_name equals the slug. Add a table entry naming the ` + + `primary document; a silent primary flip would rename the public type surface. ` + + `Document end_point_names: ${endpointNames}.` + ); +} + +// --------------------------------------------------------------------------- +// $ref rewriting and component renaming (operate on a doc's own deep copy) +// --------------------------------------------------------------------------- + +/** + * Rewrite every `$ref` string that exactly equals `oldRef` to `newRef` + * anywhere in `node`'s subtree. Exact string match, so `#/components/schemas/Foo` + * never touches `#/components/schemas/FooBar`. Mutates in place. + */ +function rewriteRefStrings(node: unknown, oldRef: string, newRef: string): void { + if (Array.isArray(node)) { + for (const item of node) rewriteRefStrings(item, oldRef, newRef); + return; + } + if (!isPlainObject(node)) return; + for (const key of Object.keys(node)) { + const value = node[key]; + if (key === '$ref' && value === oldRef) { + node[key] = newRef; + } else { + rewriteRefStrings(value, oldRef, newRef); + } + } +} + +/** + * Rename `components[category][oldName]` to `newName` inside `doc` and rewrite + * every `#/components//` $ref throughout the whole document. + * One doc-wide walk covers paths, responses, parameters, requestBodies, and + * nested schemas. Mutates the (already-copied) `doc`. + */ +function renameComponentInDoc( + doc: unknown, + category: string, + oldName: string, + newName: string +): void { + const components = asObject(asObject(doc)?.components); + const categoryObj = asObject(components?.[category]); + if (!categoryObj) return; + const value = categoryObj[oldName]; + delete categoryObj[oldName]; + categoryObj[newName] = value; + rewriteRefStrings( + doc, + `#/components/${category}/${oldName}`, + `#/components/${category}/${newName}` + ); +} + +// --------------------------------------------------------------------------- +// Component reconciliation (fixpoint) against the accumulated merged set +// --------------------------------------------------------------------------- + +interface Conflict { + category: string; + name: string; + newName: string; +} + +/** + * The first component (in sorted category, then sorted name order) whose name + * is present in the merged set but whose current value differs. Deterministic + * so the fixpoint converges the same way regardless of iteration nuances. + */ +function findFirstConflict( + mergedComponents: Record | undefined, + docComponents: Record, + suffix: string +): Conflict | null { + for (const category of Object.keys(docComponents).sort(compareStrings)) { + const docCategory = asObject(docComponents[category]); + if (!docCategory) continue; + const mergedCategory = asObject(mergedComponents?.[category]); + if (!mergedCategory) continue; + for (const name of Object.keys(docCategory).sort(compareStrings)) { + const mergedValue = mergedCategory[name]; + if (mergedValue === undefined) continue; + if (deepEqualUnordered(mergedValue, docCategory[name])) continue; + return { category, name, newName: `${name}_${suffix}` }; + } + } + return null; +} + +/** + * Reconcile a secondary document's components against the accumulated merged + * components, renaming conflicting copies to `${Name}_${PascalCase(endpoint)}` + * and rewriting their $refs across the document. Re-runs to a fixpoint because + * a rename can invalidate an earlier deep-equal decision (a dependent that was + * byte-equal now refs a renamed dependency). Returns the running rename count. + */ +function reconcileComponents( + slug: string, + merged: Record, + entry: OrderedDoc, + cap: number, + renameCountIn: number +): number { + const docComponents = asObject(asObject(entry.doc)?.components); + if (!docComponents) return renameCountIn; + + const suffix = toPascalCase(entry.endPointName); + let renameCount = renameCountIn; + + for (;;) { + const mergedComponents = asObject(merged.components); + const conflict = findFirstConflict(mergedComponents, docComponents, suffix); + if (!conflict) break; + + const { category, name, newName } = conflict; + const docCategory = asObject(docComponents[category]); + const renamedValue = docCategory?.[name]; + + const mergedTarget = asObject(mergedComponents?.[category])?.[newName]; + if (mergedTarget !== undefined && !deepEqualUnordered(mergedTarget, renamedValue)) { + throw new Error( + `mergeSpecDocs: slug "${slug}": renaming component ${category}/${name} from ` + + `document "${entry.endPointName}" to ${category}/${newName} collides with an ` + + `existing, non-equal ${category}/${newName} already in the merged spec. ` + + `A human must resolve this.` + ); + } + + const docTarget = docCategory?.[newName]; + if ( + newName !== name && + docTarget !== undefined && + !deepEqualUnordered(docTarget, renamedValue) + ) { + throw new Error( + `mergeSpecDocs: slug "${slug}": renaming component ${category}/${name} in ` + + `document "${entry.endPointName}" to ${category}/${newName} collides with a ` + + `different existing ${category}/${newName} in the same document. ` + + `A human must resolve this.` + ); + } + + renameComponentInDoc(entry.doc, category, name, newName); + renameCount += 1; + if (renameCount > cap) { + throw new Error( + `mergeSpecDocs: slug "${slug}": component rename fixpoint exceeded its cap of ` + + `${cap} (the total component count across documents). This indicates a ` + + `non-converging merge; a human must investigate.` + ); + } + } + + return renameCount; +} + +// --------------------------------------------------------------------------- +// Section folds +// --------------------------------------------------------------------------- + +function pathMethodKey(path: string, key: string): string { + return `${path}${key}`; +} + +function recordPathProvenance( + owner: Map, + path: string, + pathItem: unknown, + endPointName: string +): void { + const item = asObject(pathItem); + if (!item) { + owner.set(pathMethodKey(path, ''), endPointName); + return; + } + for (const key of Object.keys(item)) owner.set(pathMethodKey(path, key), endPointName); +} + +function mergePaths( + slug: string, + merged: Record, + entry: OrderedDoc, + owner: Map +): void { + const docPaths = asObject(asObject(entry.doc)?.paths); + if (!docPaths) return; + + let mergedPaths = asObject(merged.paths); + if (!mergedPaths) { + mergedPaths = {}; + merged.paths = mergedPaths; + } + + for (const path of Object.keys(docPaths)) { + const incoming = docPaths[path]; + if (!(path in mergedPaths)) { + mergedPaths[path] = incoming; + recordPathProvenance(owner, path, incoming, entry.endPointName); + continue; + } + + const mergedItem = asObject(mergedPaths[path]); + const incomingItem = asObject(incoming); + if (!mergedItem || !incomingItem) { + if (!deepEqualUnordered(mergedPaths[path], incoming)) { + const firstOwner = owner.get(pathMethodKey(path, '')) ?? '(unknown)'; + throw new Error( + `mergeSpecDocs: slug "${slug}": path "${path}" is defined incompatibly by ` + + `documents "${firstOwner}" and "${entry.endPointName}". A human must reconcile them.` + ); + } + continue; + } + + for (const key of Object.keys(incomingItem)) { + const incomingValue = incomingItem[key]; + if (!(key in mergedItem)) { + mergedItem[key] = incomingValue; + owner.set(pathMethodKey(path, key), entry.endPointName); + continue; + } + if (deepEqualUnordered(mergedItem[key], incomingValue)) continue; + const firstOwner = owner.get(pathMethodKey(path, key)) ?? '(unknown)'; + throw new Error( + `mergeSpecDocs: slug "${slug}": conflicting definitions for ${key.toUpperCase()} ` + + `${path} between documents "${firstOwner}" and "${entry.endPointName}". The same ` + + `path and method is defined differently in two documents; a human must reconcile them.` + ); + } + } +} + +function foldComponents(merged: Record, entry: OrderedDoc): void { + const docComponents = asObject(asObject(entry.doc)?.components); + if (!docComponents) return; + + let mergedComponents = asObject(merged.components); + if (!mergedComponents) { + mergedComponents = {}; + merged.components = mergedComponents; + } + + for (const category of Object.keys(docComponents)) { + const docCategory = asObject(docComponents[category]); + if (!docCategory) { + if (!(category in mergedComponents)) mergedComponents[category] = docComponents[category]; + continue; + } + let mergedCategory = asObject(mergedComponents[category]); + if (!mergedCategory) { + mergedCategory = {}; + mergedComponents[category] = mergedCategory; + } + for (const name of Object.keys(docCategory)) { + // After reconcile, any name shared with the merged set is deep-equal, so + // keeping the earlier (primary-first) copy is the dedupe rule. + if (name in mergedCategory) continue; + mergedCategory[name] = docCategory[name]; + } + } +} + +function foldTopLevelExtras(merged: Record, entry: OrderedDoc): void { + const doc = asObject(entry.doc); + if (!doc) return; + for (const [key, value] of Object.entries(doc)) { + if (SPECIAL_TOP_LEVEL_KEYS.has(key)) continue; + if (key in merged) continue; + merged[key] = value; + } +} + +// --------------------------------------------------------------------------- +// Servers reconciliation (family-aware) +// +// John Deere's portal documents for one slug carry servers blocks that differ +// only as environment instances or documentation defects of the single +// "platform" family (`https://{environment}.deere.com/platform`): an `api` vs +// `partnerapi` host, a dropped `/platform` segment, omitted `variables`/`enum`, +// or a bare `https://server.com` editor placeholder. Declaring documents that +// all belong to the platform family resolve to the primary's block (which +// fix-specs later normalizes to the templated form); a genuinely different +// server family (a deere host on a non-platform path, or mixed families) still +// refuses to merge, preserving the trust boundary against routing one family's +// endpoints through another family's host. +// --------------------------------------------------------------------------- + +type ServerFamily = 'platform' | 'other' | 'junk'; + +/** The `url` string of a server entry, or undefined if it has none. */ +function serverUrl(entry: unknown): string | undefined { + const url = asObject(entry)?.url; + return typeof url === 'string' ? url : undefined; +} + +/** Parses to an https URL whose host ends in `.deere.com` (case-insensitive). */ +function isDeereHttpsUrl(url: string): boolean { + let parsed: URL; + try { + parsed = new URL(url); + } catch { + return false; + } + return parsed.protocol === 'https:' && parsed.hostname.toLowerCase().endsWith('.deere.com'); +} + +/** + * A deere.com https URL on the shared platform family: path `/platform` or a + * bare host (`/` or empty). Node's URL parser accepts the templated + * `https://{environment}.deere.com/platform` form, reporting host + * `{environment}.deere.com` and path `/platform`, so the templated and static + * platform shapes classify identically here. + */ +function isPlatformFamilyUrl(url: string): boolean { + if (!isDeereHttpsUrl(url)) return false; + const path = new URL(url).pathname.replace(/\/$/, ''); + return path === '' || path === '/platform'; +} + +interface ServerClassification { + family: ServerFamily; + /** URLs that do not resolve to a deere.com host (editor placeholders). */ + placeholders: string[]; +} + +/** + * Classify one document's servers list. Non-deere URLs are documentation-editor + * placeholders (`https://server.com`): they are collected as `placeholders` and + * ignored for the family decision, so a stray placeholder never forces an + * otherwise-platform document into a conflict. A list whose only URLs are + * placeholders declares nothing usable (`junk`). Otherwise the deere URLs + * decide: all on the platform family -> `platform`, any deere host on a + * non-platform path -> `other`. + */ +function classifyServers(servers: readonly unknown[]): ServerClassification { + const placeholders: string[] = []; + const deereUrls: string[] = []; + for (const entry of servers) { + const url = serverUrl(entry); + if (url === undefined) continue; + if (isDeereHttpsUrl(url)) deereUrls.push(url); + else placeholders.push(url); + } + if (deereUrls.length === 0) return { family: 'junk', placeholders }; + return { family: deereUrls.every(isPlatformFamilyUrl) ? 'platform' : 'other', placeholders }; +} + +function applyServers( + slug: string, + merged: Record, + docs: readonly OrderedDoc[], + onWarning?: (message: string) => void +): void { + const rawDeclared = docs + .map((entry) => ({ endPointName: entry.endPointName, servers: asObject(entry.doc)?.servers })) + .filter( + (entry): entry is { endPointName: string; servers: unknown[] } => + Array.isArray(entry.servers) && entry.servers.length > 0 + ); + if (rawDeclared.length === 0) return; + + // Classify each declaring document. A placeholder-only block declares nothing + // usable and is dropped to non-declaring (it inherits the merged block); every + // placeholder, dropped or merely ignored, is surfaced through onWarning so CI + // logs the spec-quality defect. + const declared: Array<{ endPointName: string; servers: unknown[]; family: ServerFamily }> = []; + for (const entry of rawDeclared) { + const { family, placeholders } = classifyServers(entry.servers); + if (placeholders.length > 0) { + const urls = placeholders.join(', '); + onWarning?.( + family === 'junk' + ? `mergeSpecDocs: slug "${slug}": document "${entry.endPointName}" declares only ` + + `placeholder server URL(s) with no deere.com host (${urls}); treating it as ` + + `non-declaring so it inherits the merged servers.` + : `mergeSpecDocs: slug "${slug}": document "${entry.endPointName}" declares placeholder ` + + `server URL(s) with no deere.com host (${urls}); ignoring them for servers reconciliation.` + ); + } + if (family === 'junk') continue; + declared.push({ endPointName: entry.endPointName, servers: entry.servers, family }); + } + if (declared.length === 0) return; + + // The primary declares first in merge order, so declared[0] is the primary's + // block when the primary declares, else the first declaring document. + const reference = declared[0]; + const divergent = declared + .slice(1) + .find((other) => !deepEqualUnordered(other.servers, reference.servers)); + + if (divergent && declared.some((entry) => entry.family === 'other')) { + throw new Error( + `mergeSpecDocs: slug "${slug}": documents "${reference.endPointName}" and ` + + `"${divergent.endPointName}" declare different servers blocks. All declaring ` + + `documents must agree; a human must reconcile them.` + ); + } + + // The deep-equal fast path and the platform-family spread both resolve here to + // the primary's (== first declaring) block. fix-specs owns any templated-form + // normalization downstream; applyServers only selects, it never synthesizes. + merged.servers = reference.servers; +} + +function applyTags(merged: Record, docs: readonly OrderedDoc[]): void { + const union: unknown[] = []; + const seen = new Set(); + let sawTags = false; + + for (const entry of docs) { + const tags = asObject(entry.doc)?.tags; + if (!Array.isArray(tags)) continue; + sawTags = true; + for (const tag of tags) { + const name = isPlainObject(tag) && typeof tag.name === 'string' ? tag.name : undefined; + if (name !== undefined) { + if (seen.has(name)) continue; + seen.add(name); + } + union.push(tag); + } + } + + if (sawTags) merged.tags = union; +} + +// --------------------------------------------------------------------------- +// Public entry point +// --------------------------------------------------------------------------- + +/** + * Merge a slug's fetched OpenAPI documents into one spec object. + * + * Zero documents throw. A single document is returned unchanged and unstamped. + * For two or more, the primary document (repo-owned table, else the slug-named + * document, else a loud error) leads; the remaining documents follow in + * `end_point_name` order, so the input array order never influences the output. + */ +export function mergeSpecDocs( + slug: string, + docs: readonly FetchedDoc[], + options: MergeOptions = {} +): unknown { + if (docs.length === 0) { + throw new Error(`mergeSpecDocs: no documents provided for slug "${slug}".`); + } + if (docs.length === 1) { + return docs[0].doc; + } + + // Deterministic order independent of the input array order: sort the whole + // set by (end_point_name, id), pick the primary, keep the rest in that order. + const sorted = [...docs].sort(compareByEndpointThenId); + const primary = selectPrimary(slug, sorted); + const orderedInputs = [primary, ...sorted.filter((entry) => entry !== primary)]; + + // Deep copy every document up front so no input is ever mutated. + const ordered: OrderedDoc[] = orderedInputs.map((entry) => ({ + endPointName: entry.endPointName, + id: entry.id, + doc: structuredClone(entry.doc), + })); + + const cap = options.maxRenameIterations ?? totalComponentCount(ordered); + + // The primary owns the base document: info, openapi, security, x-* and its + // own paths/components (merged with the secondaries below). + const merged: Record = {}; + const primaryObj = asObject(ordered[0].doc); + if (primaryObj) { + for (const [key, value] of Object.entries(primaryObj)) merged[key] = value; + } + + const pathOwner = new Map(); + recordPathProvenanceFor(pathOwner, ordered[0]); + + let renameCount = 0; + for (let i = 1; i < ordered.length; i += 1) { + const entry = ordered[i]; + renameCount = reconcileComponents(slug, merged, entry, cap, renameCount); + mergePaths(slug, merged, entry, pathOwner); + foldComponents(merged, entry); + foldTopLevelExtras(merged, entry); + } + + applyServers(slug, merged, ordered, options.onWarning); + applyTags(merged, ordered); + + merged['x-source-documents'] = ordered.map((entry) => ({ + endPointName: entry.endPointName, + id: entry.id, + })); + + return merged; +} + +function recordPathProvenanceFor(owner: Map, entry: OrderedDoc): void { + const paths = asObject(asObject(entry.doc)?.paths); + if (!paths) return; + for (const path of Object.keys(paths)) { + recordPathProvenance(owner, path, paths[path], entry.endPointName); + } +} diff --git a/scripts/lib/spec-utils.ts b/scripts/lib/spec-utils.ts index 4855dc4..19c70ec 100644 --- a/scripts/lib/spec-utils.ts +++ b/scripts/lib/spec-utils.ts @@ -12,6 +12,18 @@ export function refName(ref: string): string { return parts[parts.length - 1]; } +export function toPascalCase(str: string): string { + return str + .split(/[-_.]/) + .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) + .join(''); +} + +export function toCamelCase(str: string): string { + const pascal = toPascalCase(str); + return pascal.charAt(0).toLowerCase() + pascal.slice(1); +} + /** * Checks if a property key is entirely an HTML documentation marker. * e.g., "Location" or "Section" @@ -162,3 +174,70 @@ export function stripTypeDiscriminators(spec: Record): number { } return removed; } + +/** + * The two equipment list responses whose `values.items.$ref` John Deere's + * 2026-07 doc edit dropped, paired with the item schema each historically + * referenced. `GetEquipment` feeds `EquipmentApi.get` on `GET /equipment`; + * `GetEquipmentById` feeds `EquipmentApi.getEquipment` on `GET /equipment/{id}`. + */ +const EQUIPMENT_LIST_ITEM_REFS: ReadonlyArray<{ response: string; schema: string }> = [ + { response: 'GetEquipment', schema: 'equipmentForList' }, + { response: 'GetEquipmentById', schema: 'equipment' }, +]; + +/** + * Restore the `values.items.$ref` envelope on the two equipment list responses + * that John Deere's 2026-07 equipment-doc edit dropped. Returns the count + * restored. + * + * That edit rewrote `values: { items: { $ref: } }` down to a bare + * `values: { type: "array" }` on the 200 responses `GetEquipment` (item schema + * `equipmentForList`) and `GetEquipmentById` (item schema `equipment`), while + * leaving both target schemas defined in `components.schemas`. Without the ref + * the generator cannot recover the item type, so `EquipmentApi.get` collapses + * to `PaginatedResponse` and `EquipmentApi.getEquipment` to `unknown`. + * The wire contract did not change; only JD's doc quality did (their equipment + * spec has prior form here: see stripTypeDiscriminators above). + * + * Guarded and self-neutralizing. For each registered response the ref is + * restored ONLY while (a) the envelope carries no `items.$ref` AND (b) the + * historically-correct target schema still exists. When JD repairs the doc the + * ref is already present and this no-ops; if JD ever removes the target schema + * the transform does not resurrect a ref to a nonexistent schema (the types + * then legitimately weaken and a human revisits). It is keyed on the two + * response names, so no other envelope is touched. The response's media type is + * resolved the same way generate-sdk's extractSchemaFromContent resolves it, so + * the restored ref lands on exactly the schema the generator reads. + */ +export function restoreEquipmentItemRefs(spec: Record): number { + const components = spec.components as Record | undefined; + const responses = components?.responses as Record | undefined; + const schemas = components?.schemas as Record | undefined; + if (!responses || !schemas) return 0; + + let restored = 0; + for (const { response, schema } of EQUIPMENT_LIST_ITEM_REFS) { + // Guard (b): never resurrect a ref to a schema JD has removed. + if (!(schema in schemas)) continue; + + const responseObj = responses[response] as { content?: Record } | undefined; + const content = responseObj?.content; + if (!content) continue; + + // Mirror generate-sdk's media-type preference so the ref lands where the + // generator looks for it. + const media = (content['application/vnd.deere.axiom.v3+json'] ?? content['application/json']) as + | { schema?: { properties?: Record } } + | undefined; + const values = media?.schema?.properties?.values as { items?: { $ref?: unknown } } | undefined; + if (!values) continue; + + // Guard (a): no-op when a ref is already present (JD repaired the doc). + if (typeof values.items?.$ref === 'string' && values.items.$ref.length > 0) continue; + + values.items = { $ref: `#/components/schemas/${schema}` }; + restored += 1; + } + return restored; +} diff --git a/specs/fixed/assets.yaml b/specs/fixed/assets.yaml index 4e1e546..fa5530e 100644 --- a/specs/fixed/assets.yaml +++ b/specs/fixed/assets.yaml @@ -22,73 +22,47 @@ tags: - name: "Asset Location" description: "A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes" paths: - /organizations/{orgId}/assets: + /assetCatalog: get: + summary: "Get Asset Catalog List" + operationId: "getAssetCatalog" tags: - - "Asset" - summary: "Get all assets" - operationId: "getOrgAssets" - description: "This endpoint will retrieve all assets for an organization." + - "Asset Catalog" + description: "This endpoint will retrieve the Asset Catalog List." security: - OAuth2: - "eq1" parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/Embed" - - $ref: "#/components/parameters/X-deere-sign" + - $ref: "#/components/parameters/x-deere-sign" responses: "200": - $ref: "#/components/responses/GetOrgId" - "401": - $ref: "#/components/responses/401" - "403": - $ref: "#/components/responses/403" - "406": - $ref: "#/components/responses/406" - "429": - $ref: "#/components/responses/429" - post: - tags: - - "Asset" - summary: "Create a new asset" - operationId: "postAsset" - description: "This endpoint will create a new asset." - security: - - OAuth2: - - "eq2" - parameters: - - $ref: "#/components/parameters/OrgId" - requestBody: - description: "Asset to be created." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/CreatePostValues" - examples: - No Header: - value: - title: "AgThing Water Sensor" - assetCategory: "DEVICE" - assetType: "SENSOR" - assetSubType: "OTHER" - x-required-boolean: true - responses: - "201": - $ref: "#/components/responses/CreatePost" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "403": - $ref: "#/components/responses/403" - "404": - $ref: "#/components/responses/404" - "406": - $ref: "#/components/responses/406" - "415": - $ref: "#/components/responses/415" - "429": - $ref: "#/components/responses/429" + description: "The Asset Catalog containaing all valid entries." + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/AssetCatalogGet" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/assetCatalog" + total: 2 + values: + - "@type": "ContributedCatalogItem" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "ENVIRONMENTAL" + links: [] + - "@type": "ContributedCatalogItem" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + links: [] /assets/{assetId}: get: tags: @@ -267,273 +241,502 @@ paths: $ref: "#/components/responses/415" "429": $ref: "#/components/responses/429" - /assetCatalog: + /organizations/{orgId}/assets: get: - summary: "Get Asset Catalog List" - operationId: "getAssetCatalog" tags: - - "Asset Catalog" - description: "This endpoint will retrieve the Asset Catalog List." + - "Asset" + summary: "Get all assets" + operationId: "getOrgAssets" + description: "This endpoint will retrieve all assets for an organization." security: - OAuth2: - "eq1" parameters: - - $ref: "#/components/parameters/x-deere-sign" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Embed" + - $ref: "#/components/parameters/X-deere-sign" responses: "200": - description: "The Asset Catalog containaing all valid entries." - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - values: - items: - $ref: "#/components/schemas/AssetCatalogGet" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5b5392615e4b4e1c92013026f47109bb" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/assetCatalog" - total: 2 - values: - - "@type": "ContributedCatalogItem" - assetCategory: "DEVICE" - assetType: "SENSOR" - assetSubType: "ENVIRONMENTAL" - links: [] - - "@type": "ContributedCatalogItem" - assetCategory: "DEVICE" - assetType: "SENSOR" - assetSubType: "OTHER" - links: [] + $ref: "#/components/responses/GetOrgId" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "406": + $ref: "#/components/responses/406" + "429": + $ref: "#/components/responses/429" + post: + tags: + - "Asset" + summary: "Create a new asset" + operationId: "postAsset" + description: "This endpoint will create a new asset." + security: + - OAuth2: + - "eq2" + parameters: + - $ref: "#/components/parameters/OrgId" + requestBody: + description: "Asset to be created." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/CreatePostValues" + examples: + No Header: + value: + title: "AgThing Water Sensor" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + x-required-boolean: true + responses: + "201": + $ref: "#/components/responses/CreatePost" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "415": + $ref: "#/components/responses/415" + "429": + $ref: "#/components/responses/429" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - eq1: "eq1" - eq2: "eq2" - schemas: - AssetCatalogItem: - required: - - "assetCategory" - - "assetSubType" - - "assetType" - type: "object" - properties: - "@type": - type: "string" - example: "ContributedCatalogItem" - assetCategory: - $ref: "#/components/schemas/AssetCategory" - assetType: - $ref: "#/components/schemas/AssetType" - assetSubType: - $ref: "#/components/schemas/AssetSubType" - links: - type: "array" - items: - properties: - rel: - type: "string" - description: "Links relavent to exploring the collection." - example: "self" - uri: - type: "string" - description: "The URI to the related resource." - format: "uri" - example: "https://sandboxapi.deere.com/platform/resources/61265" - MeasurementData: - required: - - "name" - - "value" - - "unit" - type: "object" - properties: - name: - description: "representation for which to capture data sandardized via the [ADAPT Representation System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/RepresentationSystem.xml)" - type: "string" - example: "vrSoilTemperature" - value: - description: "measurement reading" - type: "string" - example: "46.2" - unit: - description: "unit of measure - the basis for any conversion sandardized via the [ADAPT Unit System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/UnitSystem.xml)" - type: "string" - example: "F" - AssetCategory: - type: "string" - example: "DEVICE" - AssetType: - type: "string" - example: "SENSOR" - AssetSubType: - type: "string" - example: "ENVIRONMENTAL" - 400Errors: - properties: - "@type": - type: "string" - example: "Errors" - errors: - type: "array" - items: - properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - example: "ed292512-1f3c-4285-83c3-1fb084423f9b" - message: - type: "string" - example: "This field is required." - code: - type: "string" - example: "validation_constraint_required_field" - field: - type: "string" - example: "title" - otherAttributes: - type: "object" - GenericErrors: - properties: - "@type": - type: "string" - example: "Errors" - errors: - type: "array" - items: + headers: + Location: + description: "URI to the created resource" + example: "https://sandboxapi.deere.com/platform/assets/7a300c61-a663-4c2b-9ec5-967a9c5b4776/locations" + schema: + type: "string" + format: "uri" + parameters: + AssetId: + name: "assetId" + in: "path" + description: "The ID of the asset" + x-required-boolean: true + schema: + type: "string" + format: "uuid" + example: "acd3fe92-308e-4d0b-b16f-90af96cc38d0" + AssetId2: + name: "assetId" + in: "path" + description: "The ID associated with the asset." + x-required-boolean: true + schema: + type: "string" + format: "uuid" + example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662" + Count: + name: "count" + in: "query" + description: "The number of results to include in the response. Must be a positive value greater than or equal to 1. Max 500. Default 500." + schema: + example: 250 + type: "string" + format: "string" + Embed: + name: "embed" + in: "query" + description: "Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included." + schema: + type: "string" + example: "lastKnownLocation" + EndDate: + name: "endDate" + in: "query" + description: "Retrieves results that occurred before (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time." + schema: + example: "2017-09-18T20:29:59.000Z" + type: "string" + format: "date-time" + OrgId: + name: "orgId" + in: "path" + description: "The ID of the organization" + x-required-boolean: true + schema: + example: 1234 + type: "string" + minimum: 1 + format: "int64" + PageKey: + name: "pageKey" + in: "query" + description: "A query param returned by the server in the nextPage link if there are more results for your query than were returned in the response." + schema: + type: "string" + format: "string" + example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662,1970-01-01T00:00:00Z" + StartDate: + name: "startDate" + in: "query" + x-required-boolean: false + description: "Retrieves results that occurred after (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time." + schema: + example: "2017-09-18T20:29:59.000Z" + type: "string" + format: "date-time" + X-deere-sign: + name: "x-deere-signature" + in: "header" + description: "See for more information." + schema: + type: "string" + example: "927392615e4b4e1c12458026f47109bb" + x-deere-sign: + name: "x-deere-signature" + in: "header" + description: "See for more information." + schema: + type: "string" + example: "abc392615e4b4e1c1245-8026f47109bb" + x-deere-sign2: + name: "x-deere-signature" + description: "See for more information." + schema: + type: "string" + example: "5b5392615e4b4e1c92013026f47109bb" + responses: + "201": + description: "Request" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/assets/beb295d0-48ec-47f9-9fce-0dd52107c662/locations" + "400": + description: "The request body was malformed or the given query parameters were invalid. For example, it was missing a required field or supplied a read-only value." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/400Errors" + "401": + description: "The user's OAuth credentials are not recognized by the server." + "403": + description: "The user does not have access to the requested resource." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "404": + description: "The specified resource was not found on the server." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "406": + description: "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request." + "409": + description: "The timestamp on the provided location conflicts with a previously provided location." + "413": + description: "The payload is too large. The max payload size is 100KB." + "415": + description: "The server refuses to accept the request because the payload format is in an unsupported format." + "429": + description: "The user has sent too many requests in a given amount of time." + AssetGet: + description: "The Asset." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - example: "ed292512-1f3c-4285-83c3-1fb084423f9b" - message: - type: "string" - example: "some error message" - otherAttributes: - type: "object" - CollectionBase: - type: "object" - properties: - links: - type: "array" - items: + links: + items: + $ref: "#/components/schemas/AssetCollectionGetLink2" + values: + items: + $ref: "#/components/schemas/AssetGetValues" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "ContributedAsset" + title: "AgThing Water Device" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + lastModifiedDate: "2018-01-31T20:19:40.988Z" + id: "ASSET_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "locations" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" + AssetIdGet: + description: "The Asset Locations" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" properties: - rel: - type: "string" - description: "Links relavent to exploring the collection." - example: "self" - uri: - type: "string" - description: "The URI to the related resource." - format: "uri" - example: "https://sandboxapi.deere.com/platform/resources/61265" - total: - type: "number" - example: 1 - AssetCollection: - type: "object" - allOf: - - $ref: "#/components/schemas/CollectionBase" - - properties: - values: - type: "array" - items: - $ref: "#/components/schemas/Asset" - AssetLocationCollection: - type: "object" - allOf: - - $ref: "#/components/schemas/CollectionBase" - - properties: - values: - type: "array" - items: - $ref: "#/components/schemas/AssetLocation" - AssetLocationBase: - required: - - "timestamp" - type: "object" - properties: - "@type": - type: "string" - example: "ContributedAssetLocation" - timestamp: - description: "ISO 8601 Date and time in UTC the `measurementData` and/or `geometry` were recorded by the Asset" - example: "2019-07-12T21:29:50.000Z" - type: "string" - format: "date-time" - geometry: + values: + items: + $ref: "#/components/schemas/AssetIdValue" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json Note: By default, all location data for the asset is returned." + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations?startDate=2017-09-18T20%3A29%3A59.000Z&endDate=2017-09-18T23%3A29%3A59.000Z" + total: 3 + values: + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-18T22:49:59.000Z" + geometry: + type: "Feature" + geometry: + geometries: + - coordinates: + - -93.776179 + - 40.967857 + type: "Point" + type: "GeometryCollection" + measurementData: + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.3" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.3" + unit: "u2" + links: [] + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-18T22:29:59.000Z" + geometry: + type: "Feature" + geometry: + geometries: + - coordinates: + - -93.776179 + - 40.967857 + type: "Point" + type: "GeometryCollection" + measurementData: + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.4" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.4" + unit: "u2" + links: [] + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-18T21:29:59.000Z" + geometry: + type: "Feature" + geometry: + geometries: + - coordinates: + - -93.776179 + - 40.967857 + type: "Point" + type: "GeometryCollection" + measurementData: + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.5" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.5" + unit: "u2" + links: [] + AssetLocation: + description: "The Asset Location." + content: + "*/*": + schema: + type: "array" + items: + $ref: "#/components/schemas/AssetLocation" + AssetPut: + description: "Success" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + examples: + Headers: + description: "204 No Content Date: Tue, 31 May 2016 08:49:20 GMT Content-Encoding: gzip Server: Apache-Coyote/1.1 ADRUM_0: g:ec9c31ed-7102-4117-832e-f6986dc31665 X-Deere-Elapsed-Ms: 449 X-Frame-Options: SAMEORIGIN ADRUM_1: i:3472 Content-Type: text/plain ADRUM_2: e:129 ADRUM_3: d:467 Connection: Keep-Alive Keep-Alive: timeout=5, max=98 Content-Length: 0 X-Deere-Handling-Server: ldxx90tc5" + CreatePost: + description: "Create" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/assets/abx6f24c-2d91-40bd-70e6-0137e6ccbfb0" + Created: + description: "Created." + headers: + Location: + description: "https://sandboxapi.deere.com/platform/asset/1234" + schema: + type: "string" + GetOrgId: + description: "A collection of Assets" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/AssetCollectionGetLink" + values: + items: + $ref: "#/components/schemas/AssetCollectionGetValue" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/assets" + total: 1 + values: + - "@type": "ContributedAsset" + title: "AgThing Water Device" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + lastModifiedDate: "2018-01-31T20:36:16.727Z" + id: "ASSET_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "locations" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" + Success: + description: "Success." + schemas: + 400Errors: + properties: + "@type": type: "string" - description: "stringified [GeoJSON Point (RFC 7946)](https://tools.ietf.org/html/rfc7946#section-3.1.2) identifying the Asset geolocation" - example: "{ \"type\": \"Feature\", \"geometry\": { \"geometries\": [ { \"coordinates\": [ -94.5609911, 42.3428859 ], \"type\": \"Point\" } ], \"type\": \"GeometryCollection\" } }" - measurementData: + example: "Errors" + errors: type: "array" items: - $ref: "#/components/schemas/MeasurementData" - AssetLocation: - allOf: - - $ref: "#/components/schemas/AssetLocationBase" - description: "A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes. Either `geometry` or `measurementData` is required and both are allowed." - LastKnownLocation: - allOf: - - $ref: "#/components/schemas/AssetLocationBase" - description: "The Asset Location with the most recent `timestamp`" - UpdateAsset: + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" + message: + type: "string" + example: "This field is required." + code: + type: "string" + example: "validation_constraint_required_field" + field: + type: "string" + example: "title" + otherAttributes: + type: "object" + Asset: allOf: + - $ref: "#/components/schemas/UpdateAsset" - type: "object" properties: - id: + lastModifiedDate: type: "string" - format: "uuid" - description: "The ID of the Asset. Optional, but if included it must match the URL parameter for Asset Id." - example: "b9d96332-93c7-44ae-ac86-eed8727f13c7" - - $ref: "#/components/schemas/CreateAsset" - CreateAsset: + description: "A timestamp of the date and time the last operation was performed on this item." + format: "date-time" + readOnly: true + lastKnownLocation: + $ref: "#/components/schemas/LastKnownLocation" + AssetCatalogCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/AssetCatalogItem" + AssetCatalogGet: + properties: + assetCategory: + description: "Asset Category" + example: "DEVICE" + type: "string" + assetType: + description: "Asset Type" + example: "SENSOR" + type: "string" + assetSubType: + description: "Asset Sub Type" + example: "OTHER" + type: "string" + AssetCatalogItem: required: - - "title" - "assetCategory" - - "assetType" - "assetSubType" - - "links" + - "assetType" type: "object" - description: "A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements" properties: "@type": type: "string" - example: "ContributedAsset" - title: - type: "string" - description: "The name of the Asset." - example: "McGill 7000" + example: "ContributedCatalogItem" assetCategory: $ref: "#/components/schemas/AssetCategory" assetType: $ref: "#/components/schemas/AssetType" assetSubType: $ref: "#/components/schemas/AssetSubType" - Asset: - allOf: - - $ref: "#/components/schemas/UpdateAsset" - - type: "object" - properties: - lastModifiedDate: - type: "string" - description: "A timestamp of the date and time the last operation was performed on this item." - format: "date-time" - readOnly: true - lastKnownLocation: - $ref: "#/components/schemas/LastKnownLocation" + links: + type: "array" + items: + properties: + rel: + type: "string" + description: "Links relavent to exploring the collection." + example: "self" + uri: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://sandboxapi.deere.com/platform/resources/61265" + AssetCategory: + type: "string" + example: "DEVICE" + AssetCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Asset" AssetCollectionGetLink: properties: self: @@ -599,29 +802,6 @@ components: description: "The Asset Location with the most recent timestamp. Included if embed is requested." example: "See sample response below" type: "object" - CreatePostLink: - properties: - contributionDefinition: - description: "Contribution Definition Link." - example: "https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID" - CreatePostValues: - properties: - title: - description: "The name of the asset." - example: "Water Sensor" - type: "string" - assetCategory: - description: "Asset Category" - example: "DEVICE" - type: "string" - assetType: - description: "Asset Type" - example: "SENSOR" - type: "string" - assetSubType: - description: "Asset Sub Type" - example: "OTHER" - type: "string" AssetGetValues: properties: id: @@ -683,6 +863,65 @@ components: type: "array" description: "List of measurement data to be associated with the asset." example: "See sample request below" + AssetLocation: + allOf: + - $ref: "#/components/schemas/AssetLocationBase" + description: "A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes. Either `geometry` or `measurementData` is required and both are allowed." + AssetLocationBase: + required: + - "timestamp" + type: "object" + properties: + "@type": + type: "string" + example: "ContributedAssetLocation" + timestamp: + description: "ISO 8601 Date and time in UTC the `measurementData` and/or `geometry` were recorded by the Asset" + example: "2019-07-12T21:29:50.000Z" + type: "string" + format: "date-time" + geometry: + type: "string" + description: "stringified [GeoJSON Point (RFC 7946)](https://tools.ietf.org/html/rfc7946#section-3.1.2) identifying the Asset geolocation" + example: "{ \"type\": \"Feature\", \"geometry\": { \"geometries\": [ { \"coordinates\": [ -94.5609911, 42.3428859 ], \"type\": \"Point\" } ], \"type\": \"GeometryCollection\" } }" + measurementData: + type: "array" + items: + $ref: "#/components/schemas/MeasurementData" + AssetLocationCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/AssetLocation" + AssetSubType: + type: "string" + example: "ENVIRONMENTAL" + AssetType: + type: "string" + example: "SENSOR" + CollectionBase: + type: "object" + properties: + links: + type: "array" + items: + properties: + rel: + type: "string" + description: "Links relavent to exploring the collection." + example: "self" + uri: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://sandboxapi.deere.com/platform/resources/61265" + total: + type: "number" + example: 1 ContributionDefinitionLink: type: "object" properties: @@ -698,8 +937,40 @@ components: description: "The URI to the related resource." format: "uri" example: "https://sandboxapi.deere.com/platform/contributionDefinitions/34973a25-75c0-48a9-a414-7d61587b3e37" - AssetCatalogGet: + CreateAsset: + required: + - "title" + - "assetCategory" + - "assetType" + - "assetSubType" + - "links" + type: "object" + description: "A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements" + properties: + "@type": + type: "string" + example: "ContributedAsset" + title: + type: "string" + description: "The name of the Asset." + example: "McGill 7000" + assetCategory: + $ref: "#/components/schemas/AssetCategory" + assetType: + $ref: "#/components/schemas/AssetType" + assetSubType: + $ref: "#/components/schemas/AssetSubType" + CreatePostLink: + properties: + contributionDefinition: + description: "Contribution Definition Link." + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID" + CreatePostValues: properties: + title: + description: "The name of the asset." + example: "Water Sensor" + type: "string" assetCategory: description: "Asset Category" example: "DEVICE" @@ -712,336 +983,65 @@ components: description: "Asset Sub Type" example: "OTHER" type: "string" - AssetCatalogCollection: + GenericErrors: + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" + message: + type: "string" + example: "some error message" + otherAttributes: + type: "object" + LastKnownLocation: + allOf: + - $ref: "#/components/schemas/AssetLocationBase" + description: "The Asset Location with the most recent `timestamp`" + MeasurementData: + required: + - "name" + - "value" + - "unit" type: "object" + properties: + name: + description: "representation for which to capture data sandardized via the [ADAPT Representation System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/RepresentationSystem.xml)" + type: "string" + example: "vrSoilTemperature" + value: + description: "measurement reading" + type: "string" + example: "46.2" + unit: + description: "unit of measure - the basis for any conversion sandardized via the [ADAPT Unit System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/UnitSystem.xml)" + type: "string" + example: "F" + UpdateAsset: allOf: - - $ref: "#/components/schemas/CollectionBase" - - properties: - values: - type: "array" - items: - $ref: "#/components/schemas/AssetCatalogItem" - responses: - "201": - description: "Request" - content: - application/vnd.deere.axiom.v3+json: - examples: - Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/assets/beb295d0-48ec-47f9-9fce-0dd52107c662/locations" - "400": - description: "The request body was malformed or the given query parameters were invalid. For example, it was missing a required field or supplied a read-only value." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/400Errors" - "401": - description: "The user's OAuth credentials are not recognized by the server." - "403": - description: "The user does not have access to the requested resource." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/GenericErrors" - "404": - description: "The specified resource was not found on the server." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/GenericErrors" - "406": - description: "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request." - "409": - description: "The timestamp on the provided location conflicts with a previously provided location." - "413": - description: "The payload is too large. The max payload size is 100KB." - "415": - description: "The server refuses to accept the request because the payload format is in an unsupported format." - "429": - description: "The user has sent too many requests in a given amount of time." - GetOrgId: - description: "A collection of Assets" - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - properties: - links: - items: - $ref: "#/components/schemas/AssetCollectionGetLink" - values: - items: - $ref: "#/components/schemas/AssetCollectionGetValue" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5b5392615e4b4e1c92013026f47109bb" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/assets" - total: 1 - values: - - "@type": "ContributedAsset" - title: "AgThing Water Device" - assetCategory: "DEVICE" - assetType: "SENSOR" - assetSubType: "OTHER" - lastModifiedDate: "2018-01-31T20:36:16.727Z" - id: "ASSET_ID" - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID" - - "@type": "Link" - rel: "organization" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" - - "@type": "Link" - rel: "locations" - uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" - CreatePost: - description: "Create" - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - examples: - Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/assets/abx6f24c-2d91-40bd-70e6-0137e6ccbfb0" - AssetGet: - description: "The Asset." - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - properties: - links: - items: - $ref: "#/components/schemas/AssetCollectionGetLink2" - values: - items: - $ref: "#/components/schemas/AssetGetValues" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" - value: - "@type": "ContributedAsset" - title: "AgThing Water Device" - assetCategory: "DEVICE" - assetType: "SENSOR" - assetSubType: "OTHER" - lastModifiedDate: "2018-01-31T20:19:40.988Z" - id: "ASSET_ID" - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID" - - "@type": "Link" - rel: "organization" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" - - "@type": "Link" - rel: "locations" - uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" - AssetPut: - description: "Success" - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - examples: - Headers: - description: "204 No Content Date: Tue, 31 May 2016 08:49:20 GMT Content-Encoding: gzip Server: Apache-Coyote/1.1 ADRUM_0: g:ec9c31ed-7102-4117-832e-f6986dc31665 X-Deere-Elapsed-Ms: 449 X-Frame-Options: SAMEORIGIN ADRUM_1: i:3472 Content-Type: text/plain ADRUM_2: e:129 ADRUM_3: d:467 Connection: Keep-Alive Keep-Alive: timeout=5, max=98 Content-Length: 0 X-Deere-Handling-Server: ldxx90tc5" - AssetIdGet: - description: "The Asset Locations" - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - properties: - values: - items: - $ref: "#/components/schemas/AssetIdValue" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json Note: By default, all location data for the asset is returned." - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations?startDate=2017-09-18T20%3A29%3A59.000Z&endDate=2017-09-18T23%3A29%3A59.000Z" - total: 3 - values: - - "@type": "ContributedAssetLocation" - timestamp: "2017-09-18T22:49:59.000Z" - geometry: - type: "Feature" - geometry: - geometries: - - coordinates: - - -93.776179 - - 40.967857 - type: "Point" - type: "GeometryCollection" - measurementData: - - "@type": "BasicMeasurement" - name: "name of measurement data with [a link](https://www.example.com)" - value: "V1.3" - unit: "u1" - - "@type": "BasicMeasurement" - name: "a measurement name" - value: "V2.3" - unit: "u2" - links: [] - - "@type": "ContributedAssetLocation" - timestamp: "2017-09-18T22:29:59.000Z" - geometry: - type: "Feature" - geometry: - geometries: - - coordinates: - - -93.776179 - - 40.967857 - type: "Point" - type: "GeometryCollection" - measurementData: - - "@type": "BasicMeasurement" - name: "name of measurement data with [a link](https://www.example.com)" - value: "V1.4" - unit: "u1" - - "@type": "BasicMeasurement" - name: "a measurement name" - value: "V2.4" - unit: "u2" - links: [] - - "@type": "ContributedAssetLocation" - timestamp: "2017-09-18T21:29:59.000Z" - geometry: - type: "Feature" - geometry: - geometries: - - coordinates: - - -93.776179 - - 40.967857 - type: "Point" - type: "GeometryCollection" - measurementData: - - "@type": "BasicMeasurement" - name: "name of measurement data with [a link](https://www.example.com)" - value: "V1.5" - unit: "u1" - - "@type": "BasicMeasurement" - name: "a measurement name" - value: "V2.5" - unit: "u2" - links: [] - AssetLocation: - description: "The Asset Location." - content: - "*/*": - schema: - type: "array" - items: - $ref: "#/components/schemas/AssetLocation" - Success: - description: "Success." - Created: - description: "Created." - headers: - Location: - description: "https://sandboxapi.deere.com/platform/asset/1234" - schema: - type: "string" - headers: - Location: - description: "URI to the created resource" - example: "https://sandboxapi.deere.com/platform/assets/7a300c61-a663-4c2b-9ec5-967a9c5b4776/locations" - schema: - type: "string" - format: "uri" - parameters: - OrgId: - name: "orgId" - in: "path" - description: "The ID of the organization" - x-required-boolean: true - schema: - example: 1234 - type: "string" - minimum: 1 - format: "int64" - Embed: - name: "embed" - in: "query" - description: "Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included." - schema: - type: "string" - example: "lastKnownLocation" - X-deere-sign: - name: "x-deere-signature" - in: "header" - description: "See for more information." - schema: - type: "string" - example: "927392615e4b4e1c12458026f47109bb" - x-deere-sign: - name: "x-deere-signature" - in: "header" - description: "See for more information." - schema: - type: "string" - example: "abc392615e4b4e1c1245-8026f47109bb" - x-deere-sign2: - name: "x-deere-signature" - description: "See for more information." - schema: - type: "string" - example: "5b5392615e4b4e1c92013026f47109bb" - AssetId: - name: "assetId" - in: "path" - description: "The ID of the asset" - x-required-boolean: true - schema: - type: "string" - format: "uuid" - example: "acd3fe92-308e-4d0b-b16f-90af96cc38d0" - AssetId2: - name: "assetId" - in: "path" - description: "The ID associated with the asset." - x-required-boolean: true - schema: - type: "string" - format: "uuid" - example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662" - StartDate: - name: "startDate" - in: "query" - x-required-boolean: false - description: "Retrieves results that occurred after (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time." - schema: - example: "2017-09-18T20:29:59.000Z" - type: "string" - format: "date-time" - EndDate: - name: "endDate" - in: "query" - description: "Retrieves results that occurred before (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time." - schema: - example: "2017-09-18T20:29:59.000Z" - type: "string" - format: "date-time" - PageKey: - name: "pageKey" - in: "query" - description: "A query param returned by the server in the nextPage link if there are more results for your query than were returned in the response." - schema: - type: "string" - format: "string" - example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662,1970-01-01T00:00:00Z" - Count: - name: "count" - in: "query" - description: "The number of results to include in the response. Must be a positive value greater than or equal to 1. Max 500. Default 500." - schema: - example: 250 - type: "string" - format: "string" + - type: "object" + properties: + id: + type: "string" + format: "uuid" + description: "The ID of the Asset. Optional, but if included it must match the URL parameter for Asset Id." + example: "b9d96332-93c7-44ae-ac86-eed8727f13c7" + - $ref: "#/components/schemas/CreateAsset" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" + eq2: "eq2" diff --git a/specs/fixed/boundaries.yaml b/specs/fixed/boundaries.yaml index 558d197..985a15e 100644 --- a/specs/fixed/boundaries.yaml +++ b/specs/fixed/boundaries.yaml @@ -18,6 +18,20 @@ servers: - "partnerapiqa" - "sandboxapiqa" paths: + /fieldOperations/{operationId}/boundary: + get: + summary: "Generate a Boundary from a FieldOperation" + description: "Given a , this endpoint will generate and return a boundary that surrounds the area worked by that field operation. Any gaps in that field operation will be treated as interior rings. This endpoint returns the generated boundary, giving you the opportunity to change the boundary name, clean up any unwanted interiors, etc. before back into Operations Center. There are two cases where this API will return an HTTP 400 - Bad Request: If the field already has an active boundary. In this case, please use the existing boundary - it is likely more accurate than a generated boundary. If the field has been merged. In this case, a FieldOperation may only cover one part of the merged field, resulting in an inaccurate boundary." + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/responses/BoundariesResponse2" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" /organizations/{orgId}/boundaries: get: summary: "View Boundaries in an Org" @@ -111,20 +125,6 @@ paths: archived: false irrigated: false signalType: "dtiSignalTypeRTK" - /fieldOperations/{operationId}/boundary: - get: - summary: "Generate a Boundary from a FieldOperation" - description: "Given a , this endpoint will generate and return a boundary that surrounds the area worked by that field operation. Any gaps in that field operation will be treated as interior rings. This endpoint returns the generated boundary, giving you the opportunity to change the boundary name, clean up any unwanted interiors, etc. before back into Operations Center. There are two cases where this API will return an HTTP 400 - Bad Request: If the field already has an active boundary. In this case, please use the existing boundary - it is likely more accurate than a generated boundary. If the field has been merged. In this case, a FieldOperation may only cover one part of the merged field, resulting in an inaccurate boundary." - security: - - OAuth2: - - "ag2" - responses: - "200": - $ref: "#/components/responses/BoundariesResponse2" - "403": - $ref: "#/components/responses/Forbidden" - "404": - $ref: "#/components/responses/NotFound" /organizations/{orgId}/fields/{fieldId}/boundaries/{boundaryId}: get: summary: "Get a specific boundary" @@ -186,34 +186,7 @@ paths: "404": $ref: "#/components/responses/NotFound" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag1: "ag1" - ag2: "ag2" - ag3: "ag3" parameters: - OrgId: - name: "orgId" - in: "path" - description: "Organization" - x-required-boolean: true - schema: - type: "string" - format: "int64" - example: 1234 - OrgId3: - name: "orgId" - in: "path" - description: "Organization" - x-required-boolean: true - schema: - type: "string" - format: "int64" - example: 654321 Accept-UOM-System: name: "Accept-UOM-System" description: "Takes METRIC and ENGLISH. Converts measurements to the chosen system." @@ -222,15 +195,34 @@ components: schema: type: "string" example: "METRIC" - OrgId2: - name: "orgId" + AcceptUOMSystem: + name: "Accept-UOM-System" + in: "header" + description: "Takes METRIC and ENGLISH. Converts measurements to the chosen system." + x-required-boolean: false + schema: + type: "string" + enum: + - "ENGLISH" + - "METRIC" + example: "METRIC" + Active: + name: "activeOnly" + in: "query" + description: "Allows filtering based on active boundaries" + x-required-boolean: false + schema: + type: "boolean" + default: false + BoundaryId: + name: "boundaryId" in: "path" - description: "Organization ID" + description: "Boundary Id" x-required-boolean: true schema: + example: "e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" type: "string" - format: "int64" - example: 1234 + format: "uuid" Embed: name: "embed" in: "query" @@ -240,22 +232,6 @@ components: type: "string" example: "showRecordMetadata" format: "uuid" - RecordFilter: - name: "recordFilter" - in: "query" - description: "Filter results based on status; defaults to active" - schema: - type: "string" - example: "active, archived, all" - Id: - name: "id" - in: "path" - description: "Field ID" - x-required-boolean: true - schema: - type: "string" - format: "uuid" - example: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" FieldId: name: "fieldId" in: "path" @@ -274,34 +250,49 @@ components: type: "string" format: "uuid" example: "e61b83f4-3a12-431e-8010-596f2466dc27" - BoundaryId: - name: "boundaryId" + Id: + name: "id" in: "path" - description: "Boundary Id" + description: "Field ID" x-required-boolean: true schema: - example: "e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" type: "string" format: "uuid" - AcceptUOMSystem: - name: "Accept-UOM-System" - in: "header" - description: "Takes METRIC and ENGLISH. Converts measurements to the chosen system." - x-required-boolean: false + example: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + OrgId: + name: "orgId" + in: "path" + description: "Organization" + x-required-boolean: true schema: type: "string" - enum: - - "ENGLISH" - - "METRIC" - example: "METRIC" - Active: - name: "activeOnly" + format: "int64" + example: 1234 + OrgId2: + name: "orgId" + in: "path" + description: "Organization ID" + x-required-boolean: true + schema: + type: "string" + format: "int64" + example: 1234 + OrgId3: + name: "orgId" + in: "path" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + format: "int64" + example: 654321 + RecordFilter: + name: "recordFilter" in: "query" - description: "Allows filtering based on active boundaries" - x-required-boolean: false + description: "Filter results based on status; defaults to active" schema: - type: "boolean" - default: false + type: "string" + example: "active, archived, all" requestBodies: PostRequest: content: @@ -343,6 +334,12 @@ components: example: "dtiSignalTypeRTK" description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." responses: + BadRequest: + description: "Request Validation failure. The boundary name must be between 1-20 characters. There must be at least one exterior ring. Each ring must have 4 or more points. The first and last point must be the same for each ring." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" BoundariesResponse: description: "A collection of boundaries" content: @@ -658,24 +655,6 @@ components: archived: false irrigated: true signalType: "dtiSignalTypeRTK" - Created: - description: "Created, with a Location header containing the URI of the newly created resource" - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - properties: - total: - type: "integer" - format: "int32" - example: 1 - values: - type: "array" - items: - $ref: "#/components/schemas/PostBoundary" - examples: - Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/123456/fields/109b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/96d79d34-89be-4f2b-b041-6b0181bc65db" Create: description: "Created, with a Location header containing the URI of the newly created resource" content: @@ -687,8 +666,8 @@ components: type: "integer" format: "int32" example: 1 - Update: - description: "Updated, with a Location header containing the URI of the newly created resource" + Created: + description: "Created, with a Location header containing the URI of the newly created resource" content: application/vnd.deere.axiom.v3+json: schema: @@ -698,9 +677,15 @@ components: type: "integer" format: "int32" example: 1 + values: + type: "array" + items: + $ref: "#/components/schemas/PostBoundary" examples: Headers: - description: "200 OK" + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/123456/fields/109b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/96d79d34-89be-4f2b-b041-6b0181bc65db" + Forbidden: + description: "The user does not have sufficient privileges to access this organization's boundaries." NoContent: description: "No Content. Request Completed Succesfully." content: @@ -710,140 +695,241 @@ components: examples: Headers: description: "204 No Content" - BadRequest: - description: "Request Validation failure. The boundary name must be between 1-20 characters. There must be at least one exterior ring. Each ring must have 4 or more points. The first and last point must be the same for each ring." + NotFound: + description: "The specified resource does not exist" + Update: + description: "Updated, with a Location header containing the URI of the newly created resource" content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/Errors" - Forbidden: - description: "The user does not have sufficient privileges to access this organization's boundaries." - NotFound: - description: "The specified resource does not exist" + type: "object" + properties: + total: + type: "integer" + format: "int32" + example: 1 + examples: + Headers: + description: "200 OK" schemas: - RecordMetadata: + AccuracyData: type: "object" - description: "Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)" properties: "@type": type: "string" - default: "RecordMetadata" - example: "RecordMetadata" - createdByUser: - type: "string" - description: "User involved in creating the entity. Only viewable with the RECORD_METADATA license" - example: "XYZ_USER" - lastModifiedByUser: - type: "string" - description: "User involved in modifying the entity. Only viewable with the RECORD_METADATA license" - example: "XYZ_USER" - userCreationTimestamp: - type: "string" - description: "Timestamp of entity creation" - readOnly: true - example: "2018-04-30T10:23:50.000Z" - userLastModifiedTimestamp: - type: "string" - description: "Timestamp of entity modification" - readOnly: true - example: "2018-05-01T08:11:23.000Z" - createdBySourceNode: + description: "Identifies the class" + example: "Accuracy Data" + datums: + type: "array" + items: + $ref: "#/components/schemas/DatumRange" + locationSources: + type: "array" + items: + $ref: "#/components/schemas/LocationSourceRange" + signalTypes: + type: "array" + items: + $ref: "#/components/schemas/SignalTypeRange" + horizontalErrorEstimates_mm: + $ref: "#/components/schemas/MeasurementAsDouble" + snapDistanceRanges: + type: "array" + items: + $ref: "#/components/schemas/SnapDistanceRange" + simplificationAlgorithm: type: "string" - format: "uuid" - description: "This is the specific instance of an application that created the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license." - readOnly: true - example: "0235d40e-02d0-44cb-a126-fff21173fc1f" - lastModifiedSourceNode: + description: "This indicates the style of simplification applied to a boundary." + example: "dtiBoundaryDP5InchNoMetadata" + maxSnapDistance: + $ref: "#/components/schemas/MeasurementAsDouble" + AutonomousReady: + type: "object" + description: "Indicates whether or not this boundary is Autonomous Ready." + properties: + boundaryAutonomousReady: + type: "boolean" + description: "Flag indicating if the boundary is ready for autonomous operations" + default: false + BoundariesLink: + properties: + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c" + description: "Fields Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organizations Link." + Boundary: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the type Boundary" + example: "Boundary" + id: + description: "An identifier for this boundary, which is unique within a field context" type: "string" format: "uuid" - description: "This is the specific instance of an application that modified the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license" + example: "bed69949-df25-4319-8f6c-94c62b466126" readOnly: true - example: "0235d40e-02d0-44cb-a126-fff21173fc1f" - createdBySourceSystemUri: + name: type: "string" - description: "Derived off of a client key (application that created) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." - readOnly: true - example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" - lastModifiedBySourceSystemUri: + example: "unique_boundary_name" + createdTime: type: "string" - description: "Derived off of a client key (application that did last modification) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." readOnly: true - example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" - GPSDatum: - type: "object" - required: - - "serialNumber" - properties: - "@type": + format: "date-time" + example: "2018-07-01T21:00:11Z" + modifiedTime: + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary" type: "string" - description: "Identifies the class" - example: "GPS Datum" - gpsDatumValue: - $ref: "#/components/schemas/GPSDatumValue" - horizontalUncertainty: + format: "date-time" + example: "2016-11-17T11:53:00.000Z" + area: $ref: "#/components/schemas/MeasurementAsDouble" - verticalUncertainty: + workableArea: $ref: "#/components/schemas/MeasurementAsDouble" - serialNumber: + multipolygons: + description: "A collection of polygons" + type: "array" + items: + $ref: "#/components/schemas/Polygon" + extent: + $ref: "#/components/schemas/Extent" + active: + type: "boolean" + description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." + archived: + type: "boolean" + description: "Indicates whether or not this boundary is archived." + signalType: type: "string" - example: "serialNumber" - GPSDatumValue: + description: "Indicates what signalType was used to capture boundary information" + irrigated: + type: "boolean" + description: "Indicates whether the contained area is irrigated" + sourceType: + description: "sourceType of the boundary" + type: "string" + example: "driven" + links: + readOnly: true + type: "array" + items: + $ref: "#/components/schemas/Link" + autonomousReady: + $ref: "#/components/schemas/AutonomousReady" + recordMetadata: + $ref: "#/components/schemas/RecordMetadata" + BoundaryOrgId: type: "object" - required: - - "datumUuid" - - "currentActiveDatum" - - "status" - - "referenceDatum" properties: - "@type": + id: + description: "Boundary ID" type: "string" - description: "Identifies the class" - example: "GPS Datum values" - currentActiveDatum: + format: "uuid" + example: "6232611a-0303-0234-8g7d-e1e1e11871b8" + name: type: "string" - example: "currentActiveDatum" - currentActiveEpochTime: - $ref: "#/components/schemas/MeasurementAsDouble" - baseLocation: - $ref: "#/components/schemas/ThreeDPoint" - status: + example: "Unique_Boundary_name" + description: "Boundary name" + area: + example: "See sample response below." + description: "Boundary area" + workableArea: + example: "See sample response below." + description: "Exteriors-interiors of the boundary." + sourceType: + description: "Describes the source of boundary (requires license to set)." type: "string" - example: "status" - referenceDatum: + example: "HandDrawn" + multipolygons: + description: "Boundary shape and exact location." + example: "See sample response below" + type: + description: "Boundary type" type: "string" - example: "referenceDatumValue" - referenceEpochTime: - $ref: "#/components/schemas/MeasurementAsDouble" - referencePositionOffsets: - $ref: "#/components/schemas/ThreeDPoint" - datumCreationTime: - $ref: "#/components/schemas/MeasurementAsDouble" - datumUuid: + example: "exterior" + passable: + description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." + type: "boolean" + example: true + extent: + description: "Coordinates of the extent of the boundary." + example: "See sample response below." + active: + description: "Indicates whether or not the boundary is active." + type: "boolean" + example: true + archived: + type: "boolean" + example: true + description: "Indicates whether or not the boundary is archived." + signalType: type: "string" - description: "Unique id for this datum" - example: "205ff5ba-8d63-4a66-bbfe-b2a31ebad0d3" - ThreeDPoint: + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." + modifiedTime: + example: "2017-11-16T15:43:27.496Z" + type: "string" + format: "date-time" + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." + createdTime: + example: "2017-11-16T15:43:27.496Z" + type: "string" + format: "date-time" + description: "An ISO-8601 formatted timestamp of the time this boundary was created." + irrigated: + type: "boolean" + example: true + description: "Indicates whether the contained area is irrigated." + BoundaryOrgId2: type: "object" properties: - "@type": + id: + description: "Boundary ID" type: "string" - description: "Identifies the class" - example: "3-dimensional point" - lat: - type: "number" - format: "double" - description: "The latitude of the point" - example: 32.118552 - lon: - type: "number" - format: "double" - description: "The longitude of the point" - example: -81.260776 - height: - type: "number" - format: "double" - description: "The z-axis of the point" - example: 1 + format: "uuid" + example: "6232611a-0303-0234-8g7d-e1e1e11871b8" + name: + type: "string" + example: "AutoGenerated 2020 Seeding" + description: "Boundary name" + sourceType: + description: "Describes the source of boundary (requires license to set)." + type: "string" + example: "Auto" + multipolygons: + description: "Boundary shape and exact location." + example: "See sample response below" + type: + description: "Boundary type" + type: "string" + example: "exterior" + passable: + description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." + type: "boolean" + example: true + extent: + description: "Coordinates of the extent of the boundary." + example: "See sample response below." + active: + description: "Indicates whether or not the boundary is active." + type: "boolean" + example: true + signalType: + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." + modifiedTime: + example: "2017-11-16T15:43:27.496Z" + type: "string" + format: "date-time" + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." + irrigated: + type: "boolean" + example: true + description: "Indicates whether the contained area is irrigated." DatumRange: type: "object" properties: @@ -863,94 +949,109 @@ components: example: 127 datum: $ref: "#/components/schemas/GPSDatum" - LocationSourceRange: + Errors: type: "object" + format: "Errors/DataValidationException" properties: "@type": type: "string" - description: "Identifies the class" - example: "Location Source Range" - startPointIndex: - type: "integer" - format: "int32" - description: "starting point index this location source applies to relative to the boundary" - example: 0 - endPointIndex: - type: "integer" - format: "int32" - description: "ending point index this location source applies to relative to the boundary" - example: 127 - locationSource: - type: "string" - description: "value of location source used" - example: "\"locationSource\": \"Computed from Rigid Kinematics\"" - SignalTypeRange: + example: "Errors" + otherAttributes: + type: "object" + example: {} + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + message: + type: "string" + description: "An english description of the error" + example: "Duplicate boundary name" + code: + type: "string" + description: "A string constant representing the type of error" + example: "some error code" + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "name" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: "some boundary name" + Extent: type: "object" + readOnly: true properties: "@type": type: "string" description: "Identifies the class" - example: "Signal Type Range" - startPointIndex: - type: "integer" - description: "starting point index this signal type applies to relative to the boundary" - example: 0 - endPointIndex: - type: "integer" - description: "ending point index this signal type applies to relative to the boundary" - example: 127 - signalType: - type: "string" - description: "value of signal type used" - example: "\"signalType\": \"SFRTK\"" - SnapDistanceRange: + example: "Extent" + topLeft: + $ref: "#/components/schemas/Point" + bottomRight: + $ref: "#/components/schemas/Point" + GPSDatum: type: "object" + required: + - "serialNumber" properties: "@type": type: "string" description: "Identifies the class" - example: "Snap Distance Range" - startIndex: - type: "integer" - description: "starting point index this snap distance applies to relative to the boundary" - example: 0 - endIndex: - type: "integer" - description: "ending point index this snap distance applies to relative to the boundary" - example: 127 - snapDistance: + example: "GPS Datum" + gpsDatumValue: + $ref: "#/components/schemas/GPSDatumValue" + horizontalUncertainty: $ref: "#/components/schemas/MeasurementAsDouble" - AccuracyData: + verticalUncertainty: + $ref: "#/components/schemas/MeasurementAsDouble" + serialNumber: + type: "string" + example: "serialNumber" + GPSDatumValue: type: "object" + required: + - "datumUuid" + - "currentActiveDatum" + - "status" + - "referenceDatum" properties: "@type": type: "string" description: "Identifies the class" - example: "Accuracy Data" - datums: - type: "array" - items: - $ref: "#/components/schemas/DatumRange" - locationSources: - type: "array" - items: - $ref: "#/components/schemas/LocationSourceRange" - signalTypes: - type: "array" - items: - $ref: "#/components/schemas/SignalTypeRange" - horizontalErrorEstimates_mm: + example: "GPS Datum values" + currentActiveDatum: + type: "string" + example: "currentActiveDatum" + currentActiveEpochTime: $ref: "#/components/schemas/MeasurementAsDouble" - snapDistanceRanges: - type: "array" - items: - $ref: "#/components/schemas/SnapDistanceRange" - simplificationAlgorithm: + baseLocation: + $ref: "#/components/schemas/ThreeDPoint" + status: type: "string" - description: "This indicates the style of simplification applied to a boundary." - example: "dtiBoundaryDP5InchNoMetadata" - maxSnapDistance: + example: "status" + referenceDatum: + type: "string" + example: "referenceDatumValue" + referenceEpochTime: + $ref: "#/components/schemas/MeasurementAsDouble" + referencePositionOffsets: + $ref: "#/components/schemas/ThreeDPoint" + datumCreationTime: $ref: "#/components/schemas/MeasurementAsDouble" + datumUuid: + type: "string" + description: "Unique id for this datum" + example: "205ff5ba-8d63-4a66-bbfe-b2a31ebad0d3" Headland: type: "object" required: @@ -968,35 +1069,42 @@ components: active: type: "boolean" description: "indicates if this is the active headland in a collection" - Point: - type: "object" + Link: + description: "Provides a reference to an associated object or list" + required: + - "rel" + - "uri" properties: - "@type": + rel: type: "string" - description: "Identifies the class" - example: "Point" - lat: - type: "number" - format: "double" - description: "The latitude of the point" - example: 32.118552 - lon: - type: "number" - format: "double" - description: "The longitude of the point" - example: -81.260776 - Extent: + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + example: "self" + uri: + type: "string" + format: "uri" + description: "The location of the resource" + example: "https://partnerapi.deere.com/platform/organizations/1/boundaries/00000000-0000-0000-0000-000000000000" + LocationSourceRange: type: "object" - readOnly: true properties: "@type": type: "string" description: "Identifies the class" - example: "Extent" - topLeft: - $ref: "#/components/schemas/Point" - bottomRight: - $ref: "#/components/schemas/Point" + example: "Location Source Range" + startPointIndex: + type: "integer" + format: "int32" + description: "starting point index this location source applies to relative to the boundary" + example: 0 + endPointIndex: + type: "integer" + format: "int32" + description: "ending point index this location source applies to relative to the boundary" + example: 127 + locationSource: + type: "string" + description: "value of location source used" + example: "\"locationSource\": \"Computed from Rigid Kinematics\"" MeasurementAsDouble: type: "object" readOnly: true @@ -1013,6 +1121,23 @@ components: type: "string" description: "The unit of measure for this value" example: "ha" + Point: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 32.118552 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: -81.260776 Polygon: properties: rings: @@ -1052,242 +1177,39 @@ components: type: "string" description: "value of signal type used" example: "dtiSignalTypeRTK" - creationMethod: - type: "string" - description: "To determine how their boundary was generated" - example: "dtiBoundaryFromWebCoverage" - Errors: - type: "object" - format: "Errors/DataValidationException" - properties: - "@type": - type: "string" - example: "Errors" - otherAttributes: - type: "object" - example: {} - errors: - type: "array" - items: - type: "object" - format: "Error/ConstraintViolation" - properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - message: - type: "string" - description: "An english description of the error" - example: "Duplicate boundary name" - code: - type: "string" - description: "A string constant representing the type of error" - example: "some error code" - field: - type: "string" - description: "The name of the property or parameter deemed invalid" - example: "name" - invalidValue: - type: "string" - description: "The value that was supplied for this field in the request" - example: "some boundary name" - Link: - description: "Provides a reference to an associated object or list" - required: - - "rel" - - "uri" - properties: - rel: - type: "string" - description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." - example: "self" - uri: - type: "string" - format: "uri" - description: "The location of the resource" - example: "https://partnerapi.deere.com/platform/organizations/1/boundaries/00000000-0000-0000-0000-000000000000" - AutonomousReady: - type: "object" - description: "Indicates whether or not this boundary is Autonomous Ready." - properties: - boundaryAutonomousReady: - type: "boolean" - description: "Flag indicating if the boundary is ready for autonomous operations" - default: false - Boundary: - type: "object" - properties: - "@type": - type: "string" - description: "Identifies the type Boundary" - example: "Boundary" - id: - description: "An identifier for this boundary, which is unique within a field context" - type: "string" - format: "uuid" - example: "bed69949-df25-4319-8f6c-94c62b466126" - readOnly: true - name: - type: "string" - example: "unique_boundary_name" - createdTime: - type: "string" - readOnly: true - format: "date-time" - example: "2018-07-01T21:00:11Z" - modifiedTime: - description: "An ISO-8601 formatted timestamp of the last modification made to this boundary" - type: "string" - format: "date-time" - example: "2016-11-17T11:53:00.000Z" - area: - $ref: "#/components/schemas/MeasurementAsDouble" - workableArea: - $ref: "#/components/schemas/MeasurementAsDouble" - multipolygons: - description: "A collection of polygons" - type: "array" - items: - $ref: "#/components/schemas/Polygon" - extent: - $ref: "#/components/schemas/Extent" - active: - type: "boolean" - description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." - archived: - type: "boolean" - description: "Indicates whether or not this boundary is archived." - signalType: - type: "string" - description: "Indicates what signalType was used to capture boundary information" - irrigated: - type: "boolean" - description: "Indicates whether the contained area is irrigated" - sourceType: - description: "sourceType of the boundary" - type: "string" - example: "driven" - links: - readOnly: true - type: "array" - items: - $ref: "#/components/schemas/Link" - autonomousReady: - $ref: "#/components/schemas/AutonomousReady" - recordMetadata: - $ref: "#/components/schemas/RecordMetadata" - BoundaryOrgId: - type: "object" + creationMethod: + type: "string" + description: "To determine how their boundary was generated" + example: "dtiBoundaryFromWebCoverage" + PostBoundary: properties: - id: - description: "Boundary ID" - type: "string" - format: "uuid" - example: "6232611a-0303-0234-8g7d-e1e1e11871b8" name: type: "string" - example: "Unique_Boundary_name" - description: "Boundary name" - area: - example: "See sample response below." - description: "Boundary area" - workableArea: - example: "See sample response below." - description: "Exteriors-interiors of the boundary." - sourceType: - description: "Describes the source of boundary (requires license to set)." - type: "string" - example: "HandDrawn" - multipolygons: - description: "Boundary shape and exact location." - example: "See sample response below" - type: - description: "Boundary type" - type: "string" - example: "exterior" - passable: - description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." - type: "boolean" - example: true - extent: - description: "Coordinates of the extent of the boundary." - example: "See sample response below." + example: "Boundary_Unique_Name" + description: "Boundary Name." active: - description: "Indicates whether or not the boundary is active." type: "boolean" - example: true - archived: + example: "false" + description: "Indicates whether the boundary is active in this field." + archive: type: "boolean" - example: true - description: "Indicates whether or not the boundary is archived." - signalType: - type: "string" - example: "dtiSignalTypeRTK" - description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." - modifiedTime: - example: "2017-11-16T15:43:27.496Z" - type: "string" - format: "date-time" - description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." - createdTime: - example: "2017-11-16T15:43:27.496Z" - type: "string" - format: "date-time" - description: "An ISO-8601 formatted timestamp of the time this boundary was created." + example: "false" + description: "Indicates whether the boundary is archived." irrigated: type: "boolean" - example: true - description: "Indicates whether the contained area is irrigated." - BoundaryOrgId2: - type: "object" - properties: - id: - description: "Boundary ID" - type: "string" - format: "uuid" - example: "6232611a-0303-0234-8g7d-e1e1e11871b8" - name: - type: "string" - example: "AutoGenerated 2020 Seeding" - description: "Boundary name" - sourceType: - description: "Describes the source of boundary (requires license to set)." - type: "string" - example: "Auto" + example: "false" + description: "Indicates whether the boundary is irrigated." multipolygons: - description: "Boundary shape and exact location." - example: "See sample response below" - type: - description: "Boundary type" + description: "Polygon representation of the new boundary." + example: "See sample request below." + sourceType: + example: "External" type: "string" - example: "exterior" - passable: - description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." - type: "boolean" - example: true - extent: - description: "Coordinates of the extent of the boundary." - example: "See sample response below." - active: - description: "Indicates whether or not the boundary is active." - type: "boolean" - example: true + description: "Describes the source of boundary (requires license to set)." signalType: type: "string" example: "dtiSignalTypeRTK" description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." - modifiedTime: - example: "2017-11-16T15:43:27.496Z" - type: "string" - format: "date-time" - description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." - irrigated: - type: "boolean" - example: true - description: "Indicates whether the contained area is irrigated." PostBoundaryGet: properties: id: @@ -1351,11 +1273,12 @@ components: description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." type: "boolean" example: true - PostBoundary: + PutBoundary: + type: "object" properties: name: type: "string" - example: "Boundary_Unique_Name" + example: "Boundary01" description: "Boundary Name." active: type: "boolean" @@ -1380,41 +1303,118 @@ components: type: "string" example: "dtiSignalTypeRTK" description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." - PutBoundary: + RecordMetadata: type: "object" + description: "Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)" properties: - name: + "@type": type: "string" - example: "Boundary01" - description: "Boundary Name." - active: - type: "boolean" - example: "false" - description: "Indicates whether the boundary is active in this field." - archive: - type: "boolean" - example: "false" - description: "Indicates whether the boundary is archived." - irrigated: - type: "boolean" - example: "false" - description: "Indicates whether the boundary is irrigated." - multipolygons: - description: "Polygon representation of the new boundary." - example: "See sample request below." - sourceType: - example: "External" + default: "RecordMetadata" + example: "RecordMetadata" + createdByUser: type: "string" - description: "Describes the source of boundary (requires license to set)." + description: "User involved in creating the entity. Only viewable with the RECORD_METADATA license" + example: "XYZ_USER" + lastModifiedByUser: + type: "string" + description: "User involved in modifying the entity. Only viewable with the RECORD_METADATA license" + example: "XYZ_USER" + userCreationTimestamp: + type: "string" + description: "Timestamp of entity creation" + readOnly: true + example: "2018-04-30T10:23:50.000Z" + userLastModifiedTimestamp: + type: "string" + description: "Timestamp of entity modification" + readOnly: true + example: "2018-05-01T08:11:23.000Z" + createdBySourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that created the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license." + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + lastModifiedSourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that modified the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license" + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + createdBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that created) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + lastModifiedBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that did last modification) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + SignalTypeRange: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Signal Type Range" + startPointIndex: + type: "integer" + description: "starting point index this signal type applies to relative to the boundary" + example: 0 + endPointIndex: + type: "integer" + description: "ending point index this signal type applies to relative to the boundary" + example: 127 signalType: type: "string" - example: "dtiSignalTypeRTK" - description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." - BoundariesLink: + description: "value of signal type used" + example: "\"signalType\": \"SFRTK\"" + SnapDistanceRange: + type: "object" properties: - field: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c" - description: "Fields Link." - owningOrganization: - example: "https://sandboxapi.deere.com/platform/organizations/1234" - description: "Organizations Link." + "@type": + type: "string" + description: "Identifies the class" + example: "Snap Distance Range" + startIndex: + type: "integer" + description: "starting point index this snap distance applies to relative to the boundary" + example: 0 + endIndex: + type: "integer" + description: "ending point index this snap distance applies to relative to the boundary" + example: 127 + snapDistance: + $ref: "#/components/schemas/MeasurementAsDouble" + ThreeDPoint: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "3-dimensional point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 32.118552 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: -81.260776 + height: + type: "number" + format: "double" + description: "The z-axis of the point" + example: 1 + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag2: "ag2" + ag3: "ag3" diff --git a/specs/fixed/clients.yaml b/specs/fixed/clients.yaml index 4fed2b8..619da1b 100644 --- a/specs/fixed/clients.yaml +++ b/specs/fixed/clients.yaml @@ -14,6 +14,61 @@ servers: - "sandboxapi" - "partnerapi" paths: + /organizations/{orgID}/clients/{id}/fields: + get: + description: "View the field to which a specific client belongs. For the client, the response links to the following resources: boundaries: View the boundaries that belong to this field. clients: View the client that belongs to this field. farms: View the farms within this field. owningOrganization: View the organization that owns the field." + summary: "View a Client's Field" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/X-deere-signature" + responses: + "200": + description: "Get Field by client Id" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLinkID" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FieldResponse" + examples: + No Header: + description: "20O OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + total: 1 + values: + - name: "Narnia" + archived: false + id: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58" + - rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" + - rel: "clients" + uri: "https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" /organizations/{orgId}/clients: get: description: "Retrieve all of the clients for an organization" @@ -128,72 +183,8 @@ paths: $ref: "#/components/responses/DoesNotHaveAccessResponse" "404": $ref: "#/components/responses/OrgNotFound" - /organizations/{orgID}/clients/{id}/fields: - get: - description: "View the field to which a specific client belongs. For the client, the response links to the following resources: boundaries: View the boundaries that belong to this field. clients: View the client that belongs to this field. farms: View the farms within this field. owningOrganization: View the organization that owns the field." - summary: "View a Client's Field" - security: - - OAuth2: - - "ag1" - parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/Id" - - $ref: "#/components/parameters/X-deere-signature" - responses: - "200": - description: "Get Field by client Id" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/GroupLinkID" - total: - type: "integer" - example: 1 - format: "int32" - values: - type: "array" - items: - $ref: "#/components/schemas/FieldResponse" - examples: - No Header: - description: "20O OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" - total: 1 - values: - - name: "Narnia" - archived: false - id: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58" - - rel: "boundaries" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" - - rel: "clients" - uri: "https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" - - rel: "farms" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/1234" - - rel: "contributionDefinition" - uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" components: parameters: - OrgId: - in: "path" - name: "orgId" - description: "The id of the organization" - x-required-boolean: true - schema: - type: "integer" - format: "int64" - example: 12345 ClientId: in: "path" name: "clientId" @@ -209,20 +200,6 @@ components: x-required-boolean: false schema: type: "string" - FarmName: - in: "query" - name: "name" - description: "farm name" - x-required-boolean: false - schema: - type: "string" - RecordFilter: - in: "query" - name: "recordFilter" - description: "Filter clients by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE" - schema: - type: "string" - example: "ACTIVE" Embed: name: "embed" in: "query" @@ -231,13 +208,31 @@ components: schema: type: "string" example: "showRecordMetadata" - X-deere-signature: - name: "x-deere-signature" - in: "header" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + FarmName: + in: "query" + name: "name" + description: "farm name" + x-required-boolean: false schema: type: "string" - example: "9r8392615e4b4e1c92018026f47109bb" + Id: + name: "clientId" + in: "path" + description: "Client ID" + x-required-boolean: true + schema: + type: "string" + format: "uuid" + example: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + OrgId: + in: "path" + name: "orgId" + description: "The id of the organization" + x-required-boolean: true + schema: + type: "integer" + format: "int64" + example: 12345 OrgId2: in: "path" name: "orgID" @@ -247,21 +242,68 @@ components: type: "string" format: "int64" example: 123456 - Id: - name: "clientId" - in: "path" - description: "Client ID" - x-required-boolean: true + RecordFilter: + in: "query" + name: "recordFilter" + description: "Filter clients by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE" schema: type: "string" - format: "uuid" - example: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + example: "ACTIVE" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" requestBodies: ClientRequest: $ref: "#/components/schemas/ClientPost" ClientRequest2: $ref: "#/components/schemas/ClientPost" responses: + ClientCreatedResponse: + description: "created" + headers: + Location: + schema: + description: "The uri of the newly created resource" + type: "string" + format: "url" + example: "https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/12345/clients/4r539261-5e4b-4e1c-9201-8026f47109bb" + ClientReturned: + description: "Success" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Client" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" + value: + name: "Aslan" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + archived: false ClientsReturned: description: "Array of clients containing links related to assets" content: @@ -301,66 +343,33 @@ components: uri: "https://sandboxapi.deere.com/platform/organizations/6789" id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" archived: false - ClientReturned: - description: "Success" + DeletedResponse: + description: "Deleted" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + DoesNotHaveAccessResponse: + description: "Does not have access" + FarmsResponse: + description: "Get Farm by client Id" content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/Client" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" - value: - name: "Aslan" - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" - - rel: "fields" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" - - rel: "farms" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/6789" - id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" - archived: false - ClientCreatedResponse: - description: "created" - headers: - Location: - schema: - description: "The uri of the newly created resource" - type: "string" - format: "url" - example: "https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - total: - type: "integer" - example: 1 - format: "int32" - examples: - Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/12345/clients/4r539261-5e4b-4e1c-9201-8026f47109bb" - FarmsResponse: - description: "Get Farm by client Id" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/GroupLink" - total: - type: "integer" - example: 1 - format: "int32" - values: - type: "array" - items: - $ref: "#/components/schemas/FarmResponse" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FarmResponse" examples: No Header: description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" @@ -383,13 +392,18 @@ components: uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients" - rel: "owningOrganization" uri: "https://sandboxapi.deere.com/platform/organizations/6789" - DeletedResponse: - description: "Deleted" + HasNotChanged: + description: "Content has not changed since last call" + MalformedRequest: + description: "Request Validation failure." content: application/vnd.deere.axiom.v3+json: - examples: - Headers: - description: "204 No Content" + schema: + $ref: "#/components/schemas/MalformedRequestError" + OrgNotFound: + description: "Organization not found" + OrgOrClientNotFound: + description: "Organization or client not found" UpdatedResponse: description: "Updated" content: @@ -403,36 +417,7 @@ components: examples: Headers: description: "204 No Content" - DoesNotHaveAccessResponse: - description: "Does not have access" - OrgNotFound: - description: "Organization not found" - HasNotChanged: - description: "Content has not changed since last call" - OrgOrClientNotFound: - description: "Organization or client not found" - MalformedRequest: - description: "Request Validation failure." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/MalformedRequestError" schemas: - Clients: - type: "object" - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/GroupLink" - total: - type: "integer" - example: 1 - format: "int32" - values: - type: "array" - items: - $ref: "#/components/schemas/Client" Client: type: "object" properties: @@ -460,21 +445,112 @@ components: type: "boolean" example: true description: "Archived status" - GroupLink: - description: "Link to another resource" + ClientPost: + properties: + name: + example: "UniqueClientName" + type: "string" + description: "New Client Name" + archived: + example: "false" + type: "string" + description: "Archived status (false = active)" + Clients: type: "object" properties: - "@type": + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/Client" + ContentType: + properties: {} + Errors: + type: "object" + format: "Errors/DataValidationException" + properties: + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + example: + guid: "438d14c1-db6f-402a-a349-942ccab36c59" + message: "invalid client name" + code: 400 + field: "client name" + invalidValue: "?????" + properties: + guid: + type: "string" + format: "uuid" + example: "438d14c1-db6f-402a-a349-942ccab36c59" + message: + type: "string" + description: "A description of the error translated into the language specified in the 'Accept-Language' header if available, otherwise English" + example: "invalid client name" + code: + type: "string" + description: "A string constant representing the type of error" + example: 400 + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "client name" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: "?????" + FarmResponse: + properties: + farmId: + x-required-boolean: true type: "string" - example: "Link" - rel: + farmName: x-required-boolean: true type: "string" - example: "self" - uri: + clientId: x-required-boolean: true type: "string" - example: "https://sandboxapi.deere.com/platform/organizations/5555/clients" + clientName: + type: "string" + clientUri: + type: "string" + orgId: + x-required-boolean: true + type: "integer" + format: "int64" + archived: + type: "boolean" + sourceModifiedDate: + type: "string" + sourceCreatedDate: + type: "string" + createdContributionId: + type: "string" + description: "Id of the system which created the farm" + modifiedContributionId: + type: "string" + description: "Id of the system which last modified the farm like AppId" + createdSourceNode: + type: "string" + description: "The node which created the farm" + modifiedSourceNode: + type: "string" + description: "The node which last modified the Farm" + createdBy: + type: "string" + description: "The Id of the entity which created the farm" + modifiedBy: + type: "string" + description: "The Id of the entity which last modified the farm" FieldResponse: properties: x-deere-signature: @@ -490,9 +566,7 @@ components: type: "string" description: "Client Name" example: "Aslan" - ContentType: - properties: {} - Link: + GroupLink: description: "Link to another resource" type: "object" properties: @@ -506,7 +580,7 @@ components: uri: x-required-boolean: true type: "string" - example: "https://sandboxapi.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + example: "https://sandboxapi.deere.com/platform/organizations/5555/clients" GroupLinkID: properties: boundaries: @@ -524,95 +598,21 @@ components: contributionDefinition: example: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" description: "Contribution Definition Link" - ClientPost: - properties: - name: - example: "UniqueClientName" - type: "string" - description: "New Client Name" - archived: - example: "false" - type: "string" - description: "Archived status (false = active)" - FarmResponse: + Link: + description: "Link to another resource" + type: "object" properties: - farmId: - x-required-boolean: true - type: "string" - farmName: - x-required-boolean: true + "@type": type: "string" - clientId: + example: "Link" + rel: x-required-boolean: true type: "string" - clientName: - type: "string" - clientUri: - type: "string" - orgId: + example: "self" + uri: x-required-boolean: true - type: "integer" - format: "int64" - archived: - type: "boolean" - sourceModifiedDate: - type: "string" - sourceCreatedDate: type: "string" - createdContributionId: - type: "string" - description: "Id of the system which created the farm" - modifiedContributionId: - type: "string" - description: "Id of the system which last modified the farm like AppId" - createdSourceNode: - type: "string" - description: "The node which created the farm" - modifiedSourceNode: - type: "string" - description: "The node which last modified the Farm" - createdBy: - type: "string" - description: "The Id of the entity which created the farm" - modifiedBy: - type: "string" - description: "The Id of the entity which last modified the farm" - Errors: - type: "object" - format: "Errors/DataValidationException" - properties: - errors: - type: "array" - items: - type: "object" - format: "Error/ConstraintViolation" - example: - guid: "438d14c1-db6f-402a-a349-942ccab36c59" - message: "invalid client name" - code: 400 - field: "client name" - invalidValue: "?????" - properties: - guid: - type: "string" - format: "uuid" - example: "438d14c1-db6f-402a-a349-942ccab36c59" - message: - type: "string" - description: "A description of the error translated into the language specified in the 'Accept-Language' header if available, otherwise English" - example: "invalid client name" - code: - type: "string" - description: "A string constant representing the type of error" - example: 400 - field: - type: "string" - description: "The name of the property or parameter deemed invalid" - example: "client name" - invalidValue: - type: "string" - description: "The value that was supplied for this field in the request" - example: "?????" + example: "https://sandboxapi.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d" MalformedRequestError: type: "object" properties: diff --git a/specs/fixed/connection-management.yaml b/specs/fixed/connection-management.yaml index 5fb8fd8..36f2daa 100644 --- a/specs/fixed/connection-management.yaml +++ b/specs/fixed/connection-management.yaml @@ -59,14 +59,6 @@ components: schema: type: "string" example: "123456" - OrgId: - in: "path" - name: "orgId" - description: "Organization Id" - x-required-boolean: true - schema: - type: "integer" - example: 2101 CreatedAfter: in: "query" name: "createdAfter" @@ -75,9 +67,15 @@ components: schema: type: "string" example: "2021-10-15T08:00:00Z" + OrgId: + in: "path" + name: "orgId" + description: "Organization Id" + x-required-boolean: true + schema: + type: "integer" + example: 2101 responses: - Forbidden: - description: "Requester not authorized to delete the requested connection" Deleted: description: "Deleted" content: @@ -87,23 +85,9 @@ components: examples: Headers: description: "204 No Content, the connection has been deleted" + Forbidden: + description: "Requester not authorized to delete the requested connection" schemas: - Link: - description: "Link to the delete action" - type: "object" - properties: - "@type": - type: "string" - default: "Link" - example: "Link" - rel: - x-required-boolean: true - type: "string" - example: "self" - uri: - x-required-boolean: true - type: "string" - example: "https://api.deere.com/platform/connections/abc123" Connection: type: "object" properties: @@ -154,3 +138,19 @@ components: type: "array" items: $ref: "#/components/schemas/Connection" + Link: + description: "Link to the delete action" + type: "object" + properties: + "@type": + type: "string" + default: "Link" + example: "Link" + rel: + x-required-boolean: true + type: "string" + example: "self" + uri: + x-required-boolean: true + type: "string" + example: "https://api.deere.com/platform/connections/abc123" diff --git a/specs/fixed/crop-types.yaml b/specs/fixed/crop-types.yaml index 5a06227..f86c8c2 100644 --- a/specs/fixed/crop-types.yaml +++ b/specs/fixed/crop-types.yaml @@ -33,7 +33,7 @@ paths: $ref: "#/components/responses/CropTypeCollectionResponse" "405": $ref: "#/components/responses/CropTypeMethodNotAllowed" - /cropTypes/{name}: + /cropTypes/{id}: get: summary: "View a specific cropType" description: "This endpoint will return details of specific cropType." @@ -41,16 +41,16 @@ paths: - OAuth2: - "ag1" parameters: - - $ref: "#/components/parameters/Name" + - $ref: "#/components/parameters/Id" - $ref: "#/components/parameters/X-deere-signature2" responses: "200": - $ref: "#/components/responses/CropTypeNameResponse" + $ref: "#/components/responses/CropTypeIdResponse" "404": $ref: "#/components/responses/CropTypeNotFound" "405": $ref: "#/components/responses/CropTypeMethodNotAllowed" - /cropTypes/{id}: + /cropTypes/{name}: get: summary: "View a specific cropType" description: "This endpoint will return details of specific cropType." @@ -58,11 +58,11 @@ paths: - OAuth2: - "ag1" parameters: - - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/Name" - $ref: "#/components/parameters/X-deere-signature2" responses: "200": - $ref: "#/components/responses/CropTypeIdResponse" + $ref: "#/components/responses/CropTypeNameResponse" "404": $ref: "#/components/responses/CropTypeNotFound" "405": @@ -86,14 +86,23 @@ paths: "405": $ref: "#/components/responses/CropTypeMethodNotAllowed" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag1: "ag1" parameters: + Id: + in: "path" + name: "id" + description: "This is the crop type Id" + x-required-boolean: true + schema: + type: "string" + example: 173 + Name: + in: "path" + name: "name" + description: "This is the crop type name" + x-required-boolean: true + schema: + type: "string" + example: "ENERGY_CANE" RecordFilter: name: "recordFilter" in: "query" @@ -119,22 +128,6 @@ components: type: "string" format: "uuid" example: "9r8392615e4b4e1c12458026f47109bb" - Name: - in: "path" - name: "name" - description: "This is the crop type name" - x-required-boolean: true - schema: - type: "string" - example: "ENERGY_CANE" - Id: - in: "path" - name: "id" - description: "This is the crop type Id" - x-required-boolean: true - schema: - type: "string" - example: 173 organizationId: in: "path" name: "organizationId" @@ -198,7 +191,7 @@ components: - "@type": "Link" rel: "self" uri: "https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" - CropTypeNameResponse: + CropTypeIdResponse: description: "A collection of crop types" content: application/vnd.deere.axiom.v3+json: @@ -212,7 +205,7 @@ components: values: type: "array" items: - $ref: "#/components/schemas/CropType2" + $ref: "#/components/schemas/CropType3" examples: No Header: description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 9b5392615e4b4e1c92013026f47109bb" @@ -245,7 +238,9 @@ components: - "@type": "Link" rel: "self" uri: "https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" - CropTypeIdResponse: + CropTypeMethodNotAllowed: + description: "The requested method is not allowed" + CropTypeNameResponse: description: "A collection of crop types" content: application/vnd.deere.axiom.v3+json: @@ -259,7 +254,7 @@ components: values: type: "array" items: - $ref: "#/components/schemas/CropType3" + $ref: "#/components/schemas/CropType2" examples: No Header: description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 9b5392615e4b4e1c92013026f47109bb" @@ -292,6 +287,8 @@ components: - "@type": "Link" rel: "self" uri: "https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" + CropTypeNotFound: + description: "Not found" CropTypeorganizationResponse: description: "A collection of crop types" content: @@ -346,10 +343,6 @@ components: - "@type": "Link" rel: "self" uri: "https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" - CropTypeMethodNotAllowed: - description: "The requested method is not allowed" - CropTypeNotFound: - description: "Not found" schemas: CropType: type: "object" @@ -579,3 +572,10 @@ components: type: "string" example: "ET_COMBINE" description: "This is the equipment type enumeration value" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" diff --git a/specs/fixed/equipment-measurement.yaml b/specs/fixed/equipment-measurement.yaml index e001783..9e8d832 100644 --- a/specs/fixed/equipment-measurement.yaml +++ b/specs/fixed/equipment-measurement.yaml @@ -97,35 +97,49 @@ paths: $ref: "#/components/schemas/Accept" components: parameters: - MachineId: + EquipmentId: in: "path" - name: "machineId" - description: "The identifier of the machine" + name: "principalId" + description: "The master record identifier of the equipment" x-required-boolean: true schema: type: "integer" format: "int64" example: 1234 - OrganizationId: + MachineId: in: "path" - name: "organizationId" - description: "The identifier of the organization" + name: "machineId" + description: "The identifier of the machine" x-required-boolean: true schema: type: "integer" format: "int64" example: 1234 - EquipmentId: + OrganizationId: in: "path" - name: "principalId" - description: "The master record identifier of the equipment" + name: "organizationId" + description: "The identifier of the organization" x-required-boolean: true schema: type: "integer" format: "int64" example: 1234 + responses: + CreateEquip: + description: "No Content" + content: + application/json: + schema: + type: "object" + examples: + Headers: + description: "204 No Content" schemas: - PTOStatusValue: + Accept: + properties: {} + ContentType: + properties: {} + EngineStateValue: type: "object" properties: value: @@ -133,18 +147,55 @@ components: enum: - "On" - "Off" - - "Fault" - - "Unavailable" - description: "Status of PTO (Power Take-Off). ptoStatus possible values are: On, Off, Fault, or Unavailable." + description: "State of the engine. engineState only possible values are: On or Off." example: "On" x-required-boolean: true - MeasurementNew: + Equipment: + title: "Equipment" + type: "object" + properties: + id: + type: "integer" + description: "Equipment Id of a configured equipment" + example: 7269 + format: "int64" + make: + type: "string" + description: "Make of a configured equipment, maxLength = 20" + example: "JOHN DEERE" + name: + type: "string" + description: "Name of a configured equipment (sometimes called model). maxLength" + example: 6120 + EquipmentMeasurements: + properties: + timestamp: + type: "string" + format: "date-time" + description: "Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order." + measurements: + type: "array" + format: "date-time" + items: + $ref: "#/components/schemas/Measurement" + EquipmentMeasurementsNew: + properties: + timestamp: + type: "string" + format: "date-time" + description: "Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order." + measurements: + type: "array" + format: "date-time" + items: + $ref: "#/components/schemas/MeasurementNew" + Measurement: title: "Measurement" type: "object" properties: Speed: allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "string" properties: name: @@ -160,7 +211,7 @@ components: description: "The unit of measure we should interpret the value as. kph is currently the only supported unit for speed." Heading: allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "object" properties: name: @@ -176,7 +227,7 @@ components: description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for heading." FuelLevel: allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "object" properties: name: @@ -194,7 +245,7 @@ components: title: "Latitude" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "object" properties: name: @@ -212,7 +263,7 @@ components: title: "Longitude" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "object" properties: name: @@ -243,7 +294,7 @@ components: title: "Odometer" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "object" properties: name: @@ -261,7 +312,7 @@ components: title: "EngineHours" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValueNew" + - $ref: "#/components/schemas/MeasurementValue" - type: "object" properties: name: @@ -275,83 +326,13 @@ components: enum: - "hours" description: "The unit of measure we should interpret the value as. hours is currently the only supported unit for engineHours" - EngineSpeed: - allOf: - - $ref: "#/components/schemas/MeasurementValueNew" - - type: "object" - properties: - name: - type: "string" - enum: - - "engineSpeed" - description: "Name identifying which measurement this value corresponds to. engineSpeed only possible value for providing engineSpeed." - x-required-boolean: true - unit: - type: "string" - enum: - - "RPM" - description: "The unit of measure we should interpret the value as. RPM is the only supported unit for engineSpeed" - PTOStatus: - allOf: - - $ref: "#/components/schemas/PTOStatusValue" - - type: "object" - properties: - name: - type: "string" - enum: - - "ptoStatus" - description: "Name identifying which measurement this value corresponds to. ptoStatus only possible value for providing ptoStatus." - x-required-boolean: true - EquipmentMeasurements: - properties: - timestamp: - type: "string" - format: "date-time" - description: "Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order." - measurements: - type: "array" - format: "date-time" - items: - $ref: "#/components/schemas/Measurement" - EquipmentMeasurementsNew: - properties: - timestamp: - type: "string" - format: "date-time" - description: "Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order." - measurements: - type: "array" - format: "date-time" - items: - $ref: "#/components/schemas/MeasurementNew" - ContentType: - properties: {} - Accept: - properties: {} - Equipment: - title: "Equipment" - type: "object" - properties: - id: - type: "integer" - description: "Equipment Id of a configured equipment" - example: 7269 - format: "int64" - make: - type: "string" - description: "Make of a configured equipment, maxLength = 20" - example: "JOHN DEERE" - name: - type: "string" - description: "Name of a configured equipment (sometimes called model). maxLength" - example: 6120 - Measurement: + MeasurementNew: title: "Measurement" type: "object" properties: Speed: allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "string" properties: name: @@ -367,7 +348,7 @@ components: description: "The unit of measure we should interpret the value as. kph is currently the only supported unit for speed." Heading: allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "object" properties: name: @@ -383,7 +364,7 @@ components: description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for heading." FuelLevel: allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "object" properties: name: @@ -401,7 +382,7 @@ components: title: "Latitude" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "object" properties: name: @@ -419,7 +400,7 @@ components: title: "Longitude" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "object" properties: name: @@ -450,7 +431,7 @@ components: title: "Odometer" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "object" properties: name: @@ -468,7 +449,7 @@ components: title: "EngineHours" type: "object" allOf: - - $ref: "#/components/schemas/MeasurementValue" + - $ref: "#/components/schemas/MeasurementValueNew" - type: "object" properties: name: @@ -482,6 +463,33 @@ components: enum: - "hours" description: "The unit of measure we should interpret the value as. hours is currently the only supported unit for engineHours" + EngineSpeed: + allOf: + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" + properties: + name: + type: "string" + enum: + - "engineSpeed" + description: "Name identifying which measurement this value corresponds to. engineSpeed only possible value for providing engineSpeed." + x-required-boolean: true + unit: + type: "string" + enum: + - "RPM" + description: "The unit of measure we should interpret the value as. RPM is the only supported unit for engineSpeed" + PTOStatus: + allOf: + - $ref: "#/components/schemas/PTOStatusValue" + - type: "object" + properties: + name: + type: "string" + enum: + - "ptoStatus" + description: "Name identifying which measurement this value corresponds to. ptoStatus only possible value for providing ptoStatus." + x-required-boolean: true MeasurementValue: type: "string" properties: @@ -500,7 +508,7 @@ components: description: "Value of the actual measurement. The value will be used as is so it must be converted to the correct units." example: "19.5" x-required-boolean: true - EngineStateValue: + PTOStatusValue: type: "object" properties: value: @@ -508,16 +516,8 @@ components: enum: - "On" - "Off" - description: "State of the engine. engineState only possible values are: On or Off." + - "Fault" + - "Unavailable" + description: "Status of PTO (Power Take-Off). ptoStatus possible values are: On, Off, Fault, or Unavailable." example: "On" x-required-boolean: true - responses: - CreateEquip: - description: "No Content" - content: - application/json: - schema: - type: "object" - examples: - Headers: - description: "204 No Content" diff --git a/specs/fixed/equipment.yaml b/specs/fixed/equipment.yaml index f08825c..7831dfa 100644 --- a/specs/fixed/equipment.yaml +++ b/specs/fixed/equipment.yaml @@ -39,47 +39,6 @@ paths: $ref: "#/components/schemas/Errors" "403": description: "Authorization Error - user/applications does not have access to api or resource or - user does not have required permissions/BusinessActivities for the org." - /organizations/{organizationId}/equipment: - post: - tags: - - "Equipment" - description: "This resource allows the client to create a piece of equipment within a user’s organization. Getting Started The process of contributing equipment to John Deere can be broken down into three primary steps. Determine the Equipment’s model IDs Create the Equipment Contribute Measurements. Please see the for more information on uploading measurements for the created equipment. Determining the Equipment’s model Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated equipment ISG types for that specific equipment make and obtain a respective “id” for a specific ISG type you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will include all models with search string results and include make and isgType “id” as well as model “id”. Creating the Equipment Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org. In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment model IDs. type: Machine or Implement serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization. name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization. model: The id for the Model of the vehicle, found from the API in the previous step of this document. A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345). If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information." - summary: "Create equipment" - operationId: "createEquipment" - parameters: - - $ref: "#/components/parameters/organizationId" - security: - - OAuth2: - - "eq2" - requestBody: - description: "Asset to be created." - content: - application/json: - schema: - $ref: "#/components/schemas/createEquipment" - examples: - No Header: - value: - "@type": "Machine" - name: "Equipment Name" - serialNumber: "must_be_unique_string" - model: - "@type": "EquipmentModel" - id: 66280 - responses: - "201": - description: "Created" - $ref: "#/components/responses/CreateEquip" - "202": - description: "Accepted" - "400": - description: "Bad Request" - content: - application/json: - schema: - $ref: "#/components/schemas/Errors" - "403": - description: "User is not authorized for this request." /equipment/{id}: get: tags: @@ -152,75 +111,18 @@ paths: $ref: "#/components/schemas/Errors" "403": description: "User is not authorized for this request." - /equipmentMakes: - get: - tags: - - "Equipment Makes" - description: "This resource allows the client to view equipment makes and their associated IDs and names." - summary: "Get equipment makes" - parameters: - - $ref: "#/components/parameters/Deprecated" - security: - - OAuth2: - - "eq1" - operationId: "getEquipmentMakes" - responses: - "200": - description: "OK" - $ref: "#/components/responses/GetEquipmentMake" - "403": - description: "User is not authorized" - /equipmentMakes/{equipmentMakeId}: - get: - tags: - - "Equipment Makes" - description: "This resource allows the client to view equipment makes by an equipment make ID." - summary: "View equipment by make Id" - operationId: "getEquipmentMakesById" - parameters: - - $ref: "#/components/parameters/EquipmentMakeId" - security: - - OAuth2: - - "eq1" - responses: - "200": - description: "OK" - content: - application/json: - schema: - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/link" - values: - type: "array" - items: - $ref: "#/components/schemas/equipment-make" - examples: - No Header: - value: - "@type": "EquipmentMake" - name: "JOHN DEERE" - certified: false - deereOrSubsidiary: true - id: 1 - ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" - "403": - description: "User is not authorized" - "404": - description: "Resource Not foundapi-makes" - /equipmentMakes/{equipmentMakeId}/equipmentTypes: + /equipmentISGTypes: get: tags: - - "Equipment Types" - deprecated: true - description: "This resource allows the client to view equipment types by providing an equipment make ID." - summary: "Get equipment types by make id" - operationId: "getEquipmentTypesByMakeId" + - "Equipment ISG Type Resource" + description: "This operation retrieves a list of Equipment ISG Types based on the supplied query parameters." + operationId: "getEquipmentISGTypes" + summary: "Get equipment ISG types" parameters: - - $ref: "#/components/parameters/EquipmentMakeId" - - $ref: "#/components/parameters/Deprecated" + - $ref: "#/components/parameters/originator" + - $ref: "#/components/parameters/category" + - $ref: "#/components/parameters/deprecated" + - $ref: "#/components/parameters/embed" security: - OAuth2: - "eq1" @@ -238,98 +140,47 @@ paths: values: type: "array" items: - $ref: "#/components/schemas/equipment-type" + $ref: "#/components/schemas/equipment-isg-type" examples: No Header: value: links: [] values: - - "@type": "EquipmentType" + - "@type": "EquipmentISGType" name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" + ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" + category: "Machine" + isgmarketSegment: "Construction" allowsCustomModel: true id: "121" - icon: - "@type": "EquipmentIcon" - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - /equipmentTypes: + deprecated: false + /equipmentMakes: get: tags: - - "Equipment Types" - deprecated: true - description: "This resource allows the client to view equipment types and their associated IDs and names." - summary: "Get equipment types" - operationId: "getEquipmentTypes" + - "Equipment Makes" + description: "This resource allows the client to view equipment makes and their associated IDs and names." + summary: "Get equipment makes" parameters: - $ref: "#/components/parameters/Deprecated" security: - OAuth2: - "eq1" + operationId: "getEquipmentMakes" responses: "200": description: "OK" - content: - application/json: - schema: - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/link" - values: - type: "array" - items: - $ref: "#/components/schemas/equipment-type" - examples: - No Header: - value: - links: [] - values: - - "@type": "EquipmentType" - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - "@type": "EquipmentIcon" - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - /equipmentModels: - get: - parameters: - - $ref: "#/components/parameters/Deprecated" - - $ref: "#/components/parameters/EmbedV1" - - $ref: "#/components/parameters/EquipmentModelName" - tags: - - "Equipment Models" - description: "This resource allows the client to view equipment models in our reference database and their associated IDs and names." - summary: "Get equipment models" - operationId: "getEquipmentModels" - responses: - "200": - description: "OK" - $ref: "#/components/responses/GetEquipmentModelName" - /equipmentISGTypes: + $ref: "#/components/responses/GetEquipmentMake" + "403": + description: "User is not authorized" + /equipmentMakes/{equipmentMakeId}: get: tags: - - "Equipment ISG Type Resource" - description: "This operation retrieves a list of Equipment ISG Types based on the supplied query parameters." - operationId: "getEquipmentISGTypes" - summary: "Get equipment ISG types" + - "Equipment Makes" + description: "This resource allows the client to view equipment makes by an equipment make ID." + summary: "View equipment by make Id" + operationId: "getEquipmentMakesById" parameters: - - $ref: "#/components/parameters/originator" - - $ref: "#/components/parameters/category" - - $ref: "#/components/parameters/deprecated" - - $ref: "#/components/parameters/embed" + - $ref: "#/components/parameters/EquipmentMakeId" security: - OAuth2: - "eq1" @@ -347,20 +198,20 @@ paths: values: type: "array" items: - $ref: "#/components/schemas/equipment-isg-type" + $ref: "#/components/schemas/equipment-make" examples: No Header: value: - links: [] - values: - - "@type": "EquipmentISGType" - name: "Scraper" - ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" - category: "Machine" - isgmarketSegment: "Construction" - allowsCustomModel: true - id: "121" - deprecated: false + "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" + "403": + description: "User is not authorized" + "404": + description: "Resource Not foundapi-makes" /equipmentMakes/{equipmentMakeId}/equipmentISGTypes: get: tags: @@ -520,1528 +371,431 @@ paths: id: "121" "403": description: "User is not two-legged authorized" -components: - schemas: - Error: - type: "object" - properties: - message: - type: "string" - description: "An english description of the error" - example: "was invalid because" - code: - type: "string" - description: "A string constant representing the type of error" - example: 400 - field: - type: "string" - description: "The name of the property or parameter deemed invalid" - example: "Machine.serialNumber" - gud: - type: "string" - format: "uuid" - description: "A reference to this encounter of the error, for traceability and troubleshooting" - example: "9b331708-10e8-4e15-8097-a9aed7455d6d" - invalidValue: - type: "string" - description: "The value that was supplied for this field in the request" - example: null - readOnly: true - Errors: - type: "array" - items: - $ref: "#/components/schemas/Error" - readOnly: true - link: - type: "object" - title: "Link" - properties: - rel: - type: "string" - example: "nextPage" - uri: + /equipmentMakes/{equipmentMakeId}/equipmentTypes: + get: + tags: + - "Equipment Types" + deprecated: true + description: "This resource allows the client to view equipment types by providing an equipment make ID." + summary: "Get equipment types by make id" + operationId: "getEquipmentTypesByMakeId" + parameters: + - $ref: "#/components/parameters/EquipmentMakeId" + - $ref: "#/components/parameters/Deprecated" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "OK" + content: + application/json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/link" + values: + type: "array" + items: + $ref: "#/components/schemas/equipment-type" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + /equipmentModels: + get: + parameters: + - $ref: "#/components/parameters/Deprecated" + - $ref: "#/components/parameters/EmbedV1" + - $ref: "#/components/parameters/EquipmentModelName" + tags: + - "Equipment Models" + description: "This resource allows the client to view equipment models in our reference database and their associated IDs and names." + summary: "Get equipment models" + operationId: "getEquipmentModels" + responses: + "200": + description: "OK" + $ref: "#/components/responses/GetEquipmentModelName" + /equipmentTypes: + get: + tags: + - "Equipment Types" + deprecated: true + description: "This resource allows the client to view equipment types and their associated IDs and names." + summary: "Get equipment types" + operationId: "getEquipmentTypes" + parameters: + - $ref: "#/components/parameters/Deprecated" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "OK" + content: + application/json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/link" + values: + type: "array" + items: + $ref: "#/components/schemas/equipment-type" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + /organizations/{organizationId}/equipment: + post: + tags: + - "Equipment" + description: "This resource allows the client to create a piece of equipment within a user’s organization. Getting Started The process of contributing equipment to John Deere can be broken down into three primary steps. Determine the Equipment’s model IDs Create the Equipment Contribute Measurements. Please see the for more information on uploading measurements for the created equipment. Determining the Equipment’s model Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated equipment ISG types for that specific equipment make and obtain a respective “id” for a specific ISG type you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will include all models with search string results and include make and isgType “id” as well as model “id”. Creating the Equipment Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org. In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment model IDs. type: Machine or Implement serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization. name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization. model: The id for the Model of the vehicle, found from the API in the previous step of this document. A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345). If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information." + summary: "Create equipment" + operationId: "createEquipment" + parameters: + - $ref: "#/components/parameters/organizationId" + security: + - OAuth2: + - "eq2" + requestBody: + description: "Asset to be created." + content: + application/json: + schema: + $ref: "#/components/schemas/createEquipment" + examples: + No Header: + value: + "@type": "Machine" + name: "Equipment Name" + serialNumber: "must_be_unique_string" + model: + "@type": "EquipmentModel" + id: 66280 + responses: + "201": + description: "Created" + $ref: "#/components/responses/CreateEquip" + "202": + description: "Accepted" + "400": + description: "Bad Request" + content: + application/json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "User is not authorized for this request." +components: + parameters: + Archived: + name: "archived" + in: "query" + x-required-boolean: false + schema: + type: "boolean" + description: "true or false" + CapableOf: + name: "capableOf" + in: "query" + x-required-boolean: false + schema: + type: "string" + enum: + - "Connectivity" + - "!Connectivity" + Categories: + name: "categories" + in: "query" + x-required-boolean: false + schema: + type: "array" + items: type: "string" - description: "This will be the relative URL. Users will prefix the base url as per their requirements." - example: "/equipment?pageOffset=10&itemSize=10" - equipment-isg-type: - type: "object" - title: "EquipmentIsgType" - description: "Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata." + enum: + - "Machine" + - "Implement" + example: + - "Machine" + - "Implement | Machine | Implement" + Deprecated: + name: "deprecated" + in: "path" + x-required-boolean: true + description: "Deprecated value should be false" + schema: + type: "boolean" + example: false + Embed: + name: "embed" + in: "query" + x-required-boolean: false + description: "embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds" + schema: + type: "string" + enum: + - "devices" + - "equipment" + - "pairingDetails" + - "icon" + - "offsets" + - "capabilities" + EmbedForList: + name: "embed" + in: "query" + x-required-boolean: false + description: "embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds" + schema: + type: "string" + enum: + - "devices" + - "equipment" + - "icon" + - "pairingDetails" + EmbedV1: + name: "embed" + in: "query" + x-required-boolean: false + description: "Embed additional attributes if required." + schema: + type: "string" + enum: + - "make" + - "type" + - "isgType" example: - name: "Tractor" - ERID: "82115264-9385-460c-bfbe-177a59445fd9" - category: "Machine" - allowsCustomModel: true - isgMarketSegment: "Agriculture" - deprecated: false - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - name: - type: "string" - description: "The name of the ISG equipment type." - example: "Tractor" - ERID: - type: "string" - description: "Unique identifier for the ISG equipment type." - example: "82115264-9385-460c-bfbe-177a59445fd9" - category: - type: "string" - description: "The category of the ISG equipment type." - enum: - - "Machine" - - "Implement" - - "Unknown" - example: "Machine" - allowsCustomModel: - type: "boolean" - description: "Indicates if the equipment ISG type allows custom models." - example: true - isgMarketSegment: - type: "string" - description: "The ISG market segment of the equipment ISG type." - enum: - - "Unknown" - - "Agriculture" - - "Construction" - - "Engines & Components" - - "Forestry" - - "Turf" - example: "Agriculture" - deprecated: - type: "boolean" - description: "Indicates if the ISG equipment type is deprecated." - example: false - RecordMetadata: - type: "object" - description: "Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)" - properties: - "@type": - type: "string" - default: "RecordMetadata" - example: "RecordMetadata" - createdByUser: - type: "string" - description: "User involved in creating the entity. Only viewable with the RECORD_METADATA license" - example: "XYZ_USER" - lastModifiedByUser: + - "make" + - "type" + EquipmentISGTypeId: + name: "equipmentISGTypeId" + in: "path" + x-required-boolean: true + description: "ID for Equipment ISG Type" + schema: + type: "integer" + format: "int32" + example: 1111 + EquipmentMakeId: + name: "equipmentMakeId" + in: "path" + x-required-boolean: true + description: "ID for Equipment Make" + schema: + type: "integer" + format: "int32" + example: 1111 + EquipmentMakeName: + name: "equipmentTypeId" + in: "query" + x-required-boolean: false + description: "Name for Equipment Make" + schema: + type: "string" + example: "JOHN DEERE" + EquipmentModelId: + name: "equipmentModelId" + in: "path" + x-required-boolean: true + description: "ID for Equipment Model" + schema: + type: "integer" + format: "int32" + example: 3333 + EquipmentModelName: + name: "equipmentModelName" + in: "query" + x-required-boolean: false + description: "It should be equipment model name" + schema: + type: "string" + enum: + - "string or partial string with * wildcard search" + example: + - "9RX420" + - "9RX*" + EquipmentSerialNumbers: + name: "serialNumbers" + in: "query" + x-required-boolean: false + description: "List of serial numbers of the equipment" + schema: + type: "array" + items: type: "string" - description: "User involved in modifying the entity. Only viewable with the RECORD_METADATA license" - example: "XYZ_USER" - userCreationTimestamp: + example: + - "A01775E760247" + - "1DW410ETHFF669067" + EquipmentTypeId: + name: "equipmentTypeId" + in: "path" + x-required-boolean: true + description: "ID for Equipment Type" + schema: + type: "integer" + format: "int32" + example: 2222 + EquipmentTypeName: + name: "equipmentTypeName" + in: "query" + x-required-boolean: false + description: "Name for Equipment Type" + schema: + type: "string" + example: "8285R" + ItemLimit: + name: "itemLimit" + in: "query" + x-required-boolean: false + description: "Refers to number of items per page(default 100 max 5000)" + schema: + type: "integer" + format: "int32" + default: 100 + maximum: 5000 + example: 200 + OrganizationEquipmentIds: + name: "ids" + in: "query" + x-required-boolean: false + description: "List of OrganizationEquipment Ids (these ids are unique across all orgs)" + schema: + type: "array" + items: + type: "integer" + example: + - 1 + - 2 + - 3 + OrganizationIds: + name: "organizationIds" + in: "query" + x-required-boolean: false + description: "List of OrganizationIds" + schema: + type: "array" + items: + type: "integer" + example: + - 1 + - 2 + - 3 + PageOffset: + name: "pageOffset" + in: "query" + x-required-boolean: false + description: "Refers to starting record value" + schema: + type: "integer" + format: "int32" + default: 0 + example: 200 + PrincipalIds: + name: "principalIds" + in: "query" + x-required-boolean: false + description: "List of PrincipalIds" + schema: + type: "array" + items: + type: "integer" + example: + - 1 + - 2 + - 3 + Role: + name: "organizationRole.type" + in: "query" + x-required-boolean: false + schema: + type: "string" + enum: + - "Controlling" + - "NonControlling" + SerialNumber: + name: "serialNumber" + in: "path" + x-required-boolean: true + schema: + type: "string" + example: "VIN1234" + category: + name: "category" + in: "query" + x-required-boolean: false + description: "List of type categories for the Equipment Model" + schema: + type: "array" + items: type: "string" - description: "Timestamp of entity creation" - readOnly: true - example: "2018-04-30T10:23:50.000Z" - userLastModifiedTimestamp: - type: "string" - description: "Timestamp of entity modification" - readOnly: true - example: "2018-05-01T08:11:23.000Z" - createdBySourceNode: - type: "string" - format: "uuid" - description: "This is the specific instance of an application that created the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license." - readOnly: true - example: "0235d40e-02d0-44cb-a126-fff21173fc1f" - lastModifiedSourceNode: - type: "string" - format: "uuid" - description: "This is the specific instance of an application that modified the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license" - readOnly: true - example: "0235d40e-02d0-44cb-a126-fff21173fc1f" - createdBySourceSystemUri: - type: "string" - description: "Derived off of a client key (application that created) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." - readOnly: true - example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" - lastModifiedBySourceSystemUri: - type: "string" - description: "Derived off of a client key (application that did last modification) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." - readOnly: true - example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" - resourcewithoutLinks: - type: "object" - title: "Resource" - properties: - id: - type: "string" - description: "Unique id" - example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" - "@type": - type: "string" - x-required-boolean: true - description: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" - example: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" - resource: - type: "object" - title: "Resource" - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/link" - id: - type: "string" - description: "Unique id" - example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" - "@type": - type: "string" - description: "Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" - example: "Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" - x-required-boolean: true - resource-embed: - type: "object" - title: "Resource" - properties: - id: - type: "string" - description: "Unique id" - example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" - "@type": - type: "string" - x-required-boolean: true - description: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" - example: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" - organization-embed: - type: "object" - title: "Resource" - properties: - id: - type: "string" - description: "Unique id" - example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" - "@type": - type: "string" - x-required-boolean: true - description: "Resource" - example: "Resource" - equipment-make-embed: - type: "object" - title: "EquipmentMake" - description: "Represents the make of the equipment, including its name, unique identifier, and metadata." - properties: - "@type": - type: "string" - description: "EquipmentMake" - example: "EquipmentMake" - id: - type: "string" - description: "Unique identifier for the equipment make." - example: "1" - name: - type: "string" - description: "The name of the equipment make." - example: "JOHN DEERE" - ERID: - type: "string" - description: "Unique identifier for the equipment make." - example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - certified: - type: "boolean" - description: "Indicates if the equipment make is certified." - example: true - deereOrSubsidiary: - type: "boolean" - description: "Indicates if the equipment make is deereOrSubsidiary." - example: true - equipment-make: - type: "object" - title: "EquipmentMake" - description: "Represents the make of the equipment, including its name, unique identifier, and metadata." - example: - id: 1 - name: "JOHN DEERE" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - certified: true - deereOrSubsidiary: true - deprecated: false - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - name: - type: "string" - description: "The name of the equipment make." - example: "JOHN DEERE" - ERID: - type: "string" - description: "Unique identifier for the equipment make." - example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - certified: - type: "boolean" - description: "Indicates if the equipment make is certified." - example: true - deereOrSubsidiary: - type: "boolean" - description: "Indicates if the equipment make is deereOrSubsidiary." - example: true - deprecated: - type: "boolean" - description: "Indicates if the equipment make is deprecated." - example: false - equipment-type: - type: "object" - title: "EquipmentType" - deprecated: true - description: "Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata." - example: - id: 217 - name: "Two-wheel Drive Tractors - 140 Hp And Above" - ERID: "82115264-9385-460c-bfbe-177a59445fd9" - category: "Machine" - certified: true - marketSegment: "Agriculture" - icon: - url: "https://example.com/icon.png" - description: "Icon representing the equipment type" - deprecated: false - allowsCustomModel: true - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - name: - type: "string" - description: "The name of the equipment type." - example: "Two-wheel Drive Tractors - 140 Hp And Above" - ERID: - type: "string" - description: "Unique identifier for the equipment type." - example: "82115264-9385-460c-bfbe-177a59445fd9" - category: - type: "string" - description: "The category of the equipment type." - enum: - - "Machine" - - "Implement" - - "Unknown" - example: "Machine" - certified: - type: "boolean" - description: "Indicates if the equipment type is certified." - example: true - allowsCustomModel: - type: "boolean" - description: "Indicates if the equipment type allows custom models." - example: true - marketSegment: - type: "string" - description: "The market segment of the equipment type." - enum: - - "Unknown" - - "Agriculture" - - "Commercial Worksite Products" - - "Construction" - - "Engines & Components" - - "Forestry" - - "Mining" - - "Turf" - example: "Agriculture" - icon: - $ref: "#/components/schemas/equipment-icon" - deprecated: - type: "boolean" - description: "Indicates if the equipment type is deprecated." - example: false - equipment-type-embed: - type: "object" - title: "EquipmentType" - description: "Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata." - properties: - "@type": - type: "string" - description: "EquipmentType" - example: "EquipmentType" - id: - type: "string" - description: "Unique identifier for the equipment type." - example: "222" - name: - type: "string" - description: "The name of the equipment type." - example: "Combine" - ERID: - type: "string" - description: "Unique identifier for the equipment type." - example: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" - icon-style: - type: "object" - title: "IconStyle" - description: "icon style" - properties: - primaryColor: - type: "string" - description: "primary color of the icon style" - secondaryColor: - type: "string" - description: "secondary color of the icon style" - equipment-icon: - type: "object" - title: "EquipmentIcon" - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - name: - type: "string" - description: "The name of the equipment icon." - example: "JOHN DEERE" - iconStyle: - $ref: "#/components/schemas/icon-style" - equipment-model-details: - type: "object" - title: "EquipmentModel" - allOf: - - type: "object" - properties: - name: - type: "string" - example: "8360R" - ERID: - type: "string" - example: "158df9ff-334a-4e0d-86cc-3adca17a9686" - category: - type: "string" - enum: - - "Machine" - - "Implement" - - "Unknown" - make: - $ref: "#/components/schemas/equipment-make-embed" - type: - $ref: "#/components/schemas/equipment-type-embed" - icon: - $ref: "#/components/schemas/equipment-icon" - equipment-isg-type-embed: - type: "object" - title: "EquipmentISGType" - description: "Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata." - properties: - "@type": - type: "string" - description: "EquipmentISGType" - example: "EquipmentISGType" - id: - type: "string" - description: "Unique identifier for the ISG equipment type." - example: "2" - name: - type: "string" - description: "The name of the ISG equipment type." - example: "Combine" - ERID: - type: "string" - description: "Unique identifier for the ISG equipment type." - example: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" - equipment-model: - type: "object" - title: "EquipmentModel" - description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." - example: - name: "8360R" - ERID: "158df9ff-334a-4e0d-86cc-3adca17a9686" - category: "Machine" - deprecated: false - certified: false - make: - name: "JOHN DEERE" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - deprecated: false - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - type: - name: "Two-wheel Drive Tractors - 140 Hp And Above" - ERID: "82115264-9385-460c-bfbe-177a59445fd9" - category: "Machine" - certified: true - marketSegment: "Agriculture" - icon: - url: "https://example.com/icon.png" - description: "Icon representing the equipment type" - deprecated: false - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - isgType: - name: "Tractor" - ERID: "82115264-9385-460c-bfbe-177a59445fd9" - category: "Machine" - deprecated: false - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - icon: - url: "https://example.com/icon.png" - description: "Icon representing the equipment model" - recordMetaData: - createdBy: "user123" - createdAt: "2023-10-01T12:00:00Z" - updatedBy: "user456" - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - name: - type: "string" - description: "The name of the equipment model." - example: "8360R" - ERID: - type: "string" - description: "Unique identifier for the equipment model." - example: "158df9ff-334a-4e0d-86cc-3adca17a9686" - category: - type: "string" - description: "The category of the equipment model." - enum: - - "Machine" - - "Implement" - - "Unknown" - example: "Machine" - deprecated: - type: "boolean" - description: "Indicates if the equipment model is deprecated." - example: false - certified: - type: "boolean" - description: "Indicates if the equipment model is certified." - example: false - make: - $ref: "#/components/schemas/equipment-make" - type: - $ref: "#/components/schemas/equipment-type" - isgType: - $ref: "#/components/schemas/equipment-isg-type" - equipment-model-embed: - type: "object" - title: "EquipmentModel" - description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." - properties: - "@type": - type: "string" - description: "EquipmentModel" - example: "EquipmentModel" - id: - type: "string" - description: "Unique identifier for the equipment model." - example: "65985" - name: - type: "string" - description: "The name of the equipment model." - example: "S680" - ERID: - type: "string" - description: "Unique identifier for the equipment model." - example: "f2e7d596-35c6-11e7-af34-123e49453e98" - certified: - type: "boolean" - description: "Indicates if the equipment model is certified." - example: true - equipment-model-no-embed: - type: "object" - title: "EquipmentModel" - description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." - example: - name: "8360R" - ERID: "158df9ff-334a-4e0d-86cc-3adca17a9686" - category: "Machine" - certified: false - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - name: - type: "string" - description: "The name of the equipment model." - example: "8360R" - ERID: - type: "string" - description: "Unique identifier for the equipment model." - example: "158df9ff-334a-4e0d-86cc-3adca17a9686" - category: - type: "string" - description: "The category of the equipment model." - enum: - - "Machine" - - "Implement" - - "Unknown" - example: "Machine" - certified: - type: "boolean" - description: "Indicates if the equipment model is certified." - example: false - identifier: - type: "object" - title: "Identifier of Equipment" - description: "Identifier of the Equipment like DE-13, DE-17, ERID..." - allOf: - - type: "object" - properties: - type: - x-required-boolean: true - type: "string" - description: "Type of identifier." - enum: - - "serialNumber" - - "ERID" - value: - x-required-boolean: true - type: "string" - description: "Value of identifier." - example: "RW8360R055358" - organization-role: - type: "object" - title: "OrganizationRole" - description: "Represents the role of an organization, including its type, effective timestamp, and event." - example: - type: "Controlling" - effectiveTS: "2023-10-01T12:00:00Z" - event: "CREATION" - properties: - type: - type: "string" - description: "The type of the organization role." - enum: - - "Controlling" - - "NonControlling" - example: "Controlling" - effectiveTS: - type: "string" - format: "date-time" - description: "The timestamp when the role becomes effective." - example: "2023-10-01T12:00:00Z" - event: - type: "string" - description: "The event associated with the organization role." - enum: - - "CREATION" - - "TRANSFER" - - "SUBSCRIPTION" - - "PAIRING" - - "ORDER" - - "COMMANDED" - - "DECOMMISSION" - example: "CREATION" - inPossession: - type: "boolean" - example: true - abstractMeasurement: - type: "object" - title: "AbstractMeasurement" - properties: - type: - type: "string" - unit: - type: "string" - measurementAsDouble: - type: "object" - title: "MeasurementAsDouble" - description: "measurement as double" - allOf: - - $ref: "#/components/schemas/abstractMeasurement" - - type: "object" - properties: - type: - type: "string" - description: "type of measurement" - unit: - type: "string" - description: "unit of measurement" - valueAsDouble: - type: "number" - format: "double" - description: "measurement value as double" - variableRepresentationValue: - type: "object" - title: "VariableRepresentationValue" - properties: - variable: - $ref: "#/components/schemas/measurementAsDouble" - measurementAsString: - type: "object" - title: "MeasurementAsString" - description: "measurement as string" - allOf: - - $ref: "#/components/schemas/abstractMeasurement" - - type: "object" - properties: - type: - type: "string" - description: "type of measurement" - unit: - type: "string" - description: "unit of measurement" - valueAsString: - type: "string" - description: "measurement value as string" - definedTypeRepresentationValue: - type: "object" - title: "DefinedTypeRepresentationValue" - properties: - value: - $ref: "#/components/schemas/measurementAsString" - offsets: - type: "object" - title: "Offsets" - description: "Represents the offsets of a device, including its variable and defined type representation values." - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Offsets" - description: "Offsets" - example: "Offsets" - variableRepresentationValues: - type: "array" - items: - $ref: "#/components/schemas/variableRepresentationValue" - definedTypeRepresentationValues: - type: "array" - items: - $ref: "#/components/schemas/definedTypeRepresentationValue" - device-make: - type: "object" - title: "DeviceMake" - description: "Represents the make of a device, including its name and unique identifier (ERID)." - example: - name: "JOHN DEERE" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "DeviceMake" - description: "DeviceMake" - example: "DeviceMake" - name: - type: "string" - description: "The name of the device make." - example: "JOHN DEERE" - ERID: - type: "string" - description: "Unique identifier of the device make." - example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - device-type: - type: "object" - title: "DeviceType" - description: "Represents the type of a device, including its name, common name, and unique identifier (ERID)." - example: - name: "Modem" - commonName: "TelematicsGateway" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "DeviceType" - description: "DeviceType" - example: "DeviceType" - name: - type: "string" - description: "The name of the device type." - example: "Modem" - commonName: - type: "string" - description: "The common name of the device type." - example: "TelematicsGateway" - ERID: - type: "string" - description: "Unique identifier of the device type." - example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - device-model: - type: "object" - title: "DeviceModel" - description: "Represents the model of a device, including its name, unique identifier (ERID), make, and type." - example: - name: "JDLink Modem-4G" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - make: - name: "JOHN DEERE" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - type: - name: "Modem" - commonName: "TelematicsGateway" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "DeviceModel" - description: "DeviceModel" - example: "DeviceModel" - name: - type: "string" - description: "The name of the device model." - example: "JDLink Modem-4G" - ERID: - type: "string" - description: "Unique identifier of the device model." - example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - make: - $ref: "#/components/schemas/device-make" - type: - $ref: "#/components/schemas/device-type" - version: - type: "object" - title: "Version" - description: "Represents the version of a device or software, including its name." - example: - name: "3.16.1171" - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Version" - description: "Version" - example: "Version" - name: - type: "string" - description: "The name of the version." - example: "3.16.1171" - inability-detail: - type: "object" - title: "InabilityDetail" - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - code: - type: "string" - example: "RC14.8.1" - type: - type: "string" - example: "REGISTRATION" - description: - type: "string" - example: "SIM registration is required" - capability: - type: "object" - title: "Capability" - description: "List of capabilities of the equipment." - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Capability" - description: "Capability" - example: "Capability" - capable: - type: "boolean" - type: - type: "string" - enum: - - "JDLINK_CONNECTIVITY" - - "RDA" - - "WDT" - - "WIFI_CONNECTIVITY" - - "CUSTOMER_SIM_CONNECTIVITY" - - "LEGACY_CONNECTIVITY" - - "PLANNED_WORK" - - "DATA_SYNC_SETUP" - - "CH_REMOTE_ADJUST" - - "BASE_STATION" - - "MY_MACHINE" - - "RDC" - - "REMOTE_START" - inabilityDetails: - type: "array" - items: - $ref: "#/components/schemas/inability-detail" - equipmentForList: - type: "object" - title: "Equipment" - description: "Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes." - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Equipment" - - "Machine" - - "Implement" - description: "Equipment | Machine | Implement" - example: "Equipment" - name: - type: "string" - description: "Equipment Name." - example: "Cates 8360R 055358" - isoName: - type: "string" - description: "Unique 64-bit ISO NAME used to identify the controller during address claim." - example: "b00082000422ed1d" - serialNumber: - type: "string" - description: "Serial Number of the Equipment and passed on the query parameter" - example: "1RW8360RLCD055358" - engineSerialNumber: - type: "string" - description: "VIN or PIN, more than Serial Number, of the Engine." - example: "RG6090L839275" - isSerialNumberCertified: - type: "boolean" - description: "True if this is an official equipment (we have PI information about it)." - example: true - modelYear: - type: "string" - description: "Year of model." - example: 2019 - make: - $ref: "#/components/schemas/equipment-make-embed" - type: - $ref: "#/components/schemas/equipment-type-embed" - isgType: - $ref: "#/components/schemas/equipment-isg-type-embed" - model: - $ref: "#/components/schemas/equipment-model-embed" - organization: - $ref: "#/components/schemas/organization-embed" - telematicsCapable: - type: "boolean" - description: "Indicates if the equipment is capable of telematics." - example: true - archived: - type: "boolean" - description: "Indicates if the equipment is archived." - example: true - principalId: - type: "string" - description: "Unique id for principal equipment" - example: 12345 - organizationRole: - $ref: "#/components/schemas/organization-role" - ERID: - type: "string" - description: "Unique identifier of the Equipment." - example: "fcdc83cb-8840-4215-84b5-1769889db932" - alternateIdentifiers: - type: "array" - description: "List of alternate identifiers of the Equipment like DE-13, DE-17, ERID..." - items: - $ref: "#/components/schemas/identifier" - icon: - $ref: "#/components/schemas/equipment-icon" - devices: - type: "array" - description: "List of devices paired with the equipment." - items: - $ref: "#/components/schemas/device" - pairingDetails: - $ref: "#/components/schemas/pairing-details" - archivedTimestamp: - type: "string" - format: "date-time" - description: "Timestamp when the equipment was archived." - example: "2021-03-10T19:19:46.420Z" - mergedEquipment: - type: "array" - description: "List of equipment that was merged." - items: - $ref: "#/components/schemas/machine" - isCsc: - type: "boolean" - description: "Indicates if the equipment is CSC equipment or not." - example: true - equipment: - type: "object" - title: "Equipment" - description: "Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes." - allOf: - - $ref: "#/components/schemas/resource" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Equipment" - - "Machine" - - "Implement" - description: "Equipment | Machine | Implement" - example: "Equipment" - name: - type: "string" - description: "Equipment Name." - example: "Cates 8360R 055358" - isoName: - type: "string" - description: "Unique 64-bit ISO NAME used to identify the controller during address claim." - example: "b00082000422ed1d" - serialNumber: - type: "string" - description: "Serial Number of the Equipment and passed on the query parameter" - example: "1RW8360RLCD055358" - engineSerialNumber: - type: "string" - description: "VIN or PIN, more than Serial Number, of the Engine." - example: "RG6090L839275" - isSerialNumberCertified: - type: "boolean" - description: "True if this is an official equipment (we have PI information about it)." - example: true - modelYear: - type: "string" - description: "Year of model." - example: 2019 - make: - $ref: "#/components/schemas/equipment-make-embed" - type: - $ref: "#/components/schemas/equipment-type-embed" - isgType: - $ref: "#/components/schemas/equipment-isg-type-embed" - model: - $ref: "#/components/schemas/equipment-model-embed" - organization: - $ref: "#/components/schemas/organization-embed" - telematicsCapable: - type: "boolean" - description: "Indicates if the equipment is capable of telematics." - example: true - archived: - type: "boolean" - description: "Indicates if the equipment is archived." - example: true - principalId: - type: "string" - description: "Unique id for principal equipment" - example: 12345 - organizationRole: - $ref: "#/components/schemas/organization-role" - ERID: - type: "string" - description: "Unique identifier of the Equipment." - example: "fcdc83cb-8840-4215-84b5-1769889db932" - alternateIdentifiers: - type: "array" - description: "List of alternate identifiers of the Equipment like DE-13, DE-17, ERID..." - items: - $ref: "#/components/schemas/identifier" - icon: - $ref: "#/components/schemas/equipment-icon" - offsets: - $ref: "#/components/schemas/offsets" - devices: - type: "array" - description: "List of devices paired with the equipment." - items: - $ref: "#/components/schemas/device" - capabilities: - type: "array" - description: "List of capabilities of the equipment." - items: - $ref: "#/components/schemas/capability" - pairingDetails: - $ref: "#/components/schemas/pairing-details" - archivedTimestamp: - type: "string" - format: "date-time" - description: "Timestamp when the equipment was archived." - example: "2021-03-10T19:19:46.420Z" - mergedEquipment: - type: "array" - description: "List of equipment that was merged." - items: - $ref: "#/components/schemas/machine" - isCsc: - type: "boolean" - description: "Indicates if the equipment is CSC equipment or not." - example: true - point: - type: "object" - title: "Point" - properties: - lat: - type: "number" - format: "double" - lon: - type: "number" - format: "double" - slope: - type: "number" - format: "double" - pairing-details: - type: "object" - title: "PairingDetails" - description: "Represents the details of the pairing process, including timestamps and location." - example: - paired: true - associationTimestamp: "2023-10-01T12:00:00Z" - disassociationTimestamp: "2023-10-02T12:00:00Z" - confirmationTimestamp: "2023-10-01T12:30:00Z" - location: - latitude: 40.712776 - longitude: -74.005974 - properties: - paired: - type: "boolean" - description: "Indicates if the equipment is paired." - example: true - associationTimestamp: - type: "string" - format: "date-time" - description: "The timestamp when the equipment was paired." - example: "2023-10-01T12:00:00Z" - disassociationTimestamp: - type: "string" - format: "date-time" - description: "The timestamp when the equipment was un-paired." - example: "2023-10-02T12:00:00Z" - confirmationTimestamp: - type: "string" - format: "date-time" - description: "The timestamp when the pairing was confirmed." - example: "2023-10-01T12:30:00Z" - location: - $ref: "#/components/schemas/point" - device: - type: "object" - title: "Device" - description: "Represents a device, including its serial number, certification status, make, type, model, organization, and other attributes." - example: - "@type": "Device" - serialNumber: "PCMA4GF511111" - make: - name: "JOHN DEERE" - id: "1" - ERID: "f8b43e74-3088-4a38-9d66-30aae1ed1111" - type: - name: "Modem" - commonName: "TelematicsGateway" - id: "1" - ERID: "d469a324-2036-11ee-bb58-0e5cd6a91111" - model: - name: "JDLink Modem-4G" - id: "3" - ERID: "f413bba6-9f39-410c-866f-c800bf701111" - firmwareVersion: - name: "40.02.049" - organization: - id: "21111" - organizationRole: - type: "Controlling" - effectiveTS: "2024-04-30T17:53:57Z" - event: "PAIRING" - archived: false - decommissioned: false - stolen: false - principalId: "911111" - equipment: - name: "Cattle 9700 SPFH" - serialNumber: "1Z09700YAKU621111" - isSerialNumberCertified: true - modelYear: "2019" - make: - name: "JOHN DEERE" - certified: true - deereOrSubsidiary: true - id: "1" - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c1111" - type: - name: "Forage Harvester" - id: "162" - ERID: "34b07db5-11fb-11ee-8580-0ed5f7261111" - isgType: - name: "Forage Harvester" - id: "6" - ERID: "99edf0e0-4abb-42d3-9798-327439a31111" - model: - name: 9700 - certified: true - id: "581111" - ERID: "2c8c951e-070a-4e1c-824d-72cca6e71111" - principalId: "661111" - archived: false - organization: - id: "22967" - organizationRole: - type: "Controlling" - effectiveTS: "2024-04-30T17:53:56.695Z" - event: "PAIRING" - isCsc: false - id: "661111" - ERID: "23fe3ea0-1f95-4ae6-8e12-968729cd1111" - capabilities: - - type: "JDLINK_CONNECTIVITY" - capable: true - - type: "WIFI_CONNECTIVITY" - capable: true - pairingDetails: - paired: true - associationTimestamp: "2024-09-28T17:30:24Z" - disassociationTimestamp: null - confirmationTimestamp: "2024-10-23T22:17:22Z" - location: - lat: 52.780639 - lon: -122.453222 - slope: null - messagesRestricted: false - pairingStatus: "PAIRED" - orderNumber: "961111" - highFidelityConfigurationVersion: - name: "1Hz_L3X40FT4JDPS0x00_ISG_X8X9SPFH_63978_2024.008.001" - genericConfigurationVersion: - name: "1623F1EF-62C2-4B8B-B5EA-A0FFD6EA76F8" - communicationModules: - - imei: "014642005101111" - imsi: "310170835961111" - iccid: "89011704278359691111" - type: "GSM" - serviceProvider: "Jasper" - state: "Active" - id: "632111" - id: "915111" - ERID: "fb537c94-14f1-11ef-871b-1287bcef1111" - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Device" - - "Display" - - "PositionReceiver" - - "TelematicsGateway" - description: "Device | Display | PositionReceiver | TelematicsGateway" - example: "Device" - serialNumber: - type: "string" - description: "Serial number of the device and passed on the query parameter" - example: "PCS171B372381" - isSerialNumberCertified: - type: "boolean" - description: "True if this is an official device (we have PI information about it)." - example: true - make: - $ref: "#/components/schemas/device-make" - type: - $ref: "#/components/schemas/device-type" - model: - $ref: "#/components/schemas/device-model" - organization: - $ref: "#/components/schemas/organization-embed" - ERID: - type: "string" - description: "Unique identifier of the Device." - example: "fcdc83cb-8840-4215-84b5-1769889db932" - firmwareVersion: - $ref: "#/components/schemas/version" - capabilities: - type: "array" - items: - $ref: "#/components/schemas/capability" - equipment: - $ref: "#/components/schemas/equipment" - archived: - type: "boolean" - description: "Indicates if the device is archived." - example: true - decommissioned: - type: "boolean" - description: "Indicates if the device is decommissioned." - example: false - stolen: - type: "boolean" - description: "Indicates if the device is stolen." - example: false - principalId: - type: "string" - description: "Unique id for principal device" - example: 12345 - organizationRole: - $ref: "#/components/schemas/organization-role" - orderNumber: - type: "string" - description: "Order number associated with the device." - example: 987654321 - pairingDetails: - $ref: "#/components/schemas/pairing-details" - archivedTimestamp: - type: "string" - format: "date-time" - description: "Timestamp when the device was archived." - example: "2021-03-10T19:19:46.420Z" - display: - type: "object" - title: "Display" - allOf: - - $ref: "#/components/schemas/device" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Display" - description: "Display" - example: "Display" - monitors: - uniqueItems: true - type: "array" - items: - $ref: "#/components/schemas/display-monitors" - display-monitors: - type: "object" - title: "Monitor" - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "Monitor" - description: "Monitor" - example: "Monitor" - type: - type: "string" - example: "Monitor_0" - serialNumber: - type: "string" - example: "PCG410A015392" - resolutionWidth: - type: "integer" - example: 800 - resolutionHeight: - type: "integer" - example: 600 - position-receiver: - type: "object" - title: "PositionReceiver" - allOf: - - $ref: "#/components/schemas/device" - - type: "object" - communication-module: - type: "object" - title: "CommunicationModule" - description: "Represents a communication module, including its serial number, IMEI, IMSI, ICCID, MSISDN, EID, type, service provider, state, and country calling code." - example: - serialNumber: "PCS171B372381" - imei: 123456789012345 - imsi: 310150123456789 - iccid: 89014103211118510000 - msisdn: 15555551234 - eid: 89014103211118510000 - type: "GSM" - serviceProvider: "ATT" - state: "ACTIVE" - countryCallingCode: 1 - allOf: - - $ref: "#/components/schemas/resource-embed" - - type: "object" - properties: - "@type": - type: "string" - enum: - - "CommunicationModule" - description: "CommunicationModule" - example: "CommunicationModule" - serialNumber: - type: "string" - description: "Serial number of the communication gateway" - example: "PCS171B372381" - imei: - type: "string" - description: "International Mobile Equipment Identity of the communication module." - example: 123456789012345 - imsi: - type: "string" - description: "International Mobile Subscriber Identity of the communication module." - example: 310150123456789 - iccid: - type: "string" - description: "Integrated Circuit Card Identifier of the communication module." - example: 89014103211118510000 - msisdn: - type: "string" - description: "Mobile Station International Subscriber Directory Number of the communication module." - example: 15555551234 - eid: - type: "string" - description: "Embedded Identity Document of the communication module." - example: 89014103211118510000 - type: - type: "string" - description: "Type of the communication module." - enum: - - "GSM" - - "SATELLITE" - - "CDMA" - - "COS" - example: "GSM" - serviceProvider: - type: "string" - enum: - - "IRIDIUM" - - "ATT" - - "JASPER" - - "VERIZON" - - "COS" - - "COST" - - "CUBIC" - - "ATTIOT" - example: "ATT" - state: - type: "string" - description: "Subscription state of the communication gateway" - enum: - - "NEW" - - "ACTIVE" - - "INACTIVE" - - "EXPIRED" - - "PENDING_ACTIVE" - - "PENDING_INACTIVE" - - "PENDING_EXPIRED" - - "PENDING_VERIFICATION" - - "PENDING_WDT" - - "TERMINATED" - example: "ACTIVE" - countryCallingCode: - type: "string" - description: "Country calling code of the communication module." - example: 1 - telematics-gateway: - type: "object" - title: "TelematicsGateway" - allOf: - - $ref: "#/components/schemas/device" - - type: "object" - properties: - pairingStatus: - type: "string" - enum: - - "PAIRED" - - "PENDING_PAIRING" - orderNumber: - type: "string" - highFidelityConfigurationVersion: - $ref: "#/components/schemas/version" - genericConfigurationVersion: - $ref: "#/components/schemas/version" - messagesRestricted: - type: "boolean" - communicationModules: - type: "array" - items: - $ref: "#/components/schemas/communication-module" - implement: - type: "object" - title: "Implement" - allOf: - - $ref: "#/components/schemas/equipment" - - type: "object" - properties: - machine: - $ref: "#/components/schemas/machine" - machine: - type: "object" - title: "Machine" - allOf: - - $ref: "#/components/schemas/equipment" - - type: "object" - properties: - implements: - uniqueItems: true - type: "array" - items: - $ref: "#/components/schemas/implement" - equipment-patch: - type: "object" - title: "PatchDTO" - properties: - operation: - type: "string" - enum: - - "UPDATE" - path: - type: "string" - enum: - - "/organization" - - "/archived" - - "/organizationRole/type" - - "/name" - value: - type: "string" - description: "- For transfer request : value={organizationId} - For archive/unarchive request : value=true/false - For role update request : value={Controlling} - For name update request : value={name}" - createEquipment: - type: "object" - title: "Equipment Creation" - properties: - name: - type: "string" - description: "Equipment Name." - example: "Cates 8360R 055358" - serialNumber: - type: "string" - description: "Serial Number of the Equipment and passed on the query parameter" - example: "Must be unique string. Max character count is 30." - x-required-boolean: true - model: - x-required-boolean: true - type: "object" - title: "Model of the equipment." - description: "Model of the equipment." - properties: - id: - type: "string" - description: "Unique id" - example: "3 | 158df9ff-334a-4e0d-86cc-3adca17a9686" - x-required-boolean: true - "@type": - type: "string" - description: "EquipmentModel" - example: "EquipmentModel" - x-required-boolean: true - parameters: - embed: - name: "embed" - in: "query" - x-required-boolean: false - description: "List of embed data for the Equipment ISG Type" - schema: - type: "array" - items: + example: + - "machine" + - "implement" + enum: + - "machine" + - "implement" + deprecated: + name: "deprecated" + in: "query" + x-required-boolean: false + description: "Whether to filter isg types by the deprecated flag" + schema: + type: "string" + enum: + - false + - true + - "all" + example: false + default: "all" + deprecatedForEquipmentModels: + name: "deprecated" + in: "query" + x-required-boolean: false + description: "Optional query parameter that controls which records are returned based on the record's deprecated flag: parameter set to false: Return only non-deprecated records query parameter not present: both deprecated and non-deprecated records returned." + schema: + type: "boolean" + example: false + embed: + name: "embed" + in: "query" + x-required-boolean: false + description: "List of embed data for the Equipment ISG Type" + schema: + type: "array" + items: type: "string" example: - "equipmentModels" @@ -2049,107 +803,6 @@ components: enum: - "equipmentModels" - "recordMetadata" - deprecatedForEquipmentModels: - name: "deprecated" - in: "query" - x-required-boolean: false - description: "Optional query parameter that controls which records are returned based on the record's deprecated flag: parameter set to false: Return only non-deprecated records query parameter not present: both deprecated and non-deprecated records returned." - schema: - type: "boolean" - example: false - deprecated: - name: "deprecated" - in: "query" - x-required-boolean: false - description: "Whether to filter isg types by the deprecated flag" - schema: - type: "string" - enum: - - false - - true - - "all" - example: false - default: "all" - originator: - name: "X-Deere-Originator" - in: "header" - x-required-boolean: false - description: "Originating system of the request" - schema: - type: "string" - example: "DataSync" - OrganizationEquipmentIds: - name: "ids" - in: "query" - x-required-boolean: false - description: "List of OrganizationEquipment Ids (these ids are unique across all orgs)" - schema: - type: "array" - items: - type: "integer" - example: - - 1 - - 2 - - 3 - EquipmentSerialNumbers: - name: "serialNumbers" - in: "query" - x-required-boolean: false - description: "List of serial numbers of the equipment" - schema: - type: "array" - items: - type: "string" - example: - - "A01775E760247" - - "1DW410ETHFF669067" - OrganizationIds: - name: "organizationIds" - in: "query" - x-required-boolean: false - description: "List of OrganizationIds" - schema: - type: "array" - items: - type: "integer" - example: - - 1 - - 2 - - 3 - PrincipalIds: - name: "principalIds" - in: "query" - x-required-boolean: false - description: "List of PrincipalIds" - schema: - type: "array" - items: - type: "integer" - example: - - 1 - - 2 - - 3 - PageOffset: - name: "pageOffset" - in: "query" - x-required-boolean: false - description: "Refers to starting record value" - schema: - type: "integer" - format: "int32" - default: 0 - example: 200 - ItemLimit: - name: "itemLimit" - in: "query" - x-required-boolean: false - description: "Refers to number of items per page(default 100 max 5000)" - schema: - type: "integer" - format: "int32" - default: 100 - maximum: 5000 - example: 200 id: name: "id" in: "path" @@ -2165,195 +818,39 @@ components: schema: type: "integer" format: "int32" - example: "1234," - organizationIds: - name: "organizationIds" - in: "query" - x-required-boolean: false - description: "The organization ids to get Equipment Models for. If provided, then only non-certified models will be returned. If not provided, then only certified models will be returned." - schema: - type: "array" - items: - type: "integer" - format: "int32" - example: - - 1 - - 2 - - 3 - EmbedForList: - name: "embed" - in: "query" - x-required-boolean: false - description: "embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds" - schema: - type: "string" - enum: - - "devices" - - "equipment" - - "icon" - - "pairingDetails" - Embed: - name: "embed" - in: "query" - x-required-boolean: false - description: "embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds" - schema: - type: "string" - enum: - - "devices" - - "equipment" - - "pairingDetails" - - "icon" - - "offsets" - - "capabilities" - Categories: - name: "categories" - in: "query" - x-required-boolean: false - schema: - type: "array" - items: - type: "string" - enum: - - "Machine" - - "Implement" - example: - - "Machine" - - "Implement | Machine | Implement" - CapableOf: - name: "capableOf" - in: "query" - x-required-boolean: false - schema: - type: "string" - enum: - - "Connectivity" - - "!Connectivity" - Role: - name: "organizationRole.type" - in: "query" - x-required-boolean: false - schema: - type: "string" - enum: - - "Controlling" - - "NonControlling" - Archived: - name: "archived" - in: "query" - x-required-boolean: false - schema: - type: "boolean" - description: "true or false" - SerialNumber: - name: "serialNumber" - in: "path" - x-required-boolean: true - schema: - type: "string" - example: "VIN1234" - EquipmentMakeId: - name: "equipmentMakeId" - in: "path" - x-required-boolean: true - description: "ID for Equipment Make" - schema: - type: "integer" - format: "int32" - example: 1111 - EquipmentISGTypeId: - name: "equipmentISGTypeId" - in: "path" - x-required-boolean: true - description: "ID for Equipment ISG Type" - schema: - type: "integer" - format: "int32" - example: 1111 - Deprecated: - name: "deprecated" - in: "path" - x-required-boolean: true - description: "Deprecated value should be false" - schema: - type: "boolean" - example: false - EmbedV1: - name: "embed" - in: "query" - x-required-boolean: false - description: "Embed additional attributes if required." - schema: - type: "string" - enum: - - "make" - - "type" - - "isgType" - example: - - "make" - - "type" - EquipmentModelName: - name: "equipmentModelName" - in: "query" - x-required-boolean: false - description: "It should be equipment model name" - schema: - type: "string" - enum: - - "string or partial string with * wildcard search" - example: - - "9RX420" - - "9RX*" - EquipmentTypeId: - name: "equipmentTypeId" - in: "path" - x-required-boolean: true - description: "ID for Equipment Type" - schema: - type: "integer" - format: "int32" - example: 2222 - EquipmentModelId: - name: "equipmentModelId" - in: "path" - x-required-boolean: true - description: "ID for Equipment Model" - schema: - type: "integer" - format: "int32" - example: 3333 - category: - name: "category" + example: "1234," + organizationIds: + name: "organizationIds" in: "query" x-required-boolean: false - description: "List of type categories for the Equipment Model" + description: "The organization ids to get Equipment Models for. If provided, then only non-certified models will be returned. If not provided, then only certified models will be returned." schema: type: "array" items: - type: "string" + type: "integer" + format: "int32" example: - - "machine" - - "implement" - enum: - - "machine" - - "implement" - EquipmentTypeName: - name: "equipmentTypeName" - in: "query" - x-required-boolean: false - description: "Name for Equipment Type" - schema: - type: "string" - example: "8285R" - EquipmentMakeName: - name: "equipmentTypeId" - in: "query" + - 1 + - 2 + - 3 + originator: + name: "X-Deere-Originator" + in: "header" x-required-boolean: false - description: "Name for Equipment Make" + description: "Originating system of the request" schema: type: "string" - example: "JOHN DEERE" + example: "DataSync" responses: + CreateEquip: + description: "Create" + content: + application/json: + schema: + type: "object" + examples: + Headers: + description: "201 Created" GetEquipment: description: "A collection of Assets" content: @@ -2363,6 +860,8 @@ components: properties: values: type: "array" + items: + $ref: "#/components/schemas/equipmentForList" examples: No Header: value: @@ -2511,6 +1010,8 @@ components: properties: values: type: "array" + items: + $ref: "#/components/schemas/equipment" examples: No Header: value: @@ -2714,6 +1215,42 @@ components: id: 7836613 archivedTimestamp: "2021-03-10T19:19:46.420Z" isCsc: false + GetEquipmentByMakeId: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + examples: + No Header: + value: + "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" + GetEquipmentMake: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + properties: + values: + items: + $ref: "#/components/schemas/equipment-make" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" GetEquipmentModelByMakeIdAndTypeIdAndModelId: description: "Equipment Model Details by Equipment Make ID, Equipment Type ID and Equipment Model ID" content: @@ -2739,267 +1276,1734 @@ components: application/json: schema: type: "object" - properties: - values: - items: - $ref: "#/components/schemas/equipment-model" + properties: + values: + items: + $ref: "#/components/schemas/equipment-model" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentModel" + name: "9RX420" + category: "Machine" + certified: true + id: "217373" + ERID: "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7" + make: + - "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: true + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" + type: + - "@type": "EquipmentType" + name: "Combine" + id: 222 + ERID: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" + isgType: + - "@type": "EquipmentISGType" + name: "Combine" + id: 2 + ERID: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + - "@type": "EquipmentModel" + name: "9RX -870" + category: "Machine" + certified: false + id: "787077" + ERID: "f3d97337-e566-439a-8f6b-4a1c76be055d" + make: + - "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + type: + - "@type": "EquipmentType" + name: "Four-wheel Drive Tractor" + id: 145 + ERID: "6e816bfb-955f-4687-a362-1133ab26cef9" + isgType: + - "@type": "EquipmentISGType" + name: "Tractor" + id: 1 + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + GetEquipmentTypeByEquipmentMakeIdAndEquipmentTypeId: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + properties: + values: + items: + $ref: "#/components/schemas/equipment-type" + examples: + No Header: + value: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + GetEquipmentTypes: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + GetEquipmentTypesByMakeId: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + UpdateEquipment: + type: "object" + title: "Equipment Creation" + properties: + id: + x-required-boolean: true + type: "string" + description: "Unique id" + example: "1 | fcdc83cb-8840-4215-84b5-1769889db932" + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "Must be unique string. Max character count is 30." + x-required-boolean: true + make: + type: "object" + title: "Make of the equipment." + description: "Make of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "1 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + description: "EquipmentMake" + example: "EquipmentMake" + type: + type: "object" + title: "Type of the equipment." + description: "Type of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "2 | 82115264-9385-460c-bfbe-177a59445fd9" + "@type": + type: "string" + description: "EquipmentType" + example: "EquipmentType" + model: + type: "object" + title: "Model of the equipment." + description: "Model of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "3 | 158df9ff-334a-4e0d-86cc-3adca17a9686" + "@type": + type: "string" + description: "EquipmentModel" + example: "EquipmentModel" + icon: + $ref: "#/components/schemas/equipment-icon" + UpdatedEquip: + description: "Update" + content: + application/json: + schema: + type: "object" examples: - No Header: - value: - links: [] - values: - - "@type": "EquipmentModel" - name: "9RX420" - category: "Machine" - certified: true - id: "217373" - ERID: "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7" - make: - - "@type": "EquipmentMake" - name: "JOHN DEERE" - certified: true - deereOrSubsidiary: true - id: 1 - ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" - type: - - "@type": "EquipmentType" - name: "Combine" - id: 222 - ERID: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" - isgType: - - "@type": "EquipmentISGType" - name: "Combine" - id: 2 - ERID: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" - - "@type": "EquipmentModel" - name: "9RX -870" - category: "Machine" - certified: false - id: "787077" - ERID: "f3d97337-e566-439a-8f6b-4a1c76be055d" - make: - - "@type": "EquipmentMake" - name: "JOHN DEERE" - certified: false - deereOrSubsidiary: true - id: 1 - ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - type: - - "@type": "EquipmentType" - name: "Four-wheel Drive Tractor" - id: 145 - ERID: "6e816bfb-955f-4687-a362-1133ab26cef9" - isgType: - - "@type": "EquipmentISGType" - name: "Tractor" - id: 1 - ERID: "82115264-9385-460c-bfbe-177a59445fd9" - UpdateEquipment: + Headers: + description: "204 No Content" + examples: + No Header: + value: + "@type": "Machine" + id: 1 + name: "Equipment Name" + serialNumber: "1T0750LXCNF012345" + make: + - "@type": "EquipmentMake" + id: 1 + type: + - "@type": "EquipmentType" + id: 414 + model: + - "@type": "EquipmentModel" + id: 585917 + icon: + - "@type": "EquipmentIcon" + name: "crawler-loader" + iconStyle: + primaryColor: "#F2A900" + secondaryColor: "#808082" + schemas: + Error: + type: "object" + properties: + message: + type: "string" + description: "An english description of the error" + example: "was invalid because" + code: + type: "string" + description: "A string constant representing the type of error" + example: 400 + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "Machine.serialNumber" + gud: + type: "string" + format: "uuid" + description: "A reference to this encounter of the error, for traceability and troubleshooting" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: null + readOnly: true + Errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + readOnly: true + RecordMetadata: + type: "object" + description: "Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)" + properties: + "@type": + type: "string" + default: "RecordMetadata" + example: "RecordMetadata" + createdByUser: + type: "string" + description: "User involved in creating the entity. Only viewable with the RECORD_METADATA license" + example: "XYZ_USER" + lastModifiedByUser: + type: "string" + description: "User involved in modifying the entity. Only viewable with the RECORD_METADATA license" + example: "XYZ_USER" + userCreationTimestamp: + type: "string" + description: "Timestamp of entity creation" + readOnly: true + example: "2018-04-30T10:23:50.000Z" + userLastModifiedTimestamp: + type: "string" + description: "Timestamp of entity modification" + readOnly: true + example: "2018-05-01T08:11:23.000Z" + createdBySourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that created the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license." + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + lastModifiedSourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that modified the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license" + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + createdBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that created) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + lastModifiedBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that did last modification) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license." + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + abstractMeasurement: + type: "object" + title: "AbstractMeasurement" + properties: + type: + type: "string" + unit: + type: "string" + capability: + type: "object" + title: "Capability" + description: "List of capabilities of the equipment." + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Capability" + description: "Capability" + example: "Capability" + capable: + type: "boolean" + type: + type: "string" + enum: + - "JDLINK_CONNECTIVITY" + - "RDA" + - "WDT" + - "WIFI_CONNECTIVITY" + - "CUSTOMER_SIM_CONNECTIVITY" + - "LEGACY_CONNECTIVITY" + - "PLANNED_WORK" + - "DATA_SYNC_SETUP" + - "CH_REMOTE_ADJUST" + - "BASE_STATION" + - "MY_MACHINE" + - "RDC" + - "REMOTE_START" + inabilityDetails: + type: "array" + items: + $ref: "#/components/schemas/inability-detail" + communication-module: + type: "object" + title: "CommunicationModule" + description: "Represents a communication module, including its serial number, IMEI, IMSI, ICCID, MSISDN, EID, type, service provider, state, and country calling code." + example: + serialNumber: "PCS171B372381" + imei: 123456789012345 + imsi: 310150123456789 + iccid: 89014103211118510000 + msisdn: 15555551234 + eid: 89014103211118510000 + type: "GSM" + serviceProvider: "ATT" + state: "ACTIVE" + countryCallingCode: 1 + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "CommunicationModule" + description: "CommunicationModule" + example: "CommunicationModule" + serialNumber: + type: "string" + description: "Serial number of the communication gateway" + example: "PCS171B372381" + imei: + type: "string" + description: "International Mobile Equipment Identity of the communication module." + example: 123456789012345 + imsi: + type: "string" + description: "International Mobile Subscriber Identity of the communication module." + example: 310150123456789 + iccid: + type: "string" + description: "Integrated Circuit Card Identifier of the communication module." + example: 89014103211118510000 + msisdn: + type: "string" + description: "Mobile Station International Subscriber Directory Number of the communication module." + example: 15555551234 + eid: + type: "string" + description: "Embedded Identity Document of the communication module." + example: 89014103211118510000 + type: + type: "string" + description: "Type of the communication module." + enum: + - "GSM" + - "SATELLITE" + - "CDMA" + - "COS" + example: "GSM" + serviceProvider: + type: "string" + enum: + - "IRIDIUM" + - "ATT" + - "JASPER" + - "VERIZON" + - "COS" + - "COST" + - "CUBIC" + - "ATTIOT" + example: "ATT" + state: + type: "string" + description: "Subscription state of the communication gateway" + enum: + - "NEW" + - "ACTIVE" + - "INACTIVE" + - "EXPIRED" + - "PENDING_ACTIVE" + - "PENDING_INACTIVE" + - "PENDING_EXPIRED" + - "PENDING_VERIFICATION" + - "PENDING_WDT" + - "TERMINATED" + example: "ACTIVE" + countryCallingCode: + type: "string" + description: "Country calling code of the communication module." + example: 1 + createEquipment: + type: "object" + title: "Equipment Creation" + properties: + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "Must be unique string. Max character count is 30." + x-required-boolean: true + model: + x-required-boolean: true + type: "object" + title: "Model of the equipment." + description: "Model of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "3 | 158df9ff-334a-4e0d-86cc-3adca17a9686" + x-required-boolean: true + "@type": + type: "string" + description: "EquipmentModel" + example: "EquipmentModel" + x-required-boolean: true + definedTypeRepresentationValue: + type: "object" + title: "DefinedTypeRepresentationValue" + properties: + value: + $ref: "#/components/schemas/measurementAsString" + device: + type: "object" + title: "Device" + description: "Represents a device, including its serial number, certification status, make, type, model, organization, and other attributes." + example: + "@type": "Device" + serialNumber: "PCMA4GF511111" + make: + name: "JOHN DEERE" + id: "1" + ERID: "f8b43e74-3088-4a38-9d66-30aae1ed1111" + type: + name: "Modem" + commonName: "TelematicsGateway" + id: "1" + ERID: "d469a324-2036-11ee-bb58-0e5cd6a91111" + model: + name: "JDLink Modem-4G" + id: "3" + ERID: "f413bba6-9f39-410c-866f-c800bf701111" + firmwareVersion: + name: "40.02.049" + organization: + id: "21111" + organizationRole: + type: "Controlling" + effectiveTS: "2024-04-30T17:53:57Z" + event: "PAIRING" + archived: false + decommissioned: false + stolen: false + principalId: "911111" + equipment: + name: "Cattle 9700 SPFH" + serialNumber: "1Z09700YAKU621111" + isSerialNumberCertified: true + modelYear: "2019" + make: + name: "JOHN DEERE" + certified: true + deereOrSubsidiary: true + id: "1" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c1111" + type: + name: "Forage Harvester" + id: "162" + ERID: "34b07db5-11fb-11ee-8580-0ed5f7261111" + isgType: + name: "Forage Harvester" + id: "6" + ERID: "99edf0e0-4abb-42d3-9798-327439a31111" + model: + name: 9700 + certified: true + id: "581111" + ERID: "2c8c951e-070a-4e1c-824d-72cca6e71111" + principalId: "661111" + archived: false + organization: + id: "22967" + organizationRole: + type: "Controlling" + effectiveTS: "2024-04-30T17:53:56.695Z" + event: "PAIRING" + isCsc: false + id: "661111" + ERID: "23fe3ea0-1f95-4ae6-8e12-968729cd1111" + capabilities: + - type: "JDLINK_CONNECTIVITY" + capable: true + - type: "WIFI_CONNECTIVITY" + capable: true + pairingDetails: + paired: true + associationTimestamp: "2024-09-28T17:30:24Z" + disassociationTimestamp: null + confirmationTimestamp: "2024-10-23T22:17:22Z" + location: + lat: 52.780639 + lon: -122.453222 + slope: null + messagesRestricted: false + pairingStatus: "PAIRED" + orderNumber: "961111" + highFidelityConfigurationVersion: + name: "1Hz_L3X40FT4JDPS0x00_ISG_X8X9SPFH_63978_2024.008.001" + genericConfigurationVersion: + name: "1623F1EF-62C2-4B8B-B5EA-A0FFD6EA76F8" + communicationModules: + - imei: "014642005101111" + imsi: "310170835961111" + iccid: "89011704278359691111" + type: "GSM" + serviceProvider: "Jasper" + state: "Active" + id: "632111" + id: "915111" + ERID: "fb537c94-14f1-11ef-871b-1287bcef1111" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Device" + - "Display" + - "PositionReceiver" + - "TelematicsGateway" + description: "Device | Display | PositionReceiver | TelematicsGateway" + example: "Device" + serialNumber: + type: "string" + description: "Serial number of the device and passed on the query parameter" + example: "PCS171B372381" + isSerialNumberCertified: + type: "boolean" + description: "True if this is an official device (we have PI information about it)." + example: true + make: + $ref: "#/components/schemas/device-make" + type: + $ref: "#/components/schemas/device-type" + model: + $ref: "#/components/schemas/device-model" + organization: + $ref: "#/components/schemas/organization-embed" + ERID: + type: "string" + description: "Unique identifier of the Device." + example: "fcdc83cb-8840-4215-84b5-1769889db932" + firmwareVersion: + $ref: "#/components/schemas/version" + capabilities: + type: "array" + items: + $ref: "#/components/schemas/capability" + equipment: + $ref: "#/components/schemas/equipment" + archived: + type: "boolean" + description: "Indicates if the device is archived." + example: true + decommissioned: + type: "boolean" + description: "Indicates if the device is decommissioned." + example: false + stolen: + type: "boolean" + description: "Indicates if the device is stolen." + example: false + principalId: + type: "string" + description: "Unique id for principal device" + example: 12345 + organizationRole: + $ref: "#/components/schemas/organization-role" + orderNumber: + type: "string" + description: "Order number associated with the device." + example: 987654321 + pairingDetails: + $ref: "#/components/schemas/pairing-details" + archivedTimestamp: + type: "string" + format: "date-time" + description: "Timestamp when the device was archived." + example: "2021-03-10T19:19:46.420Z" + device-make: + type: "object" + title: "DeviceMake" + description: "Represents the make of a device, including its name and unique identifier (ERID)." + example: + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "DeviceMake" + description: "DeviceMake" + example: "DeviceMake" + name: + type: "string" + description: "The name of the device make." + example: "JOHN DEERE" + ERID: + type: "string" + description: "Unique identifier of the device make." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + device-model: + type: "object" + title: "DeviceModel" + description: "Represents the model of a device, including its name, unique identifier (ERID), make, and type." + example: + name: "JDLink Modem-4G" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + make: + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + type: + name: "Modem" + commonName: "TelematicsGateway" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "DeviceModel" + description: "DeviceModel" + example: "DeviceModel" + name: + type: "string" + description: "The name of the device model." + example: "JDLink Modem-4G" + ERID: + type: "string" + description: "Unique identifier of the device model." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + make: + $ref: "#/components/schemas/device-make" + type: + $ref: "#/components/schemas/device-type" + device-type: + type: "object" + title: "DeviceType" + description: "Represents the type of a device, including its name, common name, and unique identifier (ERID)." + example: + name: "Modem" + commonName: "TelematicsGateway" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "DeviceType" + description: "DeviceType" + example: "DeviceType" + name: + type: "string" + description: "The name of the device type." + example: "Modem" + commonName: + type: "string" + description: "The common name of the device type." + example: "TelematicsGateway" + ERID: + type: "string" + description: "Unique identifier of the device type." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + display: + type: "object" + title: "Display" + allOf: + - $ref: "#/components/schemas/device" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Display" + description: "Display" + example: "Display" + monitors: + uniqueItems: true + type: "array" + items: + $ref: "#/components/schemas/display-monitors" + display-monitors: + type: "object" + title: "Monitor" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Monitor" + description: "Monitor" + example: "Monitor" + type: + type: "string" + example: "Monitor_0" + serialNumber: + type: "string" + example: "PCG410A015392" + resolutionWidth: + type: "integer" + example: 800 + resolutionHeight: + type: "integer" + example: 600 + equipment: + type: "object" + title: "Equipment" + description: "Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes." + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Equipment" + - "Machine" + - "Implement" + description: "Equipment | Machine | Implement" + example: "Equipment" + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + isoName: + type: "string" + description: "Unique 64-bit ISO NAME used to identify the controller during address claim." + example: "b00082000422ed1d" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "1RW8360RLCD055358" + engineSerialNumber: + type: "string" + description: "VIN or PIN, more than Serial Number, of the Engine." + example: "RG6090L839275" + isSerialNumberCertified: + type: "boolean" + description: "True if this is an official equipment (we have PI information about it)." + example: true + modelYear: + type: "string" + description: "Year of model." + example: 2019 + make: + $ref: "#/components/schemas/equipment-make-embed" + type: + $ref: "#/components/schemas/equipment-type-embed" + isgType: + $ref: "#/components/schemas/equipment-isg-type-embed" + model: + $ref: "#/components/schemas/equipment-model-embed" + organization: + $ref: "#/components/schemas/organization-embed" + telematicsCapable: + type: "boolean" + description: "Indicates if the equipment is capable of telematics." + example: true + archived: + type: "boolean" + description: "Indicates if the equipment is archived." + example: true + principalId: + type: "string" + description: "Unique id for principal equipment" + example: 12345 + organizationRole: + $ref: "#/components/schemas/organization-role" + ERID: + type: "string" + description: "Unique identifier of the Equipment." + example: "fcdc83cb-8840-4215-84b5-1769889db932" + alternateIdentifiers: + type: "array" + description: "List of alternate identifiers of the Equipment like DE-13, DE-17, ERID..." + items: + $ref: "#/components/schemas/identifier" + icon: + $ref: "#/components/schemas/equipment-icon" + offsets: + $ref: "#/components/schemas/offsets" + devices: + type: "array" + description: "List of devices paired with the equipment." + items: + $ref: "#/components/schemas/device" + capabilities: + type: "array" + description: "List of capabilities of the equipment." + items: + $ref: "#/components/schemas/capability" + pairingDetails: + $ref: "#/components/schemas/pairing-details" + archivedTimestamp: + type: "string" + format: "date-time" + description: "Timestamp when the equipment was archived." + example: "2021-03-10T19:19:46.420Z" + mergedEquipment: + type: "array" + description: "List of equipment that was merged." + items: + $ref: "#/components/schemas/machine" + isCsc: + type: "boolean" + description: "Indicates if the equipment is CSC equipment or not." + example: true + equipment-icon: + type: "object" + title: "EquipmentIcon" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment icon." + example: "JOHN DEERE" + iconStyle: + $ref: "#/components/schemas/icon-style" + equipment-isg-type: + type: "object" + title: "EquipmentIsgType" + description: "Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata." + example: + name: "Tractor" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + allowsCustomModel: true + isgMarketSegment: "Agriculture" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the ISG equipment type." + example: "Tractor" + ERID: + type: "string" + description: "Unique identifier for the ISG equipment type." + example: "82115264-9385-460c-bfbe-177a59445fd9" + category: + type: "string" + description: "The category of the ISG equipment type." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + allowsCustomModel: + type: "boolean" + description: "Indicates if the equipment ISG type allows custom models." + example: true + isgMarketSegment: + type: "string" + description: "The ISG market segment of the equipment ISG type." + enum: + - "Unknown" + - "Agriculture" + - "Construction" + - "Engines & Components" + - "Forestry" + - "Turf" + example: "Agriculture" + deprecated: + type: "boolean" + description: "Indicates if the ISG equipment type is deprecated." + example: false + equipment-isg-type-embed: + type: "object" + title: "EquipmentISGType" + description: "Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentISGType" + example: "EquipmentISGType" + id: + type: "string" + description: "Unique identifier for the ISG equipment type." + example: "2" + name: + type: "string" + description: "The name of the ISG equipment type." + example: "Combine" + ERID: + type: "string" + description: "Unique identifier for the ISG equipment type." + example: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + equipment-make: + type: "object" + title: "EquipmentMake" + description: "Represents the make of the equipment, including its name, unique identifier, and metadata." + example: + id: 1 + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + certified: true + deereOrSubsidiary: true + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment make." + example: "JOHN DEERE" + ERID: + type: "string" + description: "Unique identifier for the equipment make." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + certified: + type: "boolean" + description: "Indicates if the equipment make is certified." + example: true + deereOrSubsidiary: + type: "boolean" + description: "Indicates if the equipment make is deereOrSubsidiary." + example: true + deprecated: + type: "boolean" + description: "Indicates if the equipment make is deprecated." + example: false + equipment-make-embed: + type: "object" + title: "EquipmentMake" + description: "Represents the make of the equipment, including its name, unique identifier, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentMake" + example: "EquipmentMake" + id: + type: "string" + description: "Unique identifier for the equipment make." + example: "1" + name: + type: "string" + description: "The name of the equipment make." + example: "JOHN DEERE" + ERID: + type: "string" + description: "Unique identifier for the equipment make." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + certified: + type: "boolean" + description: "Indicates if the equipment make is certified." + example: true + deereOrSubsidiary: + type: "boolean" + description: "Indicates if the equipment make is deereOrSubsidiary." + example: true + equipment-model: + type: "object" + title: "EquipmentModel" + description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." + example: + name: "8360R" + ERID: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: "Machine" + deprecated: false + certified: false + make: + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + type: + name: "Two-wheel Drive Tractors - 140 Hp And Above" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + certified: true + marketSegment: "Agriculture" + icon: + url: "https://example.com/icon.png" + description: "Icon representing the equipment type" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + isgType: + name: "Tractor" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + icon: + url: "https://example.com/icon.png" + description: "Icon representing the equipment model" + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment model." + example: "8360R" + ERID: + type: "string" + description: "Unique identifier for the equipment model." + example: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: + type: "string" + description: "The category of the equipment model." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + deprecated: + type: "boolean" + description: "Indicates if the equipment model is deprecated." + example: false + certified: + type: "boolean" + description: "Indicates if the equipment model is certified." + example: false + make: + $ref: "#/components/schemas/equipment-make" + type: + $ref: "#/components/schemas/equipment-type" + isgType: + $ref: "#/components/schemas/equipment-isg-type" + equipment-model-details: + type: "object" + title: "EquipmentModel" + allOf: + - type: "object" + properties: + name: + type: "string" + example: "8360R" + ERID: + type: "string" + example: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: + type: "string" + enum: + - "Machine" + - "Implement" + - "Unknown" + make: + $ref: "#/components/schemas/equipment-make-embed" + type: + $ref: "#/components/schemas/equipment-type-embed" + icon: + $ref: "#/components/schemas/equipment-icon" + equipment-model-embed: + type: "object" + title: "EquipmentModel" + description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentModel" + example: "EquipmentModel" + id: + type: "string" + description: "Unique identifier for the equipment model." + example: "65985" + name: + type: "string" + description: "The name of the equipment model." + example: "S680" + ERID: + type: "string" + description: "Unique identifier for the equipment model." + example: "f2e7d596-35c6-11e7-af34-123e49453e98" + certified: + type: "boolean" + description: "Indicates if the equipment model is certified." + example: true + equipment-model-no-embed: + type: "object" + title: "EquipmentModel" + description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." + example: + name: "8360R" + ERID: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: "Machine" + certified: false + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment model." + example: "8360R" + ERID: + type: "string" + description: "Unique identifier for the equipment model." + example: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: + type: "string" + description: "The category of the equipment model." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + certified: + type: "boolean" + description: "Indicates if the equipment model is certified." + example: false + equipment-patch: + type: "object" + title: "PatchDTO" + properties: + operation: + type: "string" + enum: + - "UPDATE" + path: + type: "string" + enum: + - "/organization" + - "/archived" + - "/organizationRole/type" + - "/name" + value: + type: "string" + description: "- For transfer request : value={organizationId} - For archive/unarchive request : value=true/false - For role update request : value={Controlling} - For name update request : value={name}" + equipment-type: + type: "object" + title: "EquipmentType" + deprecated: true + description: "Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata." + example: + id: 217 + name: "Two-wheel Drive Tractors - 140 Hp And Above" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + certified: true + marketSegment: "Agriculture" + icon: + url: "https://example.com/icon.png" + description: "Icon representing the equipment type" + deprecated: false + allowsCustomModel: true + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment type." + example: "Two-wheel Drive Tractors - 140 Hp And Above" + ERID: + type: "string" + description: "Unique identifier for the equipment type." + example: "82115264-9385-460c-bfbe-177a59445fd9" + category: + type: "string" + description: "The category of the equipment type." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + certified: + type: "boolean" + description: "Indicates if the equipment type is certified." + example: true + allowsCustomModel: + type: "boolean" + description: "Indicates if the equipment type allows custom models." + example: true + marketSegment: + type: "string" + description: "The market segment of the equipment type." + enum: + - "Unknown" + - "Agriculture" + - "Commercial Worksite Products" + - "Construction" + - "Engines & Components" + - "Forestry" + - "Mining" + - "Turf" + example: "Agriculture" + icon: + $ref: "#/components/schemas/equipment-icon" + deprecated: + type: "boolean" + description: "Indicates if the equipment type is deprecated." + example: false + equipment-type-embed: + type: "object" + title: "EquipmentType" + description: "Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentType" + example: "EquipmentType" + id: + type: "string" + description: "Unique identifier for the equipment type." + example: "222" + name: + type: "string" + description: "The name of the equipment type." + example: "Combine" + ERID: + type: "string" + description: "Unique identifier for the equipment type." + example: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" + equipmentForList: + type: "object" + title: "Equipment" + description: "Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes." + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Equipment" + - "Machine" + - "Implement" + description: "Equipment | Machine | Implement" + example: "Equipment" + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + isoName: + type: "string" + description: "Unique 64-bit ISO NAME used to identify the controller during address claim." + example: "b00082000422ed1d" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "1RW8360RLCD055358" + engineSerialNumber: + type: "string" + description: "VIN or PIN, more than Serial Number, of the Engine." + example: "RG6090L839275" + isSerialNumberCertified: + type: "boolean" + description: "True if this is an official equipment (we have PI information about it)." + example: true + modelYear: + type: "string" + description: "Year of model." + example: 2019 + make: + $ref: "#/components/schemas/equipment-make-embed" + type: + $ref: "#/components/schemas/equipment-type-embed" + isgType: + $ref: "#/components/schemas/equipment-isg-type-embed" + model: + $ref: "#/components/schemas/equipment-model-embed" + organization: + $ref: "#/components/schemas/organization-embed" + telematicsCapable: + type: "boolean" + description: "Indicates if the equipment is capable of telematics." + example: true + archived: + type: "boolean" + description: "Indicates if the equipment is archived." + example: true + principalId: + type: "string" + description: "Unique id for principal equipment" + example: 12345 + organizationRole: + $ref: "#/components/schemas/organization-role" + ERID: + type: "string" + description: "Unique identifier of the Equipment." + example: "fcdc83cb-8840-4215-84b5-1769889db932" + alternateIdentifiers: + type: "array" + description: "List of alternate identifiers of the Equipment like DE-13, DE-17, ERID..." + items: + $ref: "#/components/schemas/identifier" + icon: + $ref: "#/components/schemas/equipment-icon" + devices: + type: "array" + description: "List of devices paired with the equipment." + items: + $ref: "#/components/schemas/device" + pairingDetails: + $ref: "#/components/schemas/pairing-details" + archivedTimestamp: + type: "string" + format: "date-time" + description: "Timestamp when the equipment was archived." + example: "2021-03-10T19:19:46.420Z" + mergedEquipment: + type: "array" + description: "List of equipment that was merged." + items: + $ref: "#/components/schemas/machine" + isCsc: + type: "boolean" + description: "Indicates if the equipment is CSC equipment or not." + example: true + icon-style: + type: "object" + title: "IconStyle" + description: "icon style" + properties: + primaryColor: + type: "string" + description: "primary color of the icon style" + secondaryColor: + type: "string" + description: "secondary color of the icon style" + identifier: + type: "object" + title: "Identifier of Equipment" + description: "Identifier of the Equipment like DE-13, DE-17, ERID..." + allOf: + - type: "object" + properties: + type: + x-required-boolean: true + type: "string" + description: "Type of identifier." + enum: + - "serialNumber" + - "ERID" + value: + x-required-boolean: true + type: "string" + description: "Value of identifier." + example: "RW8360R055358" + implement: + type: "object" + title: "Implement" + allOf: + - $ref: "#/components/schemas/equipment" + - type: "object" + properties: + machine: + $ref: "#/components/schemas/machine" + inability-detail: + type: "object" + title: "InabilityDetail" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + code: + type: "string" + example: "RC14.8.1" + type: + type: "string" + example: "REGISTRATION" + description: + type: "string" + example: "SIM registration is required" + link: + type: "object" + title: "Link" + properties: + rel: + type: "string" + example: "nextPage" + uri: + type: "string" + description: "This will be the relative URL. Users will prefix the base url as per their requirements." + example: "/equipment?pageOffset=10&itemSize=10" + machine: + type: "object" + title: "Machine" + allOf: + - $ref: "#/components/schemas/equipment" + - type: "object" + properties: + implements: + uniqueItems: true + type: "array" + items: + $ref: "#/components/schemas/implement" + measurementAsDouble: + type: "object" + title: "MeasurementAsDouble" + description: "measurement as double" + allOf: + - $ref: "#/components/schemas/abstractMeasurement" + - type: "object" + properties: + type: + type: "string" + description: "type of measurement" + unit: + type: "string" + description: "unit of measurement" + valueAsDouble: + type: "number" + format: "double" + description: "measurement value as double" + measurementAsString: + type: "object" + title: "MeasurementAsString" + description: "measurement as string" + allOf: + - $ref: "#/components/schemas/abstractMeasurement" + - type: "object" + properties: + type: + type: "string" + description: "type of measurement" + unit: + type: "string" + description: "unit of measurement" + valueAsString: + type: "string" + description: "measurement value as string" + offsets: + type: "object" + title: "Offsets" + description: "Represents the offsets of a device, including its variable and defined type representation values." + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Offsets" + description: "Offsets" + example: "Offsets" + variableRepresentationValues: + type: "array" + items: + $ref: "#/components/schemas/variableRepresentationValue" + definedTypeRepresentationValues: + type: "array" + items: + $ref: "#/components/schemas/definedTypeRepresentationValue" + organization-embed: + type: "object" + title: "Resource" + properties: + id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + x-required-boolean: true + description: "Resource" + example: "Resource" + organization-role: + type: "object" + title: "OrganizationRole" + description: "Represents the role of an organization, including its type, effective timestamp, and event." + example: + type: "Controlling" + effectiveTS: "2023-10-01T12:00:00Z" + event: "CREATION" + properties: + type: + type: "string" + description: "The type of the organization role." + enum: + - "Controlling" + - "NonControlling" + example: "Controlling" + effectiveTS: + type: "string" + format: "date-time" + description: "The timestamp when the role becomes effective." + example: "2023-10-01T12:00:00Z" + event: + type: "string" + description: "The event associated with the organization role." + enum: + - "CREATION" + - "TRANSFER" + - "SUBSCRIPTION" + - "PAIRING" + - "ORDER" + - "COMMANDED" + - "DECOMMISSION" + example: "CREATION" + inPossession: + type: "boolean" + example: true + pairing-details: + type: "object" + title: "PairingDetails" + description: "Represents the details of the pairing process, including timestamps and location." + example: + paired: true + associationTimestamp: "2023-10-01T12:00:00Z" + disassociationTimestamp: "2023-10-02T12:00:00Z" + confirmationTimestamp: "2023-10-01T12:30:00Z" + location: + latitude: 40.712776 + longitude: -74.005974 + properties: + paired: + type: "boolean" + description: "Indicates if the equipment is paired." + example: true + associationTimestamp: + type: "string" + format: "date-time" + description: "The timestamp when the equipment was paired." + example: "2023-10-01T12:00:00Z" + disassociationTimestamp: + type: "string" + format: "date-time" + description: "The timestamp when the equipment was un-paired." + example: "2023-10-02T12:00:00Z" + confirmationTimestamp: + type: "string" + format: "date-time" + description: "The timestamp when the pairing was confirmed." + example: "2023-10-01T12:30:00Z" + location: + $ref: "#/components/schemas/point" + point: + type: "object" + title: "Point" + properties: + lat: + type: "number" + format: "double" + lon: + type: "number" + format: "double" + slope: + type: "number" + format: "double" + position-receiver: + type: "object" + title: "PositionReceiver" + allOf: + - $ref: "#/components/schemas/device" + - type: "object" + resource: + type: "object" + title: "Resource" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/link" + id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + description: "Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + example: "Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + x-required-boolean: true + resource-embed: type: "object" - title: "Equipment Creation" + title: "Resource" properties: id: - x-required-boolean: true type: "string" description: "Unique id" - example: "1 | fcdc83cb-8840-4215-84b5-1769889db932" - name: + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": type: "string" - description: "Equipment Name." - example: "Cates 8360R 055358" - serialNumber: + x-required-boolean: true + description: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + example: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + resourcewithoutLinks: + type: "object" + title: "Resource" + properties: + id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": type: "string" - description: "Serial Number of the Equipment and passed on the query parameter" - example: "Must be unique string. Max character count is 30." x-required-boolean: true - make: - type: "object" - title: "Make of the equipment." - description: "Make of the equipment." + description: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + example: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + telematics-gateway: + type: "object" + title: "TelematicsGateway" + allOf: + - $ref: "#/components/schemas/device" + - type: "object" properties: - id: + pairingStatus: type: "string" - description: "Unique id" - example: "1 | fcdc83cb-8840-4215-84b5-1769889db932" - "@type": + enum: + - "PAIRED" + - "PENDING_PAIRING" + orderNumber: type: "string" - description: "EquipmentMake" - example: "EquipmentMake" - type: - type: "object" - title: "Type of the equipment." - description: "Type of the equipment." + highFidelityConfigurationVersion: + $ref: "#/components/schemas/version" + genericConfigurationVersion: + $ref: "#/components/schemas/version" + messagesRestricted: + type: "boolean" + communicationModules: + type: "array" + items: + $ref: "#/components/schemas/communication-module" + variableRepresentationValue: + type: "object" + title: "VariableRepresentationValue" + properties: + variable: + $ref: "#/components/schemas/measurementAsDouble" + version: + type: "object" + title: "Version" + description: "Represents the version of a device or software, including its name." + example: + name: "3.16.1171" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" properties: - id: - type: "string" - description: "Unique id" - example: "2 | 82115264-9385-460c-bfbe-177a59445fd9" "@type": type: "string" - description: "EquipmentType" - example: "EquipmentType" - model: - type: "object" - title: "Model of the equipment." - description: "Model of the equipment." - properties: - id: - type: "string" - description: "Unique id" - example: "3 | 158df9ff-334a-4e0d-86cc-3adca17a9686" - "@type": + enum: + - "Version" + description: "Version" + example: "Version" + name: type: "string" - description: "EquipmentModel" - example: "EquipmentModel" - icon: - $ref: "#/components/schemas/equipment-icon" - examples: - No Header: - value: - "@type": "Machine" - id: 1 - name: "Equipment Name" - serialNumber: "1T0750LXCNF012345" - make: - - "@type": "EquipmentMake" - id: 1 - type: - - "@type": "EquipmentType" - id: 414 - model: - - "@type": "EquipmentModel" - id: 585917 - icon: - - "@type": "EquipmentIcon" - name: "crawler-loader" - iconStyle: - primaryColor: "#F2A900" - secondaryColor: "#808082" - GetEquipmentMake: - description: "A collection of Assets" - content: - application/json: - schema: - type: "object" - properties: - values: - items: - $ref: "#/components/schemas/equipment-make" - examples: - No Header: - value: - links: [] - values: - - "@type": "EquipmentMake" - name: "JOHN DEERE" - certified: false - deereOrSubsidiary: true - id: 1 - ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" - GetEquipmentByMakeId: - description: "A collection of Assets" - content: - application/json: - schema: - type: "object" - examples: - No Header: - value: - "@type": "EquipmentMake" - name: "JOHN DEERE" - certified: false - deereOrSubsidiary: true - id: 1 - ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" - GetEquipmentTypesByMakeId: - description: "A collection of Assets" - content: - application/json: - schema: - type: "object" - examples: - No Header: - value: - links: [] - values: - - "@type": "EquipmentType" - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - "@type": "EquipmentIcon" - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - GetEquipmentTypes: - description: "A collection of Assets" - content: - application/json: - schema: - type: "object" - examples: - No Header: - value: - links: [] - values: - - "@type": "EquipmentType" - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - "@type": "EquipmentIcon" - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - GetEquipmentTypeByEquipmentMakeIdAndEquipmentTypeId: - description: "A collection of Assets" - content: - application/json: - schema: - type: "object" - properties: - values: - items: - $ref: "#/components/schemas/equipment-type" - examples: - No Header: - value: - - "@type": "EquipmentType" - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - "@type": "EquipmentIcon" - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - CreateEquip: - description: "Create" - content: - application/json: - schema: - type: "object" - examples: - Headers: - description: "201 Created" - UpdatedEquip: - description: "Update" - content: - application/json: - schema: - type: "object" - examples: - Headers: - description: "204 No Content" + description: "The name of the version." + example: "3.16.1171" diff --git a/specs/fixed/farms.yaml b/specs/fixed/farms.yaml index 8243560..7827dd6 100644 --- a/specs/fixed/farms.yaml +++ b/specs/fixed/farms.yaml @@ -14,6 +14,62 @@ servers: - "sandboxapi" - "partnerapi" paths: + /organizations/{orgID}/farms/{id}/fields: + get: + description: "View details on the field to which a specified farm belongs. The response will link to the following resources: boundaries: View the boundaries of this field. clients: View the clients associated with this field. farms: View the farms belonging to this field. owningOrganization: View the organization that owns the field. activeBoundary: View the active boundary of this field." + summary: "View a Farm's Field" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Id3" + - $ref: "#/components/parameters/X-deere-signature" + responses: + "200": + description: "Get Field by client Id" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FieldResponse2" + examples: + No Header: + description: "20O OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + total: 1 + values: + - name: "Nautilus" + archived: false + id: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + lastModifiedTime: "2020-09-21T15:41:15.205Z" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58" + - rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" + - rel: "clients" + uri: "https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" /organizations/{orgId}/farms: get: description: "Retrieve all of the farms for an organization" @@ -140,80 +196,16 @@ paths: $ref: "#/components/responses/DoesNotHaveAccessToOrg" "404": $ref: "#/components/responses/OrgNotFound" - /organizations/{orgID}/farms/{id}/fields: - get: - description: "View details on the field to which a specified farm belongs. The response will link to the following resources: boundaries: View the boundaries of this field. clients: View the clients associated with this field. farms: View the farms belonging to this field. owningOrganization: View the organization that owns the field. activeBoundary: View the active boundary of this field." - summary: "View a Farm's Field" - security: - - OAuth2: - - "ag1" - parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/Id3" - - $ref: "#/components/parameters/X-deere-signature" - responses: - "200": - description: "Get Field by client Id" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/GroupLink" - total: - type: "integer" - example: 1 - format: "int32" - values: - type: "array" - items: - $ref: "#/components/schemas/FieldResponse2" - examples: - No Header: - description: "20O OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" - total: 1 - values: - - name: "Nautilus" - archived: false - id: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" - lastModifiedTime: "2020-09-21T15:41:15.205Z" - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58" - - rel: "boundaries" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" - - rel: "clients" - uri: "https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" - - rel: "farms" - uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/1234" - - rel: "contributionDefinition" - uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" components: parameters: - OrgId: + FarmId: in: "path" - name: "orgId" - description: "The id of the organization" + name: "farmId" + description: "Farm id" x-required-boolean: true - schema: - type: "integer" - format: "int64" - example: 12345 - X-deere-signature: - name: "x-deere-signature" - in: "header" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: type: "string" - example: "9r8392615e4b4e1c92018026f47109bb" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" Id3: name: "id" in: "path" @@ -223,22 +215,15 @@ components: type: "string" format: "uuid" example: "14e69520-34b2-4e67-b5f1-fffaf49531de" - FarmId: + OrgId: in: "path" - name: "farmId" - description: "Farm id" + name: "orgId" + description: "The id of the organization" x-required-boolean: true schema: - type: "string" - example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" - RecordMetadataEmbed: - in: "query" - name: "embed" - description: "Embed additional traceability record metadata to response" - x-required-boolean: false - schema: - type: "string" - example: "showRecordMetadata" + type: "integer" + format: "int64" + example: 12345 RecordFilter: name: "recordFilter" in: "query" @@ -252,6 +237,21 @@ components: - "archived" - "all" default: "available" + RecordMetadataEmbed: + in: "query" + name: "embed" + description: "Embed additional traceability record metadata to response" + x-required-boolean: false + schema: + type: "string" + example: "showRecordMetadata" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" requestBodies: FarmRequest: $ref: "#/components/schemas/PostFarm" @@ -295,20 +295,42 @@ components: uri: "https://sandboxapi.deere.com/platform/organizations/6789" id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" archived: false - FarmsReturned: - description: "Array of farms containing links related to assets" + DeletedResponse: + description: "Deleted" content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/GetFarms" + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + DoesNotHaveAccessResponse: + description: "Does not have access" + DoesNotHaveAccessToOrg: + description: "Invalid access to organization" + FarmCreatedResponse: + description: "created" + headers: + Location: + schema: + description: "The uri of the newly created resource" + type: "string" + format: "url" + example: "https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" + FarmReturned: + description: "Success" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GetFarm" examples: No Header: description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms" - total: 2 values: - name: "FarmName" clientUri: "https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274," @@ -323,16 +345,20 @@ components: uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients" - rel: "owningOrganization" uri: "https://sandboxapi.deere.com/platform/organizations/6789" - FarmReturned: - description: "Success" + FarmsReturned: + description: "Array of farms containing links related to assets" content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/GetFarm" + $ref: "#/components/schemas/GetFarms" examples: No Header: description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms" + total: 2 values: - name: "FarmName" clientUri: "https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274," @@ -347,46 +373,20 @@ components: uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients" - rel: "owningOrganization" uri: "https://sandboxapi.deere.com/platform/organizations/6789" - FarmCreatedResponse: - description: "created" - headers: - Location: - schema: - description: "The uri of the newly created resource" - type: "string" - format: "url" - example: "https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" - DeletedResponse: - description: "Deleted" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - total: - type: "integer" - example: 1 - format: "int32" - examples: - Headers: - description: "204 No Content" - UpdatedResponse: - description: "Updated" - DoesNotHaveAccessResponse: - description: "Does not have access" - DoesNotHaveAccessToOrg: - description: "Invalid access to organization" HasNotChanged: description: "Content has not changed since last call" - OrgNotFound: - description: "Organization not found" - OrgOrFarmNotFound: - description: "Organization or farm not found" MalformedRequest: description: "Request Validation failure." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/MalformedRequestError" + OrgNotFound: + description: "Organization not found" + OrgOrFarmNotFound: + description: "Organization or farm not found" + UpdatedResponse: + description: "Updated" schemas: Clients: type: "object" @@ -420,28 +420,6 @@ components: type: "string" description: "The last time the farm was modified." example: "2020-09-21T15:41:15.205Z" - GetFarms: - type: "object" - properties: - total: - type: "integer" - example: 1 - format: "int32" - links: - type: "array" - items: - type: "object" - properties: - rel: - type: "string" - example: "self" - uri: - type: "string" - example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/" - values: - type: "array" - items: - $ref: "#/components/schemas/GetFarm" GetFarm: type: "object" properties: @@ -481,24 +459,31 @@ components: uri: type: "string" example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + GetFarms: + type: "object" + properties: + total: + type: "integer" + example: 1 + format: "int32" + links: + type: "array" + items: + type: "object" + properties: + rel: + type: "string" + example: "self" + uri: + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/" + values: + type: "array" + items: + $ref: "#/components/schemas/GetFarm" GroupLink: description: "Link to another resource" type: "object" - PostFarm: - type: "object" - properties: - name: - x-required-boolean: true - type: "string" - example: "John Doe" - archived: - type: "boolean" - example: false - clientUri: - x-required-boolean: true - description: "Link to client resource" - type: "string" - example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d" MalformedRequestError: type: "object" properties: @@ -528,3 +513,18 @@ components: otherAttributes: type: "object" example: {} + PostFarm: + type: "object" + properties: + name: + x-required-boolean: true + type: "string" + example: "John Doe" + archived: + type: "boolean" + example: false + clientUri: + x-required-boolean: true + description: "Link to client resource" + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d" diff --git a/specs/fixed/field-operations-api.yaml b/specs/fixed/field-operations-api.yaml index a6075ea..ec3cf33 100644 --- a/specs/fixed/field-operations-api.yaml +++ b/specs/fixed/field-operations-api.yaml @@ -18,47 +18,53 @@ servers: - "partnerapiqa" - "sandboxapiqa" paths: - /organizations/{orgId}/fields/{fieldId}/fieldOperations: + /fieldOperations/{operationId}: get: - summary: "List Field Operations" - description: "This resource returns logical data structures representing the agronomic operations performed in a field. Supported field operation types include Seeding, Application, and Harvest. A single field operation may potentially span consecutive days depending on the type of operation. Each field operation may have one or more measurements, listed as links from the field operation itself. Each field operation will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation." + summary: "View a Field Operation" + description: "View a single field operation. The response will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation." parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/FieldId" - - $ref: "#/components/parameters/CropSeason" - - $ref: "#/components/parameters/FieldOperationType" - - $ref: "#/components/parameters/StartDate" - - $ref: "#/components/parameters/EndDate" + - $ref: "#/components/parameters/OperationId" - $ref: "#/components/parameters/FieldEmbed" - - $ref: "#/components/parameters/WorkPlanIds" - - $ref: "#/components/parameters/X-deere-signature" security: - OAuth2: - "ag2" responses: "200": - $ref: "#/components/responses/FieldOperations" + $ref: "#/components/responses/FieldOperationId" "403": $ref: "#/components/responses/DoesNotHaveAccessToFieldOperations" "404": - $ref: "#/components/responses/RequestedResourceNotFound" - /fieldOperations/{operationId}: + $ref: "#/components/responses/InputFieldOperationValueIsInvalid" + /fieldOperations/{operationId}/measurementTypes: get: - summary: "View a Field Operation" - description: "View a single field operation. The response will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation." + summary: "Field Operation Measurements" + description: "Field Operations include a variety of measurements collected when the operation is performed in the field. This endpoint returns an array of measurement types available for a given field operation. Two categories of measurements are available today: Target: Target measurements refer to what the machine or implement attempted to perform in the field. Result: Result measurements refer to what the machine or implement actually accomplished in the field. For example, the SeedingRateTarget measurement describes the rate at which the equipment attempted to plant seeds, while the SeedingRateResult measurement describes the rate at which seeds were actually planted by the equipment. Target measurements may be consistent throughout the entire operation (the operator may have applied a single rate across an entire field) but result measurements will vary during the operation as they account for machine error, operator error, and environmental factors. The difference in rate and location are easily visible in the associated map image. Note: The values included in the responses will depend on their availability as well as the field operation type (Seeding, Application Tank Mix, Application Single Product, Harvest Yield Contour, or Harvest Yield Result). Please refer . \"carting\" operations as well as construction operations \"constructionmilling\", \"constructionpaving\", \"constructioncompacting\", \"constructioncrushing\", \"constructionstabilizingrecycling\" are not supported at this time." parameters: - $ref: "#/components/parameters/OperationId" - - $ref: "#/components/parameters/FieldEmbed" + - $ref: "#/components/parameters/MeasurementType_MeasurementType" security: - OAuth2: - "ag2" responses: "200": - $ref: "#/components/responses/FieldOperationId" + $ref: "#/components/responses/FieldOperationMeasurement" "403": - $ref: "#/components/responses/DoesNotHaveAccessToFieldOperations" + $ref: "#/components/responses/DoesNotHaveAccessToFieldOperationMeasurements" "404": - $ref: "#/components/responses/InputFieldOperationValueIsInvalid" + $ref: "#/components/responses/InputOrganizationOrFieldOperationIsInvalid" + /fieldOperations/{operationId}/measurementTypes/{measurementType}: + get: + summary: "Field Operation Measurement" + description: "Field Operations include a variety of measurements collected when the operation is performed in the field. This endpoint returns an array of measurement types available for a given field operation. Two categories of measurements are available today: Target: Target measurements refer to what the machine or implement attempted to perform in the field. Result: Result measurements refer to what the machine or implement actually accomplished in the field. For example, the SeedingRateTarget measurement describes the rate at which the equipment attempted to plant seeds, while the SeedingRateResult measurement describes the rate at which seeds were actually planted by the equipment. Target measurements may be consistent throughout the entire operation (the operator may have applied a single rate across an entire field) but result measurements will vary during the operation as they account for machine error, operator error, and environmental factors. The difference in rate and location are easily visible in the associated map image. Note: The values included in the responses will depend on their availability as well as the field operation type (Seeding, Application Tank Mix, Application Single Product, Harvest Yield Contour, or Harvest Yield Result). To view the different responses for each field operation type, view the documentation above. Please refer Note: This API has two possible accept headers. One will give a response with totals, and the other will give a response with a Base64 encoded image. For the image layer, A map image is available for each measurement offering a visual depiction of the data. Argonomic data points are grouped either by label (such as variety name) or numerical range, and this information provided in the JSON response as a map legend." + parameters: + - $ref: "#/components/parameters/OperationId" + - $ref: "#/components/parameters/MeasurementType_MeasurementType" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/responses/FieldOperationMeasurementOrImage_MeasurementType" /fieldOps/{operationId}: get: summary: "Asynchronous Shapefile Download" @@ -84,64 +90,61 @@ paths: $ref: "#/components/responses/InputFieldOperationValueIsInvalid" "406": $ref: "#/components/responses/RequestHasNotBeenAccepted" + /organizations/{orgId}/fields/{fieldId}/fieldOperations: + get: + summary: "List Field Operations" + description: "This resource returns logical data structures representing the agronomic operations performed in a field. Supported field operation types include Seeding, Application, and Harvest. A single field operation may potentially span consecutive days depending on the type of operation. Each field operation may have one or more measurements, listed as links from the field operation itself. Each field operation will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation." + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/CropSeason" + - $ref: "#/components/parameters/FieldOperationType" + - $ref: "#/components/parameters/StartDate" + - $ref: "#/components/parameters/EndDate" + - $ref: "#/components/parameters/FieldEmbed" + - $ref: "#/components/parameters/WorkPlanIds" + - $ref: "#/components/parameters/X-deere-signature" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/responses/FieldOperations" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToFieldOperations" + "404": + $ref: "#/components/responses/RequestedResourceNotFound" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag2: "ag2" parameters: - OrgId: - name: "orgId" - in: "path" - description: "Owning Organization ID" - x-required-boolean: true + Accept-UOM-System: + name: "Accept-UOM-System" + in: "header" + description: "Unit of measure system to use for numeric values in the shapefiles. Accepted values are \"METRIC\", \"ENGLISH\", and \"MIXED\".If this header is not specified, the unit system will be determined by the organization preference of the owning organization.For all unit systems, the units are consistent with ." schema: type: "string" - format: "int64" - example: 12345 - FieldId: - name: "fieldId" - in: "path" - x-required-boolean: true - description: "Field ID" + example: "METRIC" + Accept-UOM-System_MeasurementType: + name: "Accept-UOM-System" + in: "header" + description: "Desired unit system. Takes ENGLISH or METRIC." schema: type: "string" - format: "guid" - example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" - OperationId: - name: "operationId" - in: "path" - x-required-boolean: true - description: "Operation ID" + example: "ENGLISH" + Accept-Yield-Preference: + name: "Accept-Yield-Preference" + in: "header" + description: "Desired yield representation (unit) type. Accepted values are VOLUME or MASS." + x-required-boolean: false schema: type: "string" - example: "MTIzNF81NjFiZGY1" - WorkNoteId: - name: "workNoteId" - in: "path" - x-required-boolean: true - description: "The identifier for a work note. The work note id will be used to identify unique work notes." + example: "VOLUME" + Accept-Yield-Preference_MeasurementType: + name: "Accept-Yield-Preference" + in: "header" + description: "Desired yield representation (unit) type. Takes VOLUME or MASS." schema: type: "string" - format: "guid" - example: "306d497f-e5e1-4921-8841-3c5f582e3a2e" - MeasurementType: - name: "measurementType" - in: "path" - description: "The measurementType within field operation by machine" - x-required-boolean: true - schema: - $ref: "#/components/schemas/FieldOperationMeasurementTypesEnum" - OperationLayerName: - name: "layerName" - in: "path" - description: "The operation layer name for a given field operation" - x-required-boolean: true - schema: - $ref: "#/components/schemas/FieldOperationLayersEnum" + example: "MASS" CompareType: in: "path" x-required-boolean: true @@ -151,56 +154,15 @@ components: type: "string" enum: - "dataAnalysis" - FieldOperationType: - in: "query" - name: "fieldOperationType" - description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"." - schema: - $ref: "#/components/schemas/FieldOperationTypesEnum" - FieldOperationTypes: - name: "fieldOperationTypes" - in: "query" - description: "The type of operations. If the request param is not supplied, no filtering by fieldOperationType will happen" - schema: - type: "array" - items: - $ref: "#/components/schemas/FieldOperationTypesEnum" - FieldEmbed: - in: "query" - name: "embed" - description: "List available operation measurement types and totals." - schema: - type: "array" - items: - type: "string" - enum: - - "measurementTypes" - WorkPlanIds: - name: "workPlanIds" + Contour: + name: "contour" in: "query" - description: "Query by one or more workPlanIds(comma separated)" - x-required-boolean: false - schema: - type: "List Of GUID" - example: "[\"d6166574-4ede-404e-8a68-85d4284b869d\"]" - X-deere-signature: - name: "x-deere-signature" - in: "header" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." - x-required-boolean: false - schema: - type: "string" - example: "520122365ebb4870a344784570d202c7" - RoundMeasurements: - description: "Set to true for standard Deere rounded measurements. Set to false for not rounded measurements." - in: "header" - name: "Round-Measurements" + description: "A percentage value representing how much smoothing/contouring will be applied to the image. Higher numbers mean more contouring." schema: - default: true - enum: - - true - - false - type: "boolean" + type: "number" + minimum: 0 + maximum: 100 + example: 50.37 CropSeason: in: "query" name: "cropSeason" @@ -213,57 +175,6 @@ components: description: "Retrieve operations for a specific crop seasons (years)." schema: $ref: "#/components/schemas/CropSeasons" - SplitShapeFile: - name: "splitShapeFile" - in: "query" - description: "If true, this will download the shapefile in small 20MB pieces" - schema: - type: "boolean" - example: "false" - ShapeType: - name: "shapeType" - in: "query" - description: "Choose between point-based and polygon-based shapefiles. Accepted values are \"Point\" and \"Polygon\"." - schema: - type: "string" - example: "Polygon" - enum: - - "Point" - - "Polygon" - Resolution: - name: "resolution" - in: "query" - description: "Choose a data resolution for the shapefile. Accepted values are \"EachSection\", \"EachSensor\", and \"OneHertz\"." - schema: - type: "string" - example: "EachSensor" - enum: - - "EachSection" - - "EachSensor" - - "OneHertz" - Accept-UOM-System: - name: "Accept-UOM-System" - in: "header" - description: "Unit of measure system to use for numeric values in the shapefiles. Accepted values are \"METRIC\", \"ENGLISH\", and \"MIXED\".If this header is not specified, the unit system will be determined by the organization preference of the owning organization.For all unit systems, the units are consistent with ." - schema: - type: "string" - example: "METRIC" - Accept-Yield-Preference: - name: "Accept-Yield-Preference" - in: "header" - description: "Desired yield representation (unit) type. Accepted values are VOLUME or MASS." - x-required-boolean: false - schema: - type: "string" - example: "VOLUME" - StartDate: - in: "query" - name: "startDate" - description: "Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive." - schema: - type: "string" - format: "date-time" - example: "2018-04-25T15:18:15.205Z" EndDate: name: "endDate" in: "query" @@ -272,35 +183,35 @@ components: type: "string" format: "date-time" example: "2018-04-26T15:18:15.205Z" - Contour: - name: "contour" + FieldEmbed: in: "query" - description: "A percentage value representing how much smoothing/contouring will be applied to the image. Higher numbers mean more contouring." + name: "embed" + description: "List available operation measurement types and totals." schema: - type: "number" - minimum: 0 - maximum: 100 - example: 50.37 - FieldOperationsEmbed: + type: "array" + items: + type: "string" + enum: + - "measurementTypes" + FieldId: + name: "fieldId" + in: "path" + x-required-boolean: true + description: "Field ID" + schema: + type: "string" + format: "guid" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + FieldOperationLayerLegendEmbed: name: "embed" in: "query" description: "Include additional subelements in response." - x-required-boolean: false schema: type: "array" items: type: "string" enum: - - "measurementTypes" - - "client" - - "farm" - - "field" - - "fieldOperationMachines" - - "workNotes" - - "crops" - - "refreshInProgress" - - "fieldOperationWorkNotes" - - "operationLayers" + - "image" FieldOperationMachineEmbed: name: "embed" in: "query" @@ -311,16 +222,63 @@ components: type: "string" enum: - "machine" - FieldOperationLayerLegendEmbed: + FieldOperationType: + in: "query" + name: "fieldOperationType" + description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"CARTING\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"." + schema: + $ref: "#/components/schemas/FieldOperationTypesEnum" + FieldOperationTypes: + name: "fieldOperationTypes" + in: "query" + description: "The type of operations. If the request param is not supplied, no filtering by fieldOperationType will happen" + schema: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationTypesEnum" + FieldOperationsEmbed: name: "embed" in: "query" description: "Include additional subelements in response." + x-required-boolean: false schema: type: "array" items: type: "string" enum: - - "image" + - "measurementTypes" + - "client" + - "farm" + - "field" + - "fieldOperationMachines" + - "workNotes" + - "crops" + - "refreshInProgress" + - "fieldOperationWorkNotes" + - "operationLayers" + MeasurementType: + name: "measurementType" + in: "path" + description: "The measurementType within field operation by machine" + x-required-boolean: true + schema: + $ref: "#/components/schemas/FieldOperationMeasurementTypesEnum" + MeasurementType_MeasurementType: + name: "measurementType" + in: "path" + description: "Measurement Type" + x-required-boolean: false + schema: + example: "HarvestYield" + type: "string" + OperationId: + name: "operationId" + in: "path" + x-required-boolean: true + description: "Operation ID" + schema: + type: "string" + example: "MTIzNF81NjFiZGY1" OperationIds: name: "operationIds" in: "query" @@ -331,27 +289,94 @@ components: items: type: "string" example: "306d497f-e5e1-4921-8841-3c5f582e3a2e" - requestBodies: - FieldOperationLayerImageRequest: + OperationLayerName: + name: "layerName" + in: "path" + description: "The operation layer name for a given field operation" x-required-boolean: true - description: "Request body for generating an image for a field operation layer." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/FieldOperationLayerImageRequest" - examples: - RequestImageWithLegend: - summary: "Requesting an image using a legend" - value: - ranges: - - minimum: 13.15 - maximum: 17.95 - hexColor: "#cc0000" - percent: 0.15 - - minimum: 0 - maximum: 13.14 - hexColor: "#cc00aa" - percent: 0.85 + schema: + $ref: "#/components/schemas/FieldOperationLayersEnum" + OrgId: + name: "orgId" + in: "path" + description: "Owning Organization ID" + x-required-boolean: true + schema: + type: "string" + format: "int64" + example: 12345 + Resolution: + name: "resolution" + in: "query" + description: "Choose a data resolution for the shapefile. Accepted values are \"EachSection\", \"EachSensor\", and \"OneHertz\"." + schema: + type: "string" + example: "EachSensor" + enum: + - "EachSection" + - "EachSensor" + - "OneHertz" + RoundMeasurements: + description: "Set to true for standard Deere rounded measurements. Set to false for not rounded measurements." + in: "header" + name: "Round-Measurements" + schema: + default: true + enum: + - true + - false + type: "boolean" + ShapeType: + name: "shapeType" + in: "query" + description: "Choose between point-based and polygon-based shapefiles. Accepted values are \"Point\" and \"Polygon\"." + schema: + type: "string" + example: "Polygon" + enum: + - "Point" + - "Polygon" + SplitShapeFile: + name: "splitShapeFile" + in: "query" + description: "If true, this will download the shapefile in small 20MB pieces" + schema: + type: "boolean" + example: "false" + StartDate: + in: "query" + name: "startDate" + description: "Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive." + schema: + type: "string" + format: "date-time" + example: "2018-04-25T15:18:15.205Z" + WorkNoteId: + name: "workNoteId" + in: "path" + x-required-boolean: true + description: "The identifier for a work note. The work note id will be used to identify unique work notes." + schema: + type: "string" + format: "guid" + example: "306d497f-e5e1-4921-8841-3c5f582e3a2e" + WorkPlanIds: + name: "workPlanIds" + in: "query" + description: "Query by one or more workPlanIds(comma separated)" + x-required-boolean: false + schema: + type: "List Of GUID" + example: "[\"d6166574-4ede-404e-8a68-85d4284b869d\"]" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + x-required-boolean: false + schema: + type: "string" + example: "520122365ebb4870a344784570d202c7" + requestBodies: FieldOperationCompareStatisticsRequest: x-required-boolean: true description: "Request to get comparison stats for field operations" @@ -378,6 +403,63 @@ components: - 10 - - -10 - -10 + FieldOperationLayerImageRequest: + x-required-boolean: true + description: "Request body for generating an image for a field operation layer." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FieldOperationLayerImageRequest" + examples: + RequestImageWithLegend: + summary: "Requesting an image using a legend" + value: + ranges: + - minimum: 13.15 + maximum: 17.95 + hexColor: "#cc0000" + percent: 0.15 + - minimum: 0 + maximum: 13.14 + hexColor: "#cc00aa" + percent: 0.85 + FieldOperationWorkNote: + x-required-boolean: true + description: "Payload for the FieldOperationWorkNote to create field operation work note." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + note: + type: "string" + example: "note1" + timestamp: + type: "string" + format: "date-time" + description: "Timestamp of the work note." + example: "2018-08-27T08:08:08.000Z" + gpsLocation: + description: "GPS location where the the work note was taken." + $ref: "#/components/schemas/Point" + FieldOperationWorkNoteUpdate: + x-required-boolean: true + description: "Payload for FieldOperationWorkNote to update field operation work note." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + note: + type: "string" + example: "note1" + SearchFieldOperations: + x-required-boolean: true + description: "Payload for the FieldOperationSearch to retrive field operations for provided organization, field ids and duration." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FieldOperationsSearch" UpdateFieldOperationLayerStatisticsRequest: x-required-boolean: true description: "See the examples for valid manual data edits. Data edits cannot be combined. Data edits may have cascading effects on layers and measurements not specified in the request. For synchronous edits, clients may fetch the Field Operation totals immediately to see the full impact. For asynchronous edits, clients may poll the Field Operation totals to wait for the specified value to be reflected. A status API may be added in the future." @@ -428,13 +510,6 @@ components: edited: false averageValue: edited: false - UpdateFieldOperationRequest: - x-required-boolean: true - description: "Update a field operation." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/UpdateFieldOperation" UpdateFieldOperationMachinesRequest: x-required-boolean: true description: "Update field operation machines." @@ -453,46 +528,24 @@ components: calibrationFactor: 0.75 - GUID: "6117580e-0222-4c06-96df-76a53451e69c" calibrationFactor: 1.05 - SearchFieldOperations: + UpdateFieldOperationRequest: x-required-boolean: true - description: "Payload for the FieldOperationSearch to retrive field operations for provided organization, field ids and duration." + description: "Update a field operation." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/FieldOperationsSearch" - FieldOperationWorkNote: - x-required-boolean: true - description: "Payload for the FieldOperationWorkNote to create field operation work note." - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - properties: - note: - type: "string" - example: "note1" - timestamp: - type: "string" - format: "date-time" - description: "Timestamp of the work note." - example: "2018-08-27T08:08:08.000Z" - gpsLocation: - description: "GPS location where the the work note was taken." - $ref: "#/components/schemas/Point" - FieldOperationWorkNoteUpdate: - x-required-boolean: true - description: "Payload for FieldOperationWorkNote to update field operation work note." - content: - application/vnd.deere.axiom.v3+json: - schema: - type: "object" - properties: - note: - type: "string" - example: "note1" - responses: - CropSeasonSummaries: - description: "A collection of field with crop season and FieldOprationType" + $ref: "#/components/schemas/UpdateFieldOperation" + responses: + CreatedWorkNote: + description: "Created work note" + headers: + Location: + description: "The uri of the newly created resource" + schema: + type: "string" + format: "uri" + CropSeasonSummaries: + description: "A collection of field with crop season and FieldOprationType" content: application/vnd.deere.axiom.v3+json: schema: @@ -511,8 +564,16 @@ components: type: "array" items: $ref: "#/components/schemas/CropSeasonSummary" - FieldOperations: - description: "A collection of field operations" + DoesNotHaveAccessToFieldOperation: + description: "The user has not been provided access to the field operation specified by id." + DoesNotHaveAccessToFieldOperationLayers: + description: "The user has not been provided access to the Field Operation Layers for this organization." + DoesNotHaveAccessToFieldOperationMeasurements: + description: "The user has not been provided access to the Field Operation Measurements for this organization." + DoesNotHaveAccessToFieldOperations: + description: "The user has not been provided access to the field operations for this organization." + FieldOperation: + description: "A field operation object" content: application/vnd.deere.axiom.v3+json: schema: @@ -531,121 +592,8 @@ components: type: "array" items: $ref: "#/components/schemas/FieldOperation" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 520122365ebb4870a344784570d202c7" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" - total: 2 - values: - - "@type": "FieldOperation" - fieldOperationType: "Tillage" - adaptMachineType: "unknown" - cropSeason: "2012" - modifiedTime: "2018-05-16T15:04:24.787Z" - startDate: "2012-04-03T14:12:13.000Z" - endDate: "2012-04-06T15:53:37.408Z" - fieldOperationMachines: - - "@type": "FieldOperationMachine" - erid: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" - machineId: 637795 - operators: - - "@type": "Operator" - operatorId: "OPERATOR_ID" - license: "OPERATOR_LICENSE" - name: "OPERATOR_NAME" - vin: "WXYEJKB73894JE3" - id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" - links: - - "@type": "Link" - rel: "organization" - uri: "https://sandboxapi.deere.com/platform/organizations/123456" - - "@type": "Link" - rel: "field" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" - - "@type": "Link" - rel: "measurementTypes" - uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" - - "@type": "Link" - rel: "client" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" - - "@type": "Link" - rel: "farm" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" - - "@type": "Link" - rel: "workPlans" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" - - "@type": "FieldOperation" - fieldOperationType: "application" - adaptMachineType: "unknown" - cropSeason: "2013" - modifiedTime: "2014-03-16T15:04:24.797Z" - startDate: "2013-07-03T16:36:08.000Z" - endDate: "2013-07-03T16:47:23.013Z" - products: - "@type": "Product" - name: "Tank Mix" - tankMix: true - rate: - "@type": "EventMeasurement" - value: 12.5 - unitId: "gal1ac-1" - carrier: - "@type": "Component" - name: "Water" - rate: - "@type": "EventMeasurement" - value: 12.5 - unitId: "gal1ac-1" - components: - - "@type": "Component" - name: "Touchdown Total" - rate: - "@type": "EventMeasurement" - value: 48 - unitId: "floz1ac-1" - - "@type": "Component" - name: "FS MaxSupreme" - rate: - "@type": "EventMeasurement" - value: 32 - unitId: "floz1ac-1" - id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" - links: - - "@type": "Link" - rel: "organization" - uri: "https://sandboxapi.deere.com/platform/organizations/123456" - - "@type": "Link" - rel: "field" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" - - "@type": "Link" - rel: "measurementTypes" - uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg/measurementTypes" - - "@type": "Link" - rel: "client" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" - - "@type": "Link" - rel: "farm" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" - - "@type": "Link" - rel: "shapeFile" - uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" - - "@type": "Link" - rel: "shapeFileAsync" - uri: "https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" - - "@type": "Link" - rel: "workPlans" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" - FieldOperation: - description: "A field operation object" + FieldOperationDataAnalysisStatistics: + description: "Field Operation Statistics broken down according to the legend for another context." content: application/vnd.deere.axiom.v3+json: schema: @@ -654,7 +602,7 @@ components: links: type: "array" items: - $ref: "#/components/schemas/LinkGETFieldOperations" + $ref: "#/components/schemas/Link" total: description: "Number of results in the list" type: "integer" @@ -663,7 +611,58 @@ components: values: type: "array" items: - $ref: "#/components/schemas/FieldOperation" + $ref: "#/components/schemas/MapRangeWithLayerStatistics" + examples: + YieldByVariety: + summary: "Yield by Variety statistics" + value: + links: + - rel: "self" + uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + total: 1 + values: + - "@type": "MapRangeWithLayerStatistics" + label: "Variety 1" + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 156.13 + unitId: "bu1ac-1" + - "@type": "MapRangeWithLayerStatistics" + label: "Variety 2" + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 184.17 + unitId: "bu1ac-1" + YieldBySeedingRate: + summary: "Yield by Seeding Rate statistics" + value: + links: + - rel: "self" + uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + total: 1 + values: + - "@type": "MapRangeWithLayerStatistics" + minimum: 13.15 + maximum: 17.95 + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 156.13 + unitId: "bu1ac-1" + - "@type": "MapRangeWithLayerStatistics" + minimum: 17.95 + maximum: 20.05 + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 184.17 + unitId: "bu1ac-1" FieldOperationId: description: "A field operation object" content: @@ -742,28 +741,115 @@ components: - "@type": "Link" rel: "workPlans" uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" - FieldOperationMachines: - description: "A collection of field operation machines" + FieldOperationLayerImage: + description: "An Object of Field Operation layer image" + headers: + x-minimum-longitude: + description: "The minimum longitude represented in the image" + schema: + type: "number" + format: "double" + example: -96.776622 + x-minimum-latitude: + description: "The minimum latitude represented in the image" + schema: + type: "number" + format: "double" + example: 40.282002 + x-maximum-longitude: + description: "The maximum longitude represented in the image" + schema: + type: "number" + format: "double" + example: -90.047496 + x-maximum-latitude: + description: "The maximum latitude represented in the image" + schema: + type: "number" + format: "double" + example: 43.542938 + content: + image/png: + x-zally-ignore: + - "D005" + - "D012" + schema: + type: "string" + format: "binary" + FieldOperationLayerLegend: + description: "An Object of Field Operation layer legend" content: application/vnd.deere.axiom.v3+json: schema: type: "object" properties: - links: + id: + $ref: "#/components/schemas/FieldOperationLayersEnum" + unitId: + type: "string" + description: "The unit associated to the quantity measured" + example: "gal1ac-1." + variableRepresentation: + type: "string" + example: "vrSolutionRateLiquid" + ranges: type: "array" items: - $ref: "#/components/schemas/Link" - total: + $ref: "#/components/schemas/MapRange" + image: + description: "embedable base64 encoded PNG image" + type: "object" + properties: + data: + type: "string" + example: "data:image/png;base64,{base64EncodedContent}" + extent: + $ref: "#/components/schemas/MapExtent" + examples: + HarvestYield: + summary: "Harvest yield map image and legends" + value: + id: "YieldByVolume" + unitId: "bu1ac-1" + variableRepresentation: "vrYieldVolumePerArea" + legends: + - "@type": "MapLegendItem" + hexColor: "#cc0000" + percent: 0.15 + minimum: 13.15 + maximum: 17.95 + - "@type": "MapLegendItem" + hexColor: "#cc0011" + percent: 0.15 + minimum: 11.15 + maximum: 19.95 + image: + data: "data:image/png;base64,{base64EncodedContent}" + extent: + minimumLatitude: 41.66470503009207 + maximumLatitude: 41.67086022030498 + minimumLongitude: -93.15582275390625 + maximumLongitude: -93.1475830078125 + FieldOperationLayerStatistics: + description: "An Object of Field Operation Statistics" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + total: description: "Number of results in the list" type: "integer" format: "int64" example: 70 values: - type: "array" - items: - $ref: "#/components/schemas/FieldOperationMachine" - FieldOperationWorkNotes: - description: "A collection of field operation work notes" + $ref: "#/components/schemas/FieldOperationLayerStatistics" + FieldOperationLayers: + description: "An Object of Field Operation Layers" content: application/vnd.deere.axiom.v3+json: schema: @@ -777,19 +863,34 @@ components: description: "Number of results in the list" type: "integer" format: "int64" - example: 10 + example: 70 values: - type: "array" - items: - $ref: "#/components/schemas/FieldOperationWorkNote" - FieldOperationWorkNote: - description: "A field operation work note object" - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/FieldOperationWorkNote" - FieldOperationMeasurements: - description: "A collection of Field Operation Measurements" + $ref: "#/components/schemas/FieldOperationLayers" + examples: + HarvestOperation: + summary: "Harvest OperationLayers" + value: + links: + - rel: "self" + uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + total: 2 + values: + - "@type": "FieldOperationLayer" + id: "YieldByVolume" + links: + - rel: "LayerImage" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/image" + - rel: "LayerLegend" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/legend" + - "@type": "FieldOperationLayer" + id: "Speed" + links: + - rel: "LayerImage" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/image" + - rel: "LayerLegend" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/legend" + FieldOperationMachines: + description: "A collection of field operation machines" content: application/vnd.deere.axiom.v3+json: schema: @@ -807,7 +908,18 @@ components: values: type: "array" items: - $ref: "#/components/schemas/FieldOperationMeasurement" + $ref: "#/components/schemas/FieldOperationMachine" + FieldOperationMeasurement: + description: "An object of Field Operation Measurements or image" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 FieldOperationMeasurementOrImage: description: "An object of Field Operation Measurements or image" content: @@ -820,35 +932,38 @@ components: application/vnd.deere.axiom.v3.location+tif+json: schema: $ref: "#/components/schemas/FieldOperationGeoTIFFLocation" - FieldOperationLayerStatistics: - description: "An Object of Field Operation Statistics" + FieldOperationMeasurementOrImage_MeasurementType: + description: "An object of Field Operation Measurements or image" content: application/vnd.deere.axiom.v3+json: + note: 123 + summary: "Field Operation Measurement" + description: "Field Operations" schema: - type: "object" + summary: "Field Operation Measurement" + description: "Field Operations" properties: links: type: "array" items: - $ref: "#/components/schemas/Link" + $ref: "#/components/schemas/LinksGet" total: description: "Number of results in the list" type: "integer" format: "int64" example: 70 values: - $ref: "#/components/schemas/FieldOperationLayerStatistics" - FieldOperationDataAnalysisStatistics: - description: "Field Operation Statistics broken down according to the legend for another context." - content: - application/vnd.deere.axiom.v3+json: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationMeasurementType" + application/vnd.deere.axiom.v3.image+json: schema: type: "object" properties: links: type: "array" items: - $ref: "#/components/schemas/Link" + $ref: "#/components/schemas/LinksGet" total: description: "Number of results in the list" type: "integer" @@ -857,60 +972,81 @@ components: values: type: "array" items: - $ref: "#/components/schemas/MapRangeWithLayerStatistics" + $ref: "#/components/schemas/FieldOperationMeasurement_MeasurementType" examples: - YieldByVariety: - summary: "Yield by Variety statistics" + application/vnd.deere.axiom.v3+json: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" value: + "@type": "FieldOperationMeasurement" + measurementName: "TillageDepthTarget" + measurementCategory: "Target" + area: + "@type": "EventMeasurement" + value: 0.72 + unitId: "ha" + averageDepth: + "@type": "EventMeasurement" + value: 15.24 + unitId: "cm" links: - - rel: "self" - uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" - total: 1 - values: - - "@type": "MapRangeWithLayerStatistics" - label: "Variety 1" - statistics: - "@type": "LayerStatistics" - averageValue: - "@type": "EventMeasurement" - value: 156.13 - unitId: "bu1ac-1" - - "@type": "MapRangeWithLayerStatistics" - label: "Variety 2" - statistics: - "@type": "LayerStatistics" - averageValue: - "@type": "EventMeasurement" - value: 184.17 - unitId: "bu1ac-1" - YieldBySeedingRate: - summary: "Yield by Seeding Rate statistics" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "mapImage" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + application/vnd.deere.axiom.v3.image+json: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3.image+json" value: - links: - - rel: "self" - uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" - total: 1 - values: - - "@type": "MapRangeWithLayerStatistics" - minimum: 13.15 - maximum: 17.95 - statistics: - "@type": "LayerStatistics" - averageValue: - "@type": "EventMeasurement" - value: 156.13 - unitId: "bu1ac-1" - - "@type": "MapRangeWithLayerStatistics" - minimum: 17.95 - maximum: 20.05 - statistics: - "@type": "LayerStatistics" - averageValue: - "@type": "EventMeasurement" - value: 184.17 - unitId: "bu1ac-1" - FieldOperationLayers: - description: "An Object of Field Operation Layers" + name: "fieldOperationMapImage" + declaredType: "com.deere.api.axiom.generated.v3.FieldOperationMapImage" + scope: "javax.xml.bind.JAXBElement$GlobalScope" + value: + image: "data:image/png;base64..." + legend: + "@type": "MapLegend" + unitId: "cm" + ranges: + - "@type": "MapLegendItem" + label: "15" + hexColor: "#4B0082" + percent: 1 + extent: + "@type": "MapExtent" + minimumLatitude: 41.66625903184001 + maximumLatitude: 41.669542228078 + minimumLongitude: -93.15431597923825 + maximumLongitude: -93.15009035584056 + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + - "@type": "Link" + rel: "measurementType" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + nil: false + globalScope: true + typeSubstituted: false + FieldOperationMeasurements: + description: "A collection of Field Operation Measurements" content: application/vnd.deere.axiom.v3+json: schema: @@ -926,271 +1062,267 @@ components: format: "int64" example: 70 values: - $ref: "#/components/schemas/FieldOperationLayers" + type: "array" + items: + $ref: "#/components/schemas/FieldOperationMeasurement" + FieldOperationMeasurements_MeasurementType: + description: "A collection of Field Operation Measurements" + content: + application/vnd.deere.axiom.v3.image+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/LinksGet" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationMeasurement_MeasurementType" examples: - HarvestOperation: - summary: "Harvest OperationLayers" + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" value: - links: - - rel: "self" - uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" - total: 2 - values: - - "@type": "FieldOperationLayer" - id: "YieldByVolume" - links: - - rel: "LayerImage" - uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/image" - - rel: "LayerLegend" - uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/legend" - - "@type": "FieldOperationLayer" - id: "Speed" - links: - - rel: "LayerImage" - uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/image" - - rel: "LayerLegend" - uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/legend" - FieldOperationLayerLegend: - description: "An Object of Field Operation layer legend" + name: "fieldOperationMapImage" + declaredType: "com.deere.api.axiom.generated.v3.FieldOperationMapImage" + scope: "javax.xml.bind.JAXBElement$GlobalScope" + value: + image: "data:image/png;base64..." + legend: + "@type": "MapLegend" + unitId: "cm" + ranges: + - "@type": "MapLegendItem" + label: "15" + hexColor: "#4B0082" + percent: 1 + extent: + "@type": "MapExtent" + minimumLatitude: 41.66625903184001 + maximumLatitude: 41.669542228078 + minimumLongitude: -93.15431597923825 + maximumLongitude: -93.15009035584056 + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + - "@type": "Link" + rel: "measurementType" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + nil: false + globalScope: true + typeSubstituted: false + FieldOperationWorkNote: + description: "A field operation work note object" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FieldOperationWorkNote" + FieldOperationWorkNotes: + description: "A collection of field operation work notes" content: application/vnd.deere.axiom.v3+json: schema: type: "object" properties: - id: - $ref: "#/components/schemas/FieldOperationLayersEnum" - unitId: - type: "string" - description: "The unit associated to the quantity measured" - example: "gal1ac-1." - variableRepresentation: - type: "string" - example: "vrSolutionRateLiquid" - ranges: + links: type: "array" items: - $ref: "#/components/schemas/MapRange" - image: - description: "embedable base64 encoded PNG image" - type: "object" - properties: - data: - type: "string" - example: "data:image/png;base64,{base64EncodedContent}" - extent: - $ref: "#/components/schemas/MapExtent" - examples: - HarvestYield: - summary: "Harvest yield map image and legends" - value: - id: "YieldByVolume" - unitId: "bu1ac-1" - variableRepresentation: "vrYieldVolumePerArea" - legends: - - "@type": "MapLegendItem" - hexColor: "#cc0000" - percent: 0.15 - minimum: 13.15 - maximum: 17.95 - - "@type": "MapLegendItem" - hexColor: "#cc0011" - percent: 0.15 - minimum: 11.15 - maximum: 19.95 - image: - data: "data:image/png;base64,{base64EncodedContent}" - extent: - minimumLatitude: 41.66470503009207 - maximumLatitude: 41.67086022030498 - minimumLongitude: -93.15582275390625 - maximumLongitude: -93.1475830078125 - FieldOperationLayerImage: - description: "An Object of Field Operation layer image" - headers: - x-minimum-longitude: - description: "The minimum longitude represented in the image" - schema: - type: "number" - format: "double" - example: -96.776622 - x-minimum-latitude: - description: "The minimum latitude represented in the image" - schema: - type: "number" - format: "double" - example: 40.282002 - x-maximum-longitude: - description: "The maximum longitude represented in the image" - schema: - type: "number" - format: "double" - example: -90.047496 - x-maximum-latitude: - description: "The maximum latitude represented in the image" - schema: - type: "number" - format: "double" - example: 43.542938 + $ref: "#/components/schemas/Link" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 10 + values: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationWorkNote" + FieldOperations: + description: "A collection of field operations" content: - image/png: - x-zally-ignore: - - "D005" - - "D012" + application/vnd.deere.axiom.v3+json: schema: - type: "string" - format: "binary" + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/LinkGETFieldOperations" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + type: "array" + items: + $ref: "#/components/schemas/FieldOperation" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 520122365ebb4870a344784570d202c7" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" + total: 2 + values: + - "@type": "FieldOperation" + fieldOperationType: "Tillage" + adaptMachineType: "unknown" + cropSeason: "2012" + modifiedTime: "2018-05-16T15:04:24.787Z" + startDate: "2012-04-03T14:12:13.000Z" + endDate: "2012-04-06T15:53:37.408Z" + fieldOperationMachines: + - "@type": "FieldOperationMachine" + erid: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + machineId: 637795 + operators: + - "@type": "Operator" + operatorId: "OPERATOR_ID" + license: "OPERATOR_LICENSE" + name: "OPERATOR_NAME" + vin: "WXYEJKB73894JE3" + id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" + links: + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" + - "@type": "Link" + rel: "measurementTypes" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + - "@type": "Link" + rel: "client" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + - "@type": "Link" + rel: "farm" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + - "@type": "Link" + rel: "workPlans" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + - "@type": "FieldOperation" + fieldOperationType: "application" + adaptMachineType: "unknown" + cropSeason: "2013" + modifiedTime: "2014-03-16T15:04:24.797Z" + startDate: "2013-07-03T16:36:08.000Z" + endDate: "2013-07-03T16:47:23.013Z" + products: + "@type": "Product" + name: "Tank Mix" + tankMix: true + rate: + "@type": "EventMeasurement" + value: 12.5 + unitId: "gal1ac-1" + carrier: + "@type": "Component" + name: "Water" + rate: + "@type": "EventMeasurement" + value: 12.5 + unitId: "gal1ac-1" + components: + - "@type": "Component" + name: "Touchdown Total" + rate: + "@type": "EventMeasurement" + value: 48 + unitId: "floz1ac-1" + - "@type": "Component" + name: "FS MaxSupreme" + rate: + "@type": "EventMeasurement" + value: 32 + unitId: "floz1ac-1" + id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + links: + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + - "@type": "Link" + rel: "measurementTypes" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg/measurementTypes" + - "@type": "Link" + rel: "client" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + - "@type": "Link" + rel: "farm" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + - "@type": "Link" + rel: "shapeFile" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + - "@type": "Link" + rel: "shapeFileAsync" + uri: "https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + - "@type": "Link" + rel: "workPlans" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + InputFieldOperationValueIsInvalid: + description: "The specified field operation does not exist." + InputOrgValueIsInvalid: + description: "The specified organization does not exist." + InputOrganizationOrFieldOperationIsInvalid: + description: "The specified organization or field operation does not exist." + InputOrganizationOrFieldOperationOrLayerIsInvalid: + description: "The specified organization, field operation, or layer does not exist." + InputOrganizationOrFieldOperationOrMeasurementIsInvalid: + description: "The specified organization, field operation, or measurement name does not exist." + InputOrganizationOrMeasurementTypeIsInvalid: + description: "The specified organization or measurement Type does not exist." + RedirectToPreSignedURL: + description: "Temporary Redirect. The location will be a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to that URL. Do not include an Authorization header in this request, as the authorization is provided via the pre-signed nature of the URL." RequestHasBeenAccepted: description: "Accepted" content: application/vnd.deere.axiom.v3+json: schema: type: "object" - UpdatedResponse: - description: "Updated successfully" RequestHasNotBeenAccepted: description: "Not Acceptable. Expected in case of TILLAGE operation." - RedirectToPreSignedURL: - description: "Temporary Redirect. The location will be a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to that URL. Do not include an Authorization header in this request, as the authorization is provided via the pre-signed nature of the URL." - DoesNotHaveAccessToFieldOperations: - description: "The user has not been provided access to the field operations for this organization." - DoesNotHaveAccessToFieldOperation: - description: "The user has not been provided access to the field operation specified by id." - DoesNotHaveAccessToFieldOperationMeasurements: - description: "The user has not been provided access to the Field Operation Measurements for this organization." - DoesNotHaveAccessToFieldOperationLayers: - description: "The user has not been provided access to the Field Operation Layers for this organization." - InputOrgValueIsInvalid: - description: "The specified organization does not exist." - InputFieldOperationValueIsInvalid: - description: "The specified field operation does not exist." RequestedOperationNotSupported: description: "The layer you are trying to edit cannot be edited." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/Errors" - InputOrganizationOrFieldOperationIsInvalid: - description: "The specified organization or field operation does not exist." - InputOrganizationOrMeasurementTypeIsInvalid: - description: "The specified organization or measurement Type does not exist." - InputOrganizationOrFieldOperationOrLayerIsInvalid: - description: "The specified organization, field operation, or layer does not exist." - InputOrganizationOrFieldOperationOrMeasurementIsInvalid: - description: "The specified organization, field operation, or measurement name does not exist." RequestedResourceNotFound: description: "The requested resource was not found." - CreatedWorkNote: - description: "Created work note" - headers: - Location: - description: "The uri of the newly created resource" - schema: - type: "string" - format: "uri" + UpdatedResponse: + description: "Updated successfully" schemas: - Operators: - type: "object" - description: "Operators that performed work using this machine" - properties: - operatorId: - type: "string" - description: "Unique identifier for this operator" - example: "657b4391-79b3-4012-a617-7ceba7111ad0" - name: - type: "string" - description: "Name of the operator" - example: "John Doe" - license: - type: "string" - description: "Operator license number" - example: "ABC123" - FieldOperationMachines: - type: "object" - description: "Machines utilized during this operation" - properties: - erid: - type: "string" - example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" - description: "Doc File based Field Operation Machine erid." - Operators: - $ref: "#/components/schemas/Operators" - machineId: - type: "integer" - description: "PrincipalId of the machine" - format: "int64" - example: 637795 - nullable: true - vin: - type: "string" - description: "VIN of the machine" - example: "WXYEJKB73894JE3" - LinkGETFieldOperations: - properties: - organization: - example: "https://sandboxapi.deere.com/platform/organizations/123456" - description: "Organizations Link." - field: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" - description: "Fields Link." - measurementTypes: - example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" - description: "Field Operation Measurements Link." - measurement: - example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" - description: "zero or more field operation measurements links. These will vary by the type of operation" - client: - example: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" - description: "Clients Link." - farm: - example: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" - description: "Farms Link." - shapeFileAsync: - example: "https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" - description: "Asynchronous Shapefiles Link." - workPlans: - example: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" - description: "Link to work plan associated to the operation." - LinkGETFieldOperationsId: - properties: - organization: - example: "https://sandboxapi.deere.com/platform/organizations/123456" - description: "Organizations Link." - field: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" - description: "Fields Link." - measurementTypes: - example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" - description: "Field Operation Measurements Link." - measurement: - example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" - description: "zero or more field operation measurements links. These will vary by the type of operation" - client: - example: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" - description: "Clients Link." - farm: - example: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" - description: "Farms Link." - Link: - type: "string" - properties: - uri: null - FieldLink: - type: "object" - description: "A link provides a URI to access resources that are related to the response." - properties: - rel: - type: "string" - description: "The relation of the object to the linked resource." - example: "field" - uri: - type: "string" - format: "uri" - description: "The URI to the related resource." - example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" - FieldOperationTypesEnum: + AgencyRegistrationNumber: type: "string" - description: "The type of operation" - example: "HARVEST" + description: "The product identifier managed by regulatory agency. e.g. EPA registration number of product issued by the US Environmental Protection Agency" + example: "0084229-00011-AA-0000000" Client: type: "object" description: "The client associated with this FieldOperation. Populated only when the associated embed is requested." @@ -1210,94 +1342,6 @@ components: archived: type: "boolean" example: false - Farm: - type: "object" - description: "The farm associated with this FieldOperation. Populated only when the associated embed is requested." - properties: - id: - type: "string" - description: "Globally unique identifier for this farm." - example: "4b781329-2f8c-4a68-98ce-8d5213fc8588" - links: - type: "array" - items: - $ref: "#/components/schemas/Link" - name: - type: "string" - description: "The name of the farm." - example: "My Custom Farm Name" - archived: - type: "boolean" - example: false - Field: - type: "object" - description: "The field associated with this FieldOperation. Populated only when the associated embed is requested." - properties: - id: - type: "string" - description: "Globally unique identifier for this field." - example: "5ef3b56c-c01d-4ce5-b630-bd1850e39c29" - links: - type: "array" - items: - $ref: "#/components/schemas/Link" - name: - type: "string" - description: "The name of the field." - example: "My Custom Field Name" - archived: - type: "boolean" - example: false - lastModifiedTime: - type: "string" - format: "date-time" - example: "2020-09-21T15:41:15.205Z" - OrgId: - type: "integer" - description: "The organization owning the fields and associated operations" - format: "int64" - example: 123456 - TankMixProduct: - type: "object" - properties: - guid: - $ref: "#/components/schemas/ProductErid" - tankMix: - type: "boolean" - description: "Flag indicating whether the product is a tank mix (true) or a single component (false)." - example: true - rate: - $ref: "#/components/schemas/EventMeasurement" - carrier: - $ref: "#/components/schemas/Component" - components: - type: "array" - items: - $ref: "#/components/schemas/Component" - NonTankMixProduct: - type: "object" - properties: - "@type": - type: "string" - example: "Product" - guid: - $ref: "#/components/schemas/ProductErid" - productType: - $ref: "#/components/schemas/FieldOperationProductTypesEnum" - name: - type: "string" - description: "The general name of the product, or 'Tank Mix' for a product consisting of multiple components in a carrier, for APPLICATION operations." - example: "Priaxor" - brand: - type: "string" - description: "The brand name of product." - example: "BrandForProducts" - agencyRegistrationNumber: - $ref: "#/components/schemas/AgencyRegistrationNumber" - tankMix: - type: "boolean" - description: "Flag indicating whether the product is a tank mix (true) or a single component (false)." - example: false Component: type: "object" description: "An individual product combined with others in a tank mix." @@ -1317,56 +1361,15 @@ components: $ref: "#/components/schemas/AgencyRegistrationNumber" rate: $ref: "#/components/schemas/EventMeasurement" - AgencyRegistrationNumber: - type: "string" - description: "The product identifier managed by regulatory agency. e.g. EPA registration number of product issued by the US Environmental Protection Agency" - example: "0084229-00011-AA-0000000" - JohnDeereDisplayTypeEnum: - type: "string" - description: "The type of display" - enum: - - "GS4_4600" - - "GS3_2630" - - "GS2_2600" - - "GS2_1800" - - "GS2_CommandCenter" ConnectMobileEnum: type: "string" description: "The type of display" enum: - "OneAppMobile" - ThirdPartyDisplayTypeEnum: - type: "string" - description: "The type of display" - enum: - - "IntegraVersa" - - "ProtobufV36" - - "ProtobufV41" - - "TrimbleFMX" - - "Unknown" - DisplayTypeEnum: - x-zally-ignore: - - "D012" - allOf: - - $ref: "#/components/schemas/JohnDeereDisplayTypeEnum" - - $ref: "#/components/schemas/ConnectMobileEnum" - - $ref: "#/components/schemas/ThirdPartyDisplayTypeEnum" - CropToken: - type: "string" - description: "- A unique textual identifier for a type of Crop - EnumList is based on ISG_Shared/blob/master/crops/crops.xml - You may use com.deere.ads.utility.CropTokenLookup in platform to retrieve crop ids." - example: "ALFALFA" CropSeason: type: "integer" description: "Filter results by crop season." example: 2016 - CropSeasons: - type: "array" - description: "The crop seasons (year) of the recent operation" - example: - - "2016" - - "2015" - items: - $ref: "#/components/schemas/CropSeason" CropSeasonSummary: type: "object" properties: @@ -1378,242 +1381,310 @@ components: $ref: "#/components/schemas/FieldOperationTypesEnum" cropSeasons: $ref: "#/components/schemas/CropSeasons" - FieldOperationProductTypesEnum: + CropSeasons: + type: "array" + description: "The crop seasons (year) of the recent operation" + example: + - "2016" + - "2015" + items: + $ref: "#/components/schemas/CropSeason" + CropToken: type: "string" - description: "FieldOperation Product Types TODO Enum" - enum: - - "OTHER" - - "CHEMICAL" - - "SEED" - - "FEED" - - "FERTILIZER" - FieldOperationMeasurementTypesEnum: + description: "- A unique textual identifier for a type of Crop - EnumList is based on ISG_Shared/blob/master/crops/crops.xml - You may use com.deere.ads.utility.CropTokenLookup in platform to retrieve crop ids." + example: "ALFALFA" + DisplayTypeEnum: + x-zally-ignore: + - "D012" allOf: - - type: "string" - description: "FieldOperation Measurement Types" - - $ref: "#/components/schemas/FieldOperationMeasurementTypesInFullRelease" - - $ref: "#/components/schemas/FieldOperationMeasurementTypesInAgreportsApi" - FieldOperationMeasurementTypesInFullRelease: - type: "string" - description: "FieldOperation Measurement Types supported in the HDP versions of the endpoints and therefore fully released." - enum: - - "SeedingRateTarget" - - "SeedingRateResult" - - "SeedingSpeedResult" - - "SeedingVarietiesTarget" - - "SeedingVarietiesResult" - - "ApplicationRateTarget" - - "ApplicationRateResult" - - "ApplicationSpeedResult" - - "HarvestYieldResult" - - "HarvestYieldContourResult" - - "HarvestSpecialtyGrossYieldResult" - - "HarvestWetMassResult" - - "HarvestMoistureResult" - - "HarvestTrashResult" - - "HarvestSpeedResult" - - "HarvestAdfResult" - - "HarvestNdfResult" - - "HarvestCrudeProteinResult" - - "HarvestStarchResult" - - "HarvestSugarResult" - - "TillageDepthResult" - - "TillagePressureResult" - - "TillageSpeedResult" - - "TillageDepthTarget" - - "TillagePressureTarget" - FieldOperationMeasurementTypesInAgreportsApi: - type: "string" - description: "FieldOperation Measurement Types supported in the Agreports/DataLake versions of the endpoints. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints." - enum: - - "ElevationResult" - - "ApplicationHeightTarget" - - "FuelRateResult" - - "WindSpeed" - - "AirTemperature" - - "TemperatureDifference" - - "RelativeHumidity" - - "SoilTemperature" - - "RatePrescription" - - "PressurePrescription" - - "DepthPrescription" - - "SeedDepthTarget" - - "SprayPressure" - - "InoculantDosing" - - "LengthOfCut" - - "GaugeWheelMargin" - - "DownforceResult" - - "RideQuality" - - "SeedSpacingVariation" - - "GroundContact" - - "Singulation" - - "SkyCondition" - - "SoilMoisture" - - "TargetQuality" - - "PrescriptionQuality" - FieldOperationMeasurementCategoryEnum: - type: "string" - description: "FieldOperation Measurement Category" - enum: - - "Target" - - "Result" - - "Prescription" - FieldOperationLayersEnum: - allOf: - - type: "string" - description: "Possible layerNames used in FieldOperation Layers and statistics. These are not 1-1 with FieldOperationMeasurementTypesEnum and are designed to be easier to understand." - - $ref: "#/components/schemas/FieldOperationMeasurementLayersEnum" - - $ref: "#/components/schemas/FieldOperationIndexLayersEnum" - - $ref: "#/components/schemas/FieldOperationCompositeLayersEnum" - FieldOperationMeasurementLayersEnum: - type: "string" - description: "Layers based on variable rate measurements recorded during the field operation. They will use EventMeasurementStats for statistics." - enum: - - "AreaWorked" - - "Speed" - - "Elevation" - - "FuelRate" - - "FuelConsumption" - - "DieselExhaustFluid" - - "EngineHours" - - "YieldByVolume" - - "YieldByMass" - - "WetMass" - - "Moisture" - - "Trash" - - "AcidDetergentFiber" - - "NeutralDetergentFiber" - - "CrudeProtein" - - "Starch" - - "Sugar" - - "RateResult" - - "RateTarget" - - "RatePrescription" - - "InoculantDosing" - - "LengthOfCut" - - "GaugeWheelMargin" - - "DownforceResult" - - "GroundContact" - - "RideQuality" - - "SeedSpacingVariation" - - "Singulation" - - "ApplicationHeight" - - "SprayPressure" - - "PressureTarget" - - "PressureResult" - - "PressurePrescription" - - "DepthResult" - - "DepthTarget" - - "DepthPrescription" - - "WindSpeed" - - "AirTemperature" - - "TemperatureDifference" - - "RelativeHumidity" - - "SoilTemperature" - FieldOperationIndexLayersEnum: - type: "string" - description: "Layers based on defined types recorded or entered during the field operation. They will use EventObservationStats for statistics." - enum: - - "RateResultByProduct" - - "RateTargetByProduct" - - "WindDirection" - - "SkyCondition" - - "SoilMoisture" - - "Varieties" - FieldOperationCompositeLayersEnum: - type: "string" - description: "Layers based on defined comparisons of other layers" - enum: - - "QualityTarget" - - "QualityPrescription" - FieldOperation: + - $ref: "#/components/schemas/JohnDeereDisplayTypeEnum" + - $ref: "#/components/schemas/ConnectMobileEnum" + - $ref: "#/components/schemas/ThirdPartyDisplayTypeEnum" + EridToEridEdit: type: "object" + description: "Describes an edit that should change the id of any object that matches the fromGuid" properties: - id: - type: "string" - description: "Field Operation ID" - example: "MjkyMDdfNT" - x-deere-signature: - type: "string" - example: "520122365ebb4870a344784570d202c7" - description: "A new x-deere-signature response header will be included if the response has changed since last api call." - fieldOperationType: - type: "string" - example: "application" - description: "Field Operation type." - cropSeason: - type: "string" - example: 2015 - description: "Crop season year." - adaptMachineType: + fromGuid: + $ref: "#/components/schemas/ProductErid" + toGuid: + $ref: "#/components/schemas/ProductErid" + Error: + type: "object" + properties: + guid: type: "string" - example: "unknown" - description: "The type of machine that generated the field operation. This may be \"unknown\"." - startDate: + format: "guid" + example: "11111111-2222-3333-4444-555555555555" + message: type: "string" - format: "date-time" - description: "Starting date and time of this field operation.." - example: "2015-05-29T22:00:19.200Z" - endDate: + description: "An english description of the error" + example: "was invalid because" + code: type: "string" - format: "date-time" - description: "Ending date and time of this field operation." - example: "2015-05-29T22:23:53.746Z" - modifiedTime: + description: "A string constant representing the type of error" + example: 400 + field: type: "string" - format: "date-time" - description: "Last time that anything was modified on this field operation." - example: "2016-04-29T22:12:53.446Z" - cropName: + description: "The name of the property or parameter deemed invalid" + example: "example-field" + invalidValue: type: "string" - format: "string" - description: "Crop Name." - example: "CORN_WET" - varieties: - type: "array" - example: "[ { \"@type\": \"Product\", \"productType\": \"SEED\", \"name\": \"aa1\", \"tankMix\": false } ]" - description: "List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix" - products: - example: "See sample response below." - description: "Details of the product applied during this field operation. Includes name, tankmix, rate, carrier, and components data." - name: + description: "The value that was supplied for this field in the request" + example: "Bad value" + Errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + EventMeasurement: + type: "object" + description: "A general representation of quantity and unit." + example: + "@type": "EventMeasurement" + value: 17.13 + unitId: "gal1ac-1" + properties: + "@type": type: "string" - example: "Tank Mix Use 1" - description: "Name of the tank mix" - tankMix: - type: "boolean" - example: true - description: "Boolean flag as to whether the application operation was for a tank mix or not." - rate: - example: "See sample response below." - description: "Rate of the application. Includes value and unitId data." + example: "EventMeasurement" value: type: "number" - example: 10 - description: "Numeric value." + format: "double" + description: "The quantity represented by this measurement." unitId: type: "string" - example: "gal1ac-1" - description: "Unit of value." - carrier: - example: "See sample response below." - description: "Data on the product carrier. Includes name and rate." - components: - example: "See sample response below." - description: "Data on the product component. Includes name and rate." - fieldOperationMachines: - type: "object" - $ref: "#/components/schemas/FieldOperationMachines" - measurementTypes: - type: "array" - description: "Embedded measurement data. Present only when the request passes ?embed=measurementTypes. JD's published OpenAPI spec omits this field; it is patched in via scripts/embed-contracts.yaml. Verified against real wire traces from the field-mcp probe on 2026-04-14.\n" - items: - $ref: "#/components/schemas/FieldOperationMeasurement" - x-embed-contract-applied: true - FieldOperationId: - type: "object" - properties: - orgId: + description: "The unit associated to the quantity measured" + example: "gal1ac-1." + variableRepresentation: + type: "string" + example: "vrSolutionRateLiquid" + edited: + type: "boolean" + description: "Indicates whether a manual data edit was directly applied to this value. If a data edit for a different layer affected this value, it *will not be set*. May not be serialized if false." + example: false + EventMeasurementStats: + type: "object" + description: "Relevant stats for a measurement recorded during the operation." + properties: + "@type": + type: "string" + example: "EventMeasurementStats" + areaRecorded: + $ref: "#/components/schemas/EventMeasurement" + averageValue: + $ref: "#/components/schemas/EventMeasurement" + totalValue: + $ref: "#/components/schemas/EventMeasurement" + minValue: + $ref: "#/components/schemas/EventMeasurement" + maxValue: + $ref: "#/components/schemas/EventMeasurement" + firstValue: + $ref: "#/components/schemas/EventMeasurement" + lastValue: + $ref: "#/components/schemas/EventMeasurement" + EventObservation: + type: "object" + description: "A general representation of an observed value." + properties: + "@type": + type: "string" + example: "EventObservation" + value: + type: "string" + description: "The observed value, e.g. NW wind direction." + example: "NW" + EventObservationStats: + type: "object" + description: "Relevant stats for the values for an observation during the operation." + properties: + areaRecorded: + $ref: "#/components/schemas/EventMeasurement" + firstObservation: + $ref: "#/components/schemas/EventObservation" + lastObservation: + $ref: "#/components/schemas/EventObservation" + predominantObservation: + $ref: "#/components/schemas/EventObservation" + Farm: + type: "object" + description: "The farm associated with this FieldOperation. Populated only when the associated embed is requested." + properties: + id: + type: "string" + description: "Globally unique identifier for this farm." + example: "4b781329-2f8c-4a68-98ce-8d5213fc8588" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + name: + type: "string" + description: "The name of the farm." + example: "My Custom Farm Name" + archived: + type: "boolean" + example: false + Field: + type: "object" + description: "The field associated with this FieldOperation. Populated only when the associated embed is requested." + properties: + id: + type: "string" + description: "Globally unique identifier for this field." + example: "5ef3b56c-c01d-4ce5-b630-bd1850e39c29" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + name: + type: "string" + description: "The name of the field." + example: "My Custom Field Name" + archived: + type: "boolean" + example: false + lastModifiedTime: + type: "string" + format: "date-time" + example: "2020-09-21T15:41:15.205Z" + FieldLink: + type: "object" + description: "A link provides a URI to access resources that are related to the response." + properties: + rel: + type: "string" + description: "The relation of the object to the linked resource." + example: "field" + uri: + type: "string" + format: "uri" + description: "The URI to the related resource." + example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + FieldOperation: + type: "object" + properties: + id: + type: "string" + description: "Field Operation ID" + example: "MjkyMDdfNT" + x-deere-signature: + type: "string" + example: "520122365ebb4870a344784570d202c7" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + fieldOperationType: + type: "string" + example: "application" + description: "Field Operation type." + cropSeason: + type: "string" + example: 2015 + description: "Crop season year." + adaptMachineType: + type: "string" + example: "unknown" + description: "The type of machine that generated the field operation. This may be \"unknown\"." + startDate: + type: "string" + format: "date-time" + description: "Starting date and time of this field operation.." + example: "2015-05-29T22:00:19.200Z" + endDate: + type: "string" + format: "date-time" + description: "Ending date and time of this field operation." + example: "2015-05-29T22:23:53.746Z" + modifiedTime: + type: "string" + format: "date-time" + description: "Last time that anything was modified on this field operation." + example: "2016-04-29T22:12:53.446Z" + cropName: + type: "string" + format: "string" + description: "Crop Name." + example: "CORN_WET" + varieties: + type: "array" + example: "[ { \"@type\": \"Product\", \"productType\": \"SEED\", \"name\": \"aa1\", \"tankMix\": false } ]" + description: "List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix" + products: + example: "See sample response below." + description: "Details of the product applied during this field operation. Includes name, tankmix, rate, carrier, and components data." + name: + type: "string" + example: "Tank Mix Use 1" + description: "Name of the tank mix" + tankMix: + type: "boolean" + example: true + description: "Boolean flag as to whether the application operation was for a tank mix or not." + rate: + example: "See sample response below." + description: "Rate of the application. Includes value and unitId data." + value: + type: "number" + example: 10 + description: "Numeric value." + unitId: + type: "string" + example: "gal1ac-1" + description: "Unit of value." + carrier: + example: "See sample response below." + description: "Data on the product carrier. Includes name and rate." + components: + example: "See sample response below." + description: "Data on the product component. Includes name and rate." + fieldOperationMachines: + type: "object" + $ref: "#/components/schemas/FieldOperationMachines" + measurementTypes: + type: "array" + description: "Embedded measurement data. Present only when the request passes ?embed=measurementTypes. JD's published OpenAPI spec omits this field; it is patched in via scripts/embed-contracts.yaml. Verified against real wire traces from the field-mcp probe on 2026-04-14.\n" + items: + $ref: "#/components/schemas/FieldOperationMeasurement" + x-embed-contract-applied: true + FieldOperationCompareStatisticsRequest: + type: "object" + required: + - "compareOperationIds" + - "baseLayer" + - "compareLayer" + properties: + compareOperationIds: + type: "array" + description: "The field operation ids that we are comparing so for Yield By Variety the target is the Seeding field operation(s)" + items: + type: "string" + example: "17826sd23-e5e1-4921-8841-3c5f582e3a2e" + baseLayer: + $ref: "#/components/schemas/FieldOperationLayersEnum" + compareLayer: + $ref: "#/components/schemas/FieldOperationLayersEnum" + boundary: + $ref: "#/components/schemas/Polygon" + FieldOperationCompositeLayersEnum: + type: "string" + description: "Layers based on defined comparisons of other layers" + enum: + - "QualityTarget" + - "QualityPrescription" + FieldOperationGeoTIFFLocation: + type: "object" + properties: + location: + description: "AWS S3 Presigned URL of Resource. Use gzip for best compression." + type: "string" + format: "uri" + example: "https://s3.us-east-2.amazonaws.com/s3-bucket-path/49f35d8a-ff54-4b83-81c4-0f45b7b47eba" + mapLegend: + $ref: "#/components/schemas/MapLegend" + extent: + $ref: "#/components/schemas/MapExtent" + FieldOperationId: + type: "object" + properties: + orgId: type: "string" description: "The organization ID." example: 1234 @@ -1652,24 +1723,67 @@ components: items: $ref: "#/components/schemas/FieldOperationMeasurement" x-embed-contract-applied: true - UpdateFieldOperation: + FieldOperationIndexLayersEnum: + type: "string" + description: "Layers based on defined types recorded or entered during the field operation. They will use EventObservationStats for statistics." + enum: + - "RateResultByProduct" + - "RateTargetByProduct" + - "WindDirection" + - "SkyCondition" + - "SoilMoisture" + - "Varieties" + FieldOperationLayer: type: "object" + required: + - "id" properties: - cropSeason: - $ref: "#/components/schemas/CropSeason" - cropName: - $ref: "#/components/schemas/CropToken" - varieties: + "@type": + type: "string" + example: "FieldOperationLayer" + id: + $ref: "#/components/schemas/FieldOperationLayersEnum" + links: type: "array" items: - oneOf: - - $ref: "#/components/schemas/NameToEridEdit" - - $ref: "#/components/schemas/EridToEridEdit" - product: - type: "object" - properties: - guid: - $ref: "#/components/schemas/ProductErid" + $ref: "#/components/schemas/Link" + FieldOperationLayerImageRequest: + type: "object" + properties: + ranges: + type: "array" + items: + $ref: "#/components/schemas/MapRange" + FieldOperationLayerStatistics: + description: "Includes the summarized values for all layers on a field operation" + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "FieldOperationLayerStatistics" + links: + description: "Links to associated data." + type: "array" + items: + $ref: "#/components/schemas/Link" + layerName: + $ref: "#/components/schemas/FieldOperationLayersEnum" + statistics: + $ref: "#/components/schemas/LayerStatistics" + FieldOperationLayers: + type: "array" + description: "Describe an reponse of operaton layers" + items: + $ref: "#/components/schemas/FieldOperationLayer" + FieldOperationLayersEnum: + allOf: + - type: "string" + description: "Possible layerNames used in FieldOperation Layers and statistics. These are not 1-1 with FieldOperationMeasurementTypesEnum and are designed to be easier to understand." + - $ref: "#/components/schemas/FieldOperationMeasurementLayersEnum" + - $ref: "#/components/schemas/FieldOperationIndexLayersEnum" + - $ref: "#/components/schemas/FieldOperationCompositeLayersEnum" FieldOperationMachine: type: "object" properties: @@ -1756,160 +1870,350 @@ components: type: "array" items: $ref: "#/components/schemas/Link" - UpdateFieldOperationMachine: + FieldOperationMachines: type: "object" + description: "Machines utilized during this operation" properties: erid: type: "string" example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" description: "Doc File based Field Operation Machine erid." - calibrationFactor: - type: "number" - format: "double" - description: "The calibration factor for this machine" - example: "1.25" - FieldOperationWorkNote: - type: "object" - required: - - "id" - - "note" - properties: - "@type": - type: "string" - example: "FieldOperationWorkNote" - id: - type: "string" - format: "guid" - example: "3df13267-c5ee-4cc3-ab79-7cf013dc1e98" - description: "eventId of the work note." - note: - type: "string" - example: "note1" - timestamp: + Operators: + $ref: "#/components/schemas/Operators" + machineId: + type: "integer" + description: "PrincipalId of the machine" + format: "int64" + example: 637795 + nullable: true + vin: type: "string" - format: "date-time" - description: "Timestamp of the work note." - example: "2018-08-27T08:08:08.000Z" - gpsLocation: - description: "GPS location where the the work note was taken." - $ref: "#/components/schemas/Point" - MapRangeForIndex: + description: "VIN of the machine" + example: "WXYEJKB73894JE3" + FieldOperationMeasurement: + allOf: + - description: "An object representing the measurements the API has decided are relevant to a particular map image." + - $ref: "#/components/schemas/FieldOperationMeasurementInFullRelease" + - $ref: "#/components/schemas/FieldOperationMeasurementFromAgreportsApi" + FieldOperationMeasurementCategoryEnum: + type: "string" + description: "FieldOperation Measurement Category" + enum: + - "Target" + - "Result" + - "Prescription" + FieldOperationMeasurementFromAgreportsApi: + description: "Properties added to FieldOperationMeasurement when trying to add the measurementTypes in FieldOperationMeasurementTypesInAgreportsApi via agreports-api. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints." type: "object" properties: - "@type": - type: "string" - example: "MapLegendItem" - label: - description: "The string label for this range. Used for images that are not based on numerical values" - type: "string" - example: "Variety 1" - hexColor: - description: "The color used in the image for this rage" - type: "string" - example: "#cc0000" - percent: - description: "The proportion of the field operation matching this range (not actually a percentage)." - type: "number" - format: "double" - example: 0.15 - key: - description: "This is a placeholder for various index key" - type: "integer" - format: "int64" - example: 55 - MapRangeForMeasurement: + elevation: + $ref: "#/components/schemas/EventMeasurementStats" + fuelRate: + $ref: "#/components/schemas/EventMeasurementStats" + applicationHeight: + $ref: "#/components/schemas/EventMeasurementStats" + windSpeed: + $ref: "#/components/schemas/EventMeasurementStats" + temperature: + $ref: "#/components/schemas/EventMeasurementStats" + temperatureDifference: + $ref: "#/components/schemas/EventMeasurementStats" + humidity: + $ref: "#/components/schemas/EventMeasurementStats" + windDirection: + $ref: "#/components/schemas/EventObservationStats" + skyCondition: + $ref: "#/components/schemas/EventObservationStats" + soilMoisture: + $ref: "#/components/schemas/EventObservationStats" + rate: + $ref: "#/components/schemas/EventMeasurementStats" + pressure: + $ref: "#/components/schemas/EventMeasurementStats" + depth: + $ref: "#/components/schemas/EventMeasurementStats" + dosing: + $ref: "#/components/schemas/EventMeasurementStats" + cutLength: + $ref: "#/components/schemas/EventMeasurementStats" + gaugeWheelMargin: + $ref: "#/components/schemas/EventMeasurementStats" + downforce: + $ref: "#/components/schemas/EventMeasurementStats" + groundContact: + $ref: "#/components/schemas/EventMeasurementStats" + rideQuality: + $ref: "#/components/schemas/EventMeasurementStats" + seedSpacingVariation: + $ref: "#/components/schemas/EventMeasurementStats" + singulation: + $ref: "#/components/schemas/EventMeasurementStats" + doubles: + $ref: "#/components/schemas/EventMeasurementStats" + skips: + $ref: "#/components/schemas/EventMeasurementStats" + yieldVolume: + $ref: "#/components/schemas/EventMeasurementStats" + quality: + $ref: "#/components/schemas/EventMeasurementStats" + FieldOperationMeasurementInFullRelease: type: "object" + description: "The fully released portion of the FieldOperationMeasurement." properties: + links: + type: "array" + items: + $ref: "#/components/schemas/Link" "@type": type: "string" - example: "MapLegendItem" - minimum: - description: "The inclusive minimum value included in this range" - type: "number" - format: "double" - example: 13.15 - maximum: - description: "The exclusive maximum value included in this range" - type: "number" - format: "double" - example: 17.95 - hexColor: - description: "The color used in the image for this rage" - type: "string" - example: "#cc0000" - percent: - description: "The proportion of the field operation matching this range (not actually a percentage)." - type: "number" - format: "double" - example: 0.15 - MapRangeForGeoTiff: - type: "object" + example: "FieldOperationMeasurement" + measurementName: + $ref: "#/components/schemas/FieldOperationMeasurementTypesEnum" + measurementCategory: + $ref: "#/components/schemas/FieldOperationMeasurementCategoryEnum" + area: + $ref: "#/components/schemas/EventMeasurement" + yield: + $ref: "#/components/schemas/EventMeasurement" + averageYield: + $ref: "#/components/schemas/EventMeasurement" + averageMoisture: + $ref: "#/components/schemas/EventMeasurement" + wetMass: + $ref: "#/components/schemas/EventMeasurement" + averageWetMass: + $ref: "#/components/schemas/EventMeasurement" + harvestLabAccumulatedWetMass: + $ref: "#/components/schemas/EventMeasurement" + averageSpeed: + $ref: "#/components/schemas/EventMeasurement" + totalMaterial: + $ref: "#/components/schemas/EventMeasurement" + averageMaterial: + $ref: "#/components/schemas/EventMeasurement" + averageDepth: + $ref: "#/components/schemas/EventMeasurement" + averagePressure: + $ref: "#/components/schemas/EventMeasurement" + averageTrash: + $ref: "#/components/schemas/EventMeasurement" + averageAcidDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + averageNeutralDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + averageStarch: + $ref: "#/components/schemas/EventMeasurement" + averageCrudeProtein: + $ref: "#/components/schemas/EventMeasurement" + averageSugar: + $ref: "#/components/schemas/EventMeasurement" + maxAcidDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + maxNeutralDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + maxStarch: + $ref: "#/components/schemas/EventMeasurement" + maxCrudeProtein: + $ref: "#/components/schemas/EventMeasurement" + maxSugar: + $ref: "#/components/schemas/EventMeasurement" + varietyTotals: + type: "array" + items: + $ref: "#/components/schemas/VarietyTotal" + productTotals: + type: "array" + items: + $ref: "#/components/schemas/ProductTotal" + applicationProductTotals: + type: "array" + description: "Present on ApplicationRateResult, ApplicationSpeedResult, and ApplicationRateTarget measurement entries. JD declares the outer `productTotals` and the inner `ProductTotal` but omits this intermediate layer. Verified in the field-mcp probe on 2026-04-14 (Atrazine application, org 7294700).\n" + items: + $ref: "#/components/schemas/ApplicationProductTotal" + x-embed-contract-applied: true + FieldOperationMeasurementLayersEnum: + type: "string" + description: "Layers based on variable rate measurements recorded during the field operation. They will use EventMeasurementStats for statistics." + enum: + - "AreaWorked" + - "Speed" + - "Elevation" + - "FuelRate" + - "FuelConsumption" + - "DieselExhaustFluid" + - "EngineHours" + - "YieldByVolume" + - "YieldByMass" + - "WetMass" + - "Moisture" + - "Trash" + - "AcidDetergentFiber" + - "NeutralDetergentFiber" + - "CrudeProtein" + - "Starch" + - "Sugar" + - "RateResult" + - "RateTarget" + - "RatePrescription" + - "InoculantDosing" + - "LengthOfCut" + - "GaugeWheelMargin" + - "DownforceResult" + - "GroundContact" + - "RideQuality" + - "SeedSpacingVariation" + - "Singulation" + - "ApplicationHeight" + - "SprayPressure" + - "PressureTarget" + - "PressureResult" + - "PressurePrescription" + - "DepthResult" + - "DepthTarget" + - "DepthPrescription" + - "WindSpeed" + - "AirTemperature" + - "TemperatureDifference" + - "RelativeHumidity" + - "SoilTemperature" + FieldOperationMeasurementType: properties: - "@type": + measurementName: type: "string" - example: "MapLegendItem" - label: - description: "The string label for this range. Used for images that are not based on numerical values" + example: "TillageDepthTarget" + description: "Measurement Name. Note: This response details section correspond to header-application/vnd.deere.axiom.v3+json" + measurementCategory: type: "string" - example: "Variety 1" - key: - description: "This is a placeholder for GeoTiff based Index Key" + example: "Target" + description: "Measurement Category." + area: + example: "See sample response below" + description: "The area covered for this measurement. Includes value, and unitId." + averageDepth: + example: "See sample response below" + description: "The average depth observed across the area covered. Includes value, and unitId." + value: type: "integer" - format: "int64" - example: 1 - MapRange: - allOf: - - $ref: "#/components/schemas/MapRangeForGeoTiff" - - $ref: "#/components/schemas/MapRangeForIndex" - - $ref: "#/components/schemas/MapRangeForMeasurement" - MapRangeWithLayerStatistics: - allOf: - - type: "object" - - $ref: "#/components/schemas/MapRange" - - description: "Field Operation Layer Statistics broken down according to the legend for another context." - properties: - "@type": - type: "string" - example: "MapRangeWithLayerStatistics" - statistics: - $ref: "#/components/schemas/LayerStatistics" - MapLegend: - type: "object" - description: "Describes the breaks and their colors for an image" - properties: - "@type": - type: "string" - example: "MapLegend" - layerName: - $ref: "#/components/schemas/FieldOperationLayersEnum" + example: 15.24 + description: "Numeric measurement value." unitId: - description: "Units for the legend" type: "string" - example: "lb1ac-1" - ranges: - type: "array" - items: - $ref: "#/components/schemas/MapRange" - MapExtent: - type: "object" - description: "The GPS extents of a map image" + example: "cm" + description: "Unit of measurement." + FieldOperationMeasurementTypesEnum: + allOf: + - type: "string" + description: "FieldOperation Measurement Types" + - $ref: "#/components/schemas/FieldOperationMeasurementTypesInFullRelease" + - $ref: "#/components/schemas/FieldOperationMeasurementTypesInAgreportsApi" + FieldOperationMeasurementTypesInAgreportsApi: + type: "string" + description: "FieldOperation Measurement Types supported in the Agreports/DataLake versions of the endpoints. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints." + enum: + - "ElevationResult" + - "ApplicationHeightTarget" + - "FuelRateResult" + - "WindSpeed" + - "AirTemperature" + - "TemperatureDifference" + - "RelativeHumidity" + - "SoilTemperature" + - "RatePrescription" + - "PressurePrescription" + - "DepthPrescription" + - "SeedDepthTarget" + - "SprayPressure" + - "InoculantDosing" + - "LengthOfCut" + - "GaugeWheelMargin" + - "DownforceResult" + - "RideQuality" + - "SeedSpacingVariation" + - "GroundContact" + - "Singulation" + - "SkyCondition" + - "SoilMoisture" + - "TargetQuality" + - "PrescriptionQuality" + FieldOperationMeasurementTypesInFullRelease: + type: "string" + description: "FieldOperation Measurement Types supported in the HDP versions of the endpoints and therefore fully released." + enum: + - "SeedingRateTarget" + - "SeedingRateResult" + - "SeedingSpeedResult" + - "SeedingVarietiesTarget" + - "SeedingVarietiesResult" + - "ApplicationRateTarget" + - "ApplicationRateResult" + - "ApplicationSpeedResult" + - "HarvestYieldResult" + - "HarvestYieldContourResult" + - "HarvestSpecialtyGrossYieldResult" + - "HarvestWetMassResult" + - "HarvestMoistureResult" + - "HarvestTrashResult" + - "HarvestSpeedResult" + - "HarvestAdfResult" + - "HarvestNdfResult" + - "HarvestCrudeProteinResult" + - "HarvestStarchResult" + - "HarvestSugarResult" + - "TillageDepthResult" + - "TillagePressureResult" + - "TillageSpeedResult" + - "TillageDepthTarget" + - "TillagePressureTarget" + FieldOperationMeasurement_MeasurementType: properties: - minimumLatitude: - type: "number" - format: "double" - example: 41.66470503009207 - maximumLatitude: - type: "number" - format: "double" - example: 41.67086022030498 - minimumLongitude: - type: "number" - format: "double" - example: -93.15582275390625 - maximumLongitude: + name: + example: "fieldOperationMapImage" + type: "string" + description: "Field Operation name. Note: This response details section correspond to header-application/vnd.deere.axiom.v3.image+json" + declaredType: + example: "See sample response below." + description: "" + scope: + example: "See sample response below." + description: "" + image: + example: "See sample response below." + type: "Base64 encoded PNG image" + description: "The PNG image file." + legends: + example: "See sample response below." + description: "The legend used to render the map image. Includes unitId and ranges." + extent: + example: "See sample response below." + description: "Two coordinates that represent the corners of the image when overlaid onto a Web Mercator projection1. Includes minimumLatitude, minimumLongitude, maximumLatitude, and maximumLongitude." + unitId: + type: "string" + description: "Numeric values in the legend's ranges are measurements in this unit. The unit depends on the Accept-UOM-System header for the MapImage request." + example: "cm" + ranges: + example: "See sample response below." + description: "The ranges contained in the legend. Includes either a label (for non-numeric ranges), or minimum, maximum, hexColor, and percent." + label: + type: "string" + example: 15 + description: "A label associated with the legend item. May be omitted for ranges with numeric values." + hexColor: + type: "string" + example: "#4B0082" + description: "The HEX color value of the legend item." + percent: type: "number" - format: "double" - example: -93.1475830078125 + example: 1 + description: "The percentage of agronomic data points that are represented by this legend item. For example, 0.05 means that 5% of the operation's measurements fall into this legend range." + nil: + type: "boolean" + example: "false" + globalScope: + type: "boolean" + example: "true" + typeSubstituted: + type: "boolean" + example: "false" FieldOperationPNGImage: type: "object" properties: @@ -1921,36 +2225,122 @@ components: $ref: "#/components/schemas/MapLegend" extent: $ref: "#/components/schemas/MapExtent" - FieldOperationGeoTIFFLocation: + FieldOperationProductTypesEnum: + type: "string" + description: "FieldOperation Product Types TODO Enum" + enum: + - "OTHER" + - "CHEMICAL" + - "SEED" + - "FEED" + - "FERTILIZER" + FieldOperationSearchErrors: type: "object" + format: "Errors/FieldOperationContextException" properties: - location: - description: "AWS S3 Presigned URL of Resource. Use gzip for best compression." + guid: type: "string" - format: "uri" - example: "https://s3.us-east-2.amazonaws.com/s3-bucket-path/49f35d8a-ff54-4b83-81c4-0f45b7b47eba" - mapLegend: - $ref: "#/components/schemas/MapLegend" - extent: - $ref: "#/components/schemas/MapExtent" - FieldOperationLayerStatistics: - description: "Includes the summarized values for all layers on a field operation" - type: "array" - items: - type: "object" - properties: - "@type": + format: "guid" + example: "17826sd23-e5e1-4921-8841-3c5f582e3a2e" + message: + type: "string" + description: "The value that was supplied for this field in the request" + example: "invalid/unsupported geojson" + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + example: + message: "this_part_of_the_request_was_wrong" + properties: + message: + type: "string" + description: "The value that was supplied for this field in the request" + example: "invalid/unsupported geojson" + FieldOperationTypesEnum: + type: "string" + description: "The type of operation" + example: "HARVEST" + FieldOperationWorkNote: + type: "object" + required: + - "id" + - "note" + properties: + "@type": + type: "string" + example: "FieldOperationWorkNote" + id: + type: "string" + format: "guid" + example: "3df13267-c5ee-4cc3-ab79-7cf013dc1e98" + description: "eventId of the work note." + note: + type: "string" + example: "note1" + timestamp: + type: "string" + format: "date-time" + description: "Timestamp of the work note." + example: "2018-08-27T08:08:08.000Z" + gpsLocation: + description: "GPS location where the the work note was taken." + $ref: "#/components/schemas/Point" + FieldOperationsSearch: + type: "object" + properties: + fieldIds: + type: "array" + items: type: "string" - example: "FieldOperationLayerStatistics" - links: - description: "Links to associated data." - type: "array" - items: - $ref: "#/components/schemas/Link" - layerName: - $ref: "#/components/schemas/FieldOperationLayersEnum" - statistics: - $ref: "#/components/schemas/LayerStatistics" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + fieldOperationTypes: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationTypesEnum" + cropTypes: + type: "array" + items: + $ref: "#/components/schemas/CropToken" + displayTypes: + type: "array" + items: + $ref: "#/components/schemas/DisplayTypeEnum" + startDate: + type: "string" + format: "date-time" + description: "The starting date of the operation in ISO-8601 format." + example: "2018-08-27T08:08:08.000Z" + x-zally-ignore: + - "D010" + endDate: + type: "string" + format: "date-time" + description: "The ending date of the operation in ISO-8601 format." + example: "2019-08-27T08:08:08.000Z" + x-zally-ignore: + - "D010" + embed: + type: "array" + items: + type: "string" + enum: + - "client" + - "farm" + - "field" + - "fieldOperationMachines" + - "measurementTypes" + JohnDeereDisplayTypeEnum: + type: "string" + description: "The type of display" + enum: + - "GS4_4600" + - "GS3_2630" + - "GS2_2600" + - "GS2_1800" + - "GS2_CommandCenter" LayerStatistics: description: "The statistics for a given layer context." type: "object" @@ -1961,236 +2351,221 @@ components: oneOf: - $ref: "#/components/schemas/EventMeasurementStats" - $ref: "#/components/schemas/EventObservationStats" - FieldOperationLayerImageRequest: - type: "object" + Link: + type: "string" properties: - ranges: - type: "array" - items: - $ref: "#/components/schemas/MapRange" - FieldOperationCompareStatisticsRequest: + uri: null + LinkGETFieldOperations: + properties: + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + description: "Fields Link." + measurementTypes: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + description: "Field Operation Measurements Link." + measurement: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" + description: "zero or more field operation measurements links. These will vary by the type of operation" + client: + example: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + description: "Clients Link." + farm: + example: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + description: "Farms Link." + shapeFileAsync: + example: "https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + description: "Asynchronous Shapefiles Link." + workPlans: + example: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + description: "Link to work plan associated to the operation." + LinkGETFieldOperationsId: + properties: + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + description: "Fields Link." + measurementTypes: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + description: "Field Operation Measurements Link." + measurement: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" + description: "zero or more field operation measurements links. These will vary by the type of operation" + client: + example: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + description: "Clients Link." + farm: + example: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + description: "Farms Link." + LinksGet: + properties: + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + description: "Fields Link." + fieldOperation: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + description: "Field Operations Link." + measurementType: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + description: "Field Operation Measurements Link." + MapExtent: type: "object" - required: - - "compareOperationIds" - - "baseLayer" - - "compareLayer" + description: "The GPS extents of a map image" properties: - compareOperationIds: - type: "array" - description: "The field operation ids that we are comparing so for Yield By Variety the target is the Seeding field operation(s)" - items: - type: "string" - example: "17826sd23-e5e1-4921-8841-3c5f582e3a2e" - baseLayer: - $ref: "#/components/schemas/FieldOperationLayersEnum" - compareLayer: - $ref: "#/components/schemas/FieldOperationLayersEnum" - boundary: - $ref: "#/components/schemas/Polygon" - FieldOperationMeasurement: - allOf: - - description: "An object representing the measurements the API has decided are relevant to a particular map image." - - $ref: "#/components/schemas/FieldOperationMeasurementInFullRelease" - - $ref: "#/components/schemas/FieldOperationMeasurementFromAgreportsApi" - FieldOperationMeasurementInFullRelease: + minimumLatitude: + type: "number" + format: "double" + example: 41.66470503009207 + maximumLatitude: + type: "number" + format: "double" + example: 41.67086022030498 + minimumLongitude: + type: "number" + format: "double" + example: -93.15582275390625 + maximumLongitude: + type: "number" + format: "double" + example: -93.1475830078125 + MapLegend: type: "object" - description: "The fully released portion of the FieldOperationMeasurement." + description: "Describes the breaks and their colors for an image" properties: - links: - type: "array" - items: - $ref: "#/components/schemas/Link" "@type": type: "string" - example: "FieldOperationMeasurement" - measurementName: - $ref: "#/components/schemas/FieldOperationMeasurementTypesEnum" - measurementCategory: - $ref: "#/components/schemas/FieldOperationMeasurementCategoryEnum" - area: - $ref: "#/components/schemas/EventMeasurement" - yield: - $ref: "#/components/schemas/EventMeasurement" - averageYield: - $ref: "#/components/schemas/EventMeasurement" - averageMoisture: - $ref: "#/components/schemas/EventMeasurement" - wetMass: - $ref: "#/components/schemas/EventMeasurement" - averageWetMass: - $ref: "#/components/schemas/EventMeasurement" - harvestLabAccumulatedWetMass: - $ref: "#/components/schemas/EventMeasurement" - averageSpeed: - $ref: "#/components/schemas/EventMeasurement" - totalMaterial: - $ref: "#/components/schemas/EventMeasurement" - averageMaterial: - $ref: "#/components/schemas/EventMeasurement" - averageDepth: - $ref: "#/components/schemas/EventMeasurement" - averagePressure: - $ref: "#/components/schemas/EventMeasurement" - averageTrash: - $ref: "#/components/schemas/EventMeasurement" - averageAcidDetergentFiber: - $ref: "#/components/schemas/EventMeasurement" - averageNeutralDetergentFiber: - $ref: "#/components/schemas/EventMeasurement" - averageStarch: - $ref: "#/components/schemas/EventMeasurement" - averageCrudeProtein: - $ref: "#/components/schemas/EventMeasurement" - averageSugar: - $ref: "#/components/schemas/EventMeasurement" - maxAcidDetergentFiber: - $ref: "#/components/schemas/EventMeasurement" - maxNeutralDetergentFiber: - $ref: "#/components/schemas/EventMeasurement" - maxStarch: - $ref: "#/components/schemas/EventMeasurement" - maxCrudeProtein: - $ref: "#/components/schemas/EventMeasurement" - maxSugar: - $ref: "#/components/schemas/EventMeasurement" - varietyTotals: - type: "array" - items: - $ref: "#/components/schemas/VarietyTotal" - productTotals: - type: "array" - items: - $ref: "#/components/schemas/ProductTotal" - applicationProductTotals: + example: "MapLegend" + layerName: + $ref: "#/components/schemas/FieldOperationLayersEnum" + unitId: + description: "Units for the legend" + type: "string" + example: "lb1ac-1" + ranges: type: "array" - description: "Present on ApplicationRateResult, ApplicationSpeedResult, and ApplicationRateTarget measurement entries. JD declares the outer `productTotals` and the inner `ProductTotal` but omits this intermediate layer. Verified in the field-mcp probe on 2026-04-14 (Atrazine application, org 7294700).\n" items: - $ref: "#/components/schemas/ApplicationProductTotal" - x-embed-contract-applied: true - FieldOperationMeasurementFromAgreportsApi: - description: "Properties added to FieldOperationMeasurement when trying to add the measurementTypes in FieldOperationMeasurementTypesInAgreportsApi via agreports-api. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints." + $ref: "#/components/schemas/MapRange" + MapRange: + allOf: + - $ref: "#/components/schemas/MapRangeForGeoTiff" + - $ref: "#/components/schemas/MapRangeForIndex" + - $ref: "#/components/schemas/MapRangeForMeasurement" + MapRangeForGeoTiff: type: "object" properties: - elevation: - $ref: "#/components/schemas/EventMeasurementStats" - fuelRate: - $ref: "#/components/schemas/EventMeasurementStats" - applicationHeight: - $ref: "#/components/schemas/EventMeasurementStats" - windSpeed: - $ref: "#/components/schemas/EventMeasurementStats" - temperature: - $ref: "#/components/schemas/EventMeasurementStats" - temperatureDifference: - $ref: "#/components/schemas/EventMeasurementStats" - humidity: - $ref: "#/components/schemas/EventMeasurementStats" - windDirection: - $ref: "#/components/schemas/EventObservationStats" - skyCondition: - $ref: "#/components/schemas/EventObservationStats" - soilMoisture: - $ref: "#/components/schemas/EventObservationStats" - rate: - $ref: "#/components/schemas/EventMeasurementStats" - pressure: - $ref: "#/components/schemas/EventMeasurementStats" - depth: - $ref: "#/components/schemas/EventMeasurementStats" - dosing: - $ref: "#/components/schemas/EventMeasurementStats" - cutLength: - $ref: "#/components/schemas/EventMeasurementStats" - gaugeWheelMargin: - $ref: "#/components/schemas/EventMeasurementStats" - downforce: - $ref: "#/components/schemas/EventMeasurementStats" - groundContact: - $ref: "#/components/schemas/EventMeasurementStats" - rideQuality: - $ref: "#/components/schemas/EventMeasurementStats" - seedSpacingVariation: - $ref: "#/components/schemas/EventMeasurementStats" - singulation: - $ref: "#/components/schemas/EventMeasurementStats" - doubles: - $ref: "#/components/schemas/EventMeasurementStats" - skips: - $ref: "#/components/schemas/EventMeasurementStats" - yieldVolume: - $ref: "#/components/schemas/EventMeasurementStats" - quality: - $ref: "#/components/schemas/EventMeasurementStats" - EventMeasurement: + "@type": + type: "string" + example: "MapLegendItem" + label: + description: "The string label for this range. Used for images that are not based on numerical values" + type: "string" + example: "Variety 1" + key: + description: "This is a placeholder for GeoTiff based Index Key" + type: "integer" + format: "int64" + example: 1 + MapRangeForIndex: type: "object" - description: "A general representation of quantity and unit." - example: - "@type": "EventMeasurement" - value: 17.13 - unitId: "gal1ac-1" properties: "@type": type: "string" - example: "EventMeasurement" - value: - type: "number" - format: "double" - description: "The quantity represented by this measurement." - unitId: + example: "MapLegendItem" + label: + description: "The string label for this range. Used for images that are not based on numerical values" type: "string" - description: "The unit associated to the quantity measured" - example: "gal1ac-1." - variableRepresentation: + example: "Variety 1" + hexColor: + description: "The color used in the image for this rage" type: "string" - example: "vrSolutionRateLiquid" - edited: - type: "boolean" - description: "Indicates whether a manual data edit was directly applied to this value. If a data edit for a different layer affected this value, it *will not be set*. May not be serialized if false." - example: false - EventMeasurementStats: + example: "#cc0000" + percent: + description: "The proportion of the field operation matching this range (not actually a percentage)." + type: "number" + format: "double" + example: 0.15 + key: + description: "This is a placeholder for various index key" + type: "integer" + format: "int64" + example: 55 + MapRangeForMeasurement: type: "object" - description: "Relevant stats for a measurement recorded during the operation." properties: "@type": type: "string" - example: "EventMeasurementStats" - areaRecorded: - $ref: "#/components/schemas/EventMeasurement" - averageValue: - $ref: "#/components/schemas/EventMeasurement" - totalValue: - $ref: "#/components/schemas/EventMeasurement" - minValue: - $ref: "#/components/schemas/EventMeasurement" - maxValue: - $ref: "#/components/schemas/EventMeasurement" - firstValue: - $ref: "#/components/schemas/EventMeasurement" - lastValue: - $ref: "#/components/schemas/EventMeasurement" - EventObservation: + example: "MapLegendItem" + minimum: + description: "The inclusive minimum value included in this range" + type: "number" + format: "double" + example: 13.15 + maximum: + description: "The exclusive maximum value included in this range" + type: "number" + format: "double" + example: 17.95 + hexColor: + description: "The color used in the image for this rage" + type: "string" + example: "#cc0000" + percent: + description: "The proportion of the field operation matching this range (not actually a percentage)." + type: "number" + format: "double" + example: 0.15 + MapRangeWithLayerStatistics: + allOf: + - type: "object" + - $ref: "#/components/schemas/MapRange" + - description: "Field Operation Layer Statistics broken down according to the legend for another context." + properties: + "@type": + type: "string" + example: "MapRangeWithLayerStatistics" + statistics: + $ref: "#/components/schemas/LayerStatistics" + NameToEridEdit: type: "object" - description: "A general representation of an observed value." + description: "Describes an edit that should change the id of any object that matches the name" properties: - "@type": - type: "string" - example: "EventObservation" - value: + fromName: type: "string" - description: "The observed value, e.g. NW wind direction." - example: "NW" - EventObservationStats: + description: "The name to match against" + example: "Variety A" + toGuid: + $ref: "#/components/schemas/ProductErid" + NonTankMixProduct: type: "object" - description: "Relevant stats for the values for an observation during the operation." properties: - areaRecorded: - $ref: "#/components/schemas/EventMeasurement" - firstObservation: - $ref: "#/components/schemas/EventObservation" - lastObservation: - $ref: "#/components/schemas/EventObservation" - predominantObservation: - $ref: "#/components/schemas/EventObservation" + "@type": + type: "string" + example: "Product" + guid: + $ref: "#/components/schemas/ProductErid" + productType: + $ref: "#/components/schemas/FieldOperationProductTypesEnum" + name: + type: "string" + description: "The general name of the product, or 'Tank Mix' for a product consisting of multiple components in a carrier, for APPLICATION operations." + example: "Priaxor" + brand: + type: "string" + description: "The brand name of product." + example: "BrandForProducts" + agencyRegistrationNumber: + $ref: "#/components/schemas/AgencyRegistrationNumber" + tankMix: + type: "boolean" + description: "Flag indicating whether the product is a tank mix (true) or a single component (false)." + example: false Operator: type: "object" properties: @@ -2207,6 +2582,27 @@ components: license: type: "string" example: "OPERATOR_LICENSE" + Operators: + type: "object" + description: "Operators that performed work using this machine" + properties: + operatorId: + type: "string" + description: "Unique identifier for this operator" + example: "657b4391-79b3-4012-a617-7ceba7111ad0" + name: + type: "string" + description: "Name of the operator" + example: "John Doe" + license: + type: "string" + description: "Operator license number" + example: "ABC123" + OrgId: + type: "integer" + description: "The organization owning the fields and associated operations" + format: "int64" + example: 123456 Point: type: "object" properties: @@ -2259,6 +2655,10 @@ components: example: - 42.3 - -82.5 + ProductErid: + type: "string" + description: "Recorded Product Erid." + example: "fa14f029-831c-456b-a76e-2d3c26207c19" ProductTotal: type: "object" description: "The ProductTotal associated with this FieldOperation." @@ -2319,6 +2719,62 @@ components: $ref: "#/components/schemas/EventMeasurement" maxSugar: $ref: "#/components/schemas/EventMeasurement" + TankMixProduct: + type: "object" + properties: + guid: + $ref: "#/components/schemas/ProductErid" + tankMix: + type: "boolean" + description: "Flag indicating whether the product is a tank mix (true) or a single component (false)." + example: true + rate: + $ref: "#/components/schemas/EventMeasurement" + carrier: + $ref: "#/components/schemas/Component" + components: + type: "array" + items: + $ref: "#/components/schemas/Component" + ThirdPartyDisplayTypeEnum: + type: "string" + description: "The type of display" + enum: + - "IntegraVersa" + - "ProtobufV36" + - "ProtobufV41" + - "TrimbleFMX" + - "Unknown" + UpdateFieldOperation: + type: "object" + properties: + cropSeason: + $ref: "#/components/schemas/CropSeason" + cropName: + $ref: "#/components/schemas/CropToken" + varieties: + type: "array" + items: + oneOf: + - $ref: "#/components/schemas/NameToEridEdit" + - $ref: "#/components/schemas/EridToEridEdit" + product: + type: "object" + properties: + guid: + $ref: "#/components/schemas/ProductErid" + UpdateFieldOperationMachine: + type: "object" + properties: + erid: + type: "string" + example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + description: "Doc File based Field Operation Machine erid." + calibrationFactor: + type: "number" + format: "double" + description: "The calibration factor for this machine" + example: "1.25" VarietyTotal: type: "object" description: "The VarietyTotal associated with this FieldOperation." @@ -2376,143 +2832,6 @@ components: $ref: "#/components/schemas/EventMeasurement" maxSugar: $ref: "#/components/schemas/EventMeasurement" - Errors: - type: "array" - items: - $ref: "#/components/schemas/Error" - Error: - type: "object" - properties: - guid: - type: "string" - format: "guid" - example: "11111111-2222-3333-4444-555555555555" - message: - type: "string" - description: "An english description of the error" - example: "was invalid because" - code: - type: "string" - description: "A string constant representing the type of error" - example: 400 - field: - type: "string" - description: "The name of the property or parameter deemed invalid" - example: "example-field" - invalidValue: - type: "string" - description: "The value that was supplied for this field in the request" - example: "Bad value" - FieldOperationSearchErrors: - type: "object" - format: "Errors/FieldOperationContextException" - properties: - guid: - type: "string" - format: "guid" - example: "17826sd23-e5e1-4921-8841-3c5f582e3a2e" - message: - type: "string" - description: "The value that was supplied for this field in the request" - example: "invalid/unsupported geojson" - errors: - type: "array" - items: - type: "object" - format: "Error/ConstraintViolation" - example: - message: "this_part_of_the_request_was_wrong" - properties: - message: - type: "string" - description: "The value that was supplied for this field in the request" - example: "invalid/unsupported geojson" - FieldOperationsSearch: - type: "object" - properties: - fieldIds: - type: "array" - items: - type: "string" - format: "uuid" - example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" - fieldOperationTypes: - type: "array" - items: - $ref: "#/components/schemas/FieldOperationTypesEnum" - cropTypes: - type: "array" - items: - $ref: "#/components/schemas/CropToken" - displayTypes: - type: "array" - items: - $ref: "#/components/schemas/DisplayTypeEnum" - startDate: - type: "string" - format: "date-time" - description: "The starting date of the operation in ISO-8601 format." - example: "2018-08-27T08:08:08.000Z" - x-zally-ignore: - - "D010" - endDate: - type: "string" - format: "date-time" - description: "The ending date of the operation in ISO-8601 format." - example: "2019-08-27T08:08:08.000Z" - x-zally-ignore: - - "D010" - embed: - type: "array" - items: - type: "string" - enum: - - "client" - - "farm" - - "field" - - "fieldOperationMachines" - - "measurementTypes" - ProductErid: - type: "string" - description: "Recorded Product Erid." - example: "fa14f029-831c-456b-a76e-2d3c26207c19" - NameToEridEdit: - type: "object" - description: "Describes an edit that should change the id of any object that matches the name" - properties: - fromName: - type: "string" - description: "The name to match against" - example: "Variety A" - toGuid: - $ref: "#/components/schemas/ProductErid" - EridToEridEdit: - type: "object" - description: "Describes an edit that should change the id of any object that matches the fromGuid" - properties: - fromGuid: - $ref: "#/components/schemas/ProductErid" - toGuid: - $ref: "#/components/schemas/ProductErid" - FieldOperationLayers: - type: "array" - description: "Describe an reponse of operaton layers" - items: - $ref: "#/components/schemas/FieldOperationLayer" - FieldOperationLayer: - type: "object" - required: - - "id" - properties: - "@type": - type: "string" - example: "FieldOperationLayer" - id: - $ref: "#/components/schemas/FieldOperationLayersEnum" - links: - type: "array" - items: - $ref: "#/components/schemas/Link" ApplicationProductTotal: type: "object" description: "One element of FieldOperationMeasurement.applicationProductTotals. Not documented in JD's spec; fields are provisional, verified against one Atrazine application wire trace on 2026-04-14. Matches JD's house style of keeping FieldOperationMeasurementInFullRelease fields all optional, so no required[] is declared here. Widen or tighten as additional wire traces arrive.\n" @@ -2539,3 +2858,15 @@ components: items: $ref: "#/components/schemas/ProductTotal" x-embed-contract-applied: true + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag2: "ag2" +x-source-documents: + - endPointName: "field-operation" + id: 27 + - endPointName: "measurement-type" + id: 28 diff --git a/specs/fixed/fields.yaml b/specs/fixed/fields.yaml index 2dc3cef..e65f343 100644 --- a/specs/fixed/fields.yaml +++ b/specs/fixed/fields.yaml @@ -14,6 +14,20 @@ servers: - "sandboxapi" - "partnerapi" paths: + /organizations/{orgID}/fields/{id}/clients: + get: + description: "View details about the client that owns the field. The response will link to the following resources: fields: View the field the client belongs to. farms: View the farms belonging to the client. owningOrganization: View the org that owns the field." + summary: "View Clients that Own a Field" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/X-deere-signature" + responses: + "200": + $ref: "#/components/responses/getFieldResponse" /organizations/{orgId}/fields: get: summary: "Retrieve all of the Fields for an Organization" @@ -180,37 +194,59 @@ paths: $ref: "#/components/responses/DoesNotHaveAccessToOrg" "404": $ref: "#/components/responses/OrgOrFieldNotFound" - /organizations/{orgID}/fields/{id}/clients: - get: - description: "View details about the client that owns the field. The response will link to the following resources: fields: View the field the client belongs to. farms: View the farms belonging to the client. owningOrganization: View the org that owns the field." - summary: "View Clients that Own a Field" - security: - - OAuth2: - - "ag1" - parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/FieldId" - - $ref: "#/components/parameters/X-deere-signature" - responses: - "200": - $ref: "#/components/responses/getFieldResponse" components: + examples: + getFieldNoEmbed: + value: + "@type": "Field" + name: "---" + id: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + - "@type": "Link" + rel: "clients" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients" + - "@type": "Link" + rel: "notes" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes" + - "@type": "Link" + rel: "farms" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457" + - "@type": "Link" + rel: "boundaries" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" + - "@type": "Link" + rel: "simplifiedBoundaries" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true" + - "@type": "Link" + rel: "addBoundary" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" + - "@type": "Link" + rel: "activeBoundary" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries/a34bfb73-7a36-4d93-9a24-9814a86f0f5d" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations" + - "@type": "Link" + rel: "guidanceLines" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" + - "@type": "Link" + rel: "addGuidanceTrack" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" + - "@type": "Link" + rel: "deleteField" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + - "@type": "Link" + rel: "editField" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + getFieldsNoEmbed: + value: "{ \"links\":[ { \"rel\":\"self\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields\" }, { \"rel\":\"nextPage\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields;start=10;count=10\" } ], \"total\":1, \"values\":[ { \"@type\":\"Field\", \"name\":\"---\", \"id\":\"9369f3f6-2428-4bba-bf64-0a19cdaf007d\", \"links\":[ { \"@type\":\"Link\", \"rel\":\"self\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" }, { \"@type\":\"Link\", \"rel\":\"clients\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients\" }, { \"@type\":\"Link\", \"rel\":\"notes\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes\" }, { \"@type\":\"Link\", \"rel\":\"farms\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms\" }, { \"@type\":\"Link\", \"rel\":\"owningOrganization\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457\" }, { \"@type\":\"Link\", \"rel\":\"boundaries\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries\" }, { \"@type\":\"Link\", \"rel\":\"simplifiedBoundaries\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true\" }, { \"@type\":\"Link\", \"rel\":\"addBoundary\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries\" }, { \"@type\":\"Link\", \"rel\":\"fieldOperation\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations\" }, { \"@type\":\"Link\", \"rel\":\"guidanceLines\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines\" }, { \"@type\":\"Link\", \"rel\":\"addGuidanceTrack\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines\" }, { \"@type\":\"Link\", \"rel\":\"deleteField\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" }, { \"@type\":\"Link\", \"rel\":\"editField\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" } ] } ] }" parameters: - OrgId: - in: "path" - name: "orgId" - description: "The ID of the organization" - x-required-boolean: true - schema: - type: "integer" - format: "int64" - X-deere-signature: - name: "x-deere-signature" - in: "header" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." - schema: - type: "string" - example: "9r8392615e4b4e1c92018026f47109bb" ClientName: in: "query" name: "clientName" @@ -218,33 +254,21 @@ components: x-required-boolean: false schema: type: "string" - FarmName: - in: "query" - name: "farmName" - description: "farm name" - x-required-boolean: false - schema: - type: "string" - FieldName: + ContextOrganizationId: in: "query" - name: "fieldName" - description: "field name" + name: "contextOrganizationId" + description: "Context Organization ID" x-required-boolean: false schema: type: "string" - recordFilter: + FarmName: in: "query" - name: "recordFilter" - description: "Filters by resource state (whether or not the resource is archived)" + name: "farmName" + description: "farm name" x-required-boolean: false schema: type: "string" - enum: - - "AVAILABLE" - - "ARCHIVED" - - "ALL" - default: "AVAILABLE" - FieldsEmbed: + FieldEmbed: in: "query" name: "embed" description: "list of objects to include" @@ -256,13 +280,23 @@ components: enum: - "farms" - "clients" - - "boundaries" - - "activeBoundary" - - "simplifiedBoundaries" - "guidanceLines" - "accessPoints" - - "notes" - FieldEmbed: + FieldId: + in: "path" + name: "fieldId" + description: "field guid" + x-required-boolean: true + schema: + type: "string" + FieldName: + in: "query" + name: "fieldName" + description: "field name" + x-required-boolean: false + schema: + type: "string" + FieldsEmbed: in: "query" name: "embed" description: "list of objects to include" @@ -274,22 +308,20 @@ components: enum: - "farms" - "clients" + - "boundaries" + - "activeBoundary" + - "simplifiedBoundaries" - "guidanceLines" - "accessPoints" - ContextOrganizationId: - in: "query" - name: "contextOrganizationId" - description: "Context Organization ID" - x-required-boolean: false - schema: - type: "string" - FieldId: + - "notes" + OrgId: in: "path" - name: "fieldId" - description: "field guid" + name: "orgId" + description: "The ID of the organization" x-required-boolean: true schema: - type: "string" + type: "integer" + format: "int64" UnitOfMeasureHeader: in: "header" name: "Accept-UOM-System" @@ -301,6 +333,25 @@ components: - "METRIC" - "ENGLISH" default: "METRIC" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" + recordFilter: + in: "query" + name: "recordFilter" + description: "Filters by resource state (whether or not the resource is archived)" + x-required-boolean: false + schema: + type: "string" + enum: + - "AVAILABLE" + - "ARCHIVED" + - "ALL" + default: "AVAILABLE" requestBodies: ASingleField: $ref: "#/components/schemas/CreateUpdateField" @@ -311,6 +362,23 @@ components: schema: $ref: "#/components/schemas/FieldGuidSearches" responses: + Created: + description: "Field successfully created" + headers: + Location: + schema: + type: "string" + format: "uri" + description: "The uri of the newly created resource" + Deleted: + description: "Field deleted. If the client and farm has only this field the client and farm will be deleted" + content: + application/vnd:deere:axiom:v3+json: + examples: + Headers: + description: "204 No Content" + DoesNotHaveAccessToOrg: + description: "Invalid access to organization" FarmsReturned: description: "Array of farms" content: @@ -340,6 +408,55 @@ components: - rel: "owningOrganization" uri: "https://sandboxapi.deere.com/platform/organizations/6789" id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + FieldReturned: + description: "Success" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FieldResponse" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "Field" + name: "01" + archived: false + id: "d61b83f4-3a12-431e-8010-596f2466dc27" + lastModifiedTime: "2020-09-21T15:41:15.205Z" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "clients" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/clients" + - "@type": "Link" + rel: "notes" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" + - "@type": "Link" + rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc2/farms" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries" + - "@type": "Link" + rel: "simplifiedBoundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" + - "@type": "Link" + rel: "activeBoundary" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries/e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" + - "@type": "Link" + rel: "mapLayerSummaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" + - "@type": "Link" + rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" FieldsReturned: description: "Array of fields containing links related to fields" content: @@ -394,48 +511,10 @@ components: - "@type": "Link" rel: "contributionDefinition" uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" - getFieldResponse: - description: "Get Field by client Id" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - type: "array" - items: - $ref: "#/components/schemas/GroupLink" - total: - type: "integer" - example: 1 - format: "int32" - values: - type: "array" - items: - $ref: "#/components/schemas/FieldResponse" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" - total: 1 - values: - - name: "Aslan" - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" - - rel: "fields" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" - - rel: "farms" - uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/6789" - id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" - FieldsReturnedWithPartialSuccessHeader: - description: "Array of fields with header for partial success." - headers: - FIELDS-NOT-FOUND: + FieldsReturnedWithPartialSuccessHeader: + description: "Array of fields with header for partial success." + headers: + FIELDS-NOT-FOUND: schema: type: "string" format: "array" @@ -447,69 +526,10 @@ components: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/FieldsResponse" - FieldReturned: - description: "Success" - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/FieldResponse" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" - value: - "@type": "Field" - name: "01" - archived: false - id: "d61b83f4-3a12-431e-8010-596f2466dc27" - lastModifiedTime: "2020-09-21T15:41:15.205Z" - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" - - "@type": "Link" - rel: "clients" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/clients" - - "@type": "Link" - rel: "notes" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" - - "@type": "Link" - rel: "farms" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc2/farms" - - "@type": "Link" - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/123456" - - "@type": "Link" - rel: "boundaries" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries" - - "@type": "Link" - rel: "simplifiedBoundaries" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" - - "@type": "Link" - rel: "activeBoundary" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries/e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" - - "@type": "Link" - rel: "fieldOperation" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" - - "@type": "Link" - rel: "mapLayerSummaries" - uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" - - "@type": "Link" - rel: "contributionDefinition" - uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" - DoesNotHaveAccessToOrg: - description: "Invalid access to organization" OrgNotFound: description: "Organization not found" OrgOrFieldNotFound: description: "Organization or Field not found" - Created: - description: "Field successfully created" - headers: - Location: - schema: - type: "string" - format: "uri" - description: "The uri of the newly created resource" Updated: description: "Field successfully updated" content: @@ -547,110 +567,154 @@ components: clients: clients: - name: "UniqueClientName" - Deleted: - description: "Field deleted. If the client and farm has only this field the client and farm will be deleted" - content: - application/vnd:deere:axiom:v3+json: - examples: - Headers: - description: "204 No Content" - ValidationErrorForUpdate: - description: "The possible errors are: * CFF_CLIENT_ID_ALREADY_EXISTS * CFF_BAD_CLIENT_ID * CFF_CLIENT_ID_NAME_CONFLICT * CFF_CLIENT_ID_NOT_FOUND * CFF_CLIENT_NAME_ALREADY_EXISTS * CFF_EMPTY_CLIENT_NAME * CFF_CLIENT_NAME_EXCEEDS_255_CHARS * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT * CFF_FARM_ID_ALREADY_EXISTS * CFF_BAD_FARM_ID * CFF_FARM_ID_NAME_CONFLICT * CFF_FARM_ID_NOT_FOUND * CFF_FARM_NAME_ALREADY_EXISTS * CFF_EMPTY_FARM_NAME * CFF_FARM_NAME_EXCEEDS_255_CHARS * CFF_ALREADY_EXISTS_ACTIVE * CFF_ALREADY_EXISTS_ARCHIVED * CFF_ALREADY_EXISTS_MERGED * CFF_FIELD_ID_ALREADY_EXISTS * CFF_BAD_FIELD_ID * CFF_FIELD_NAME_ALREADY_EXISTS * CFF_EMPTY_FIELD_NAME * CFF_FIELD_NAME_EXCEEDS_255_CHARS * CFF_MISSING_REQUEST_BODY * CFF_OUTDATED_REQUEST * CFF_USER_LAST_MODIFIED_CLIPPED" ValidationErrorForCreate: description: "The possible errors are: * CFF_CLIENT_ID_ALREADY_EXISTS * CFF_BAD_CLIENT_ID * CFF_CLIENT_ID_NAME_CONFLICT * CFF_CLIENT_ID_NOT_FOUND * CFF_CLIENT_NAME_ALREADY_EXISTS * CFF_EMPTY_CLIENT_NAME * CFF_CLIENT_NAME_EXCEEDS_255_CHARS * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT * CFF_FARM_ID_ALREADY_EXISTS * CFF_BAD_FARM_ID * CFF_FARM_ID_NAME_CONFLICT * CFF_FARM_ID_NOT_FOUND * CFF_FARM_NAME_ALREADY_EXISTS * CFF_EMPTY_FARM_NAME * CFF_FARM_NAME_EXCEEDS_255_CHARS * CFF_ALREADY_EXISTS_ACTIVE * CFF_ALREADY_EXISTS_ARCHIVED * CFF_ALREADY_EXISTS_MERGED * CFF_FIELD_ID_ALREADY_EXISTS * CFF_BAD_FIELD_ID * CFF_FIELD_NAME_ALREADY_EXISTS * CFF_EMPTY_FIELD_NAME * CFF_FIELD_NAME_EXCEEDS_255_CHARS * CFF_MISSING_REQUEST_BODY * CFF_OUTDATED_REQUEST * CFF_USER_LAST_MODIFIED_CLIPPED" + ValidationErrorForUpdate: + description: "The possible errors are: * CFF_CLIENT_ID_ALREADY_EXISTS * CFF_BAD_CLIENT_ID * CFF_CLIENT_ID_NAME_CONFLICT * CFF_CLIENT_ID_NOT_FOUND * CFF_CLIENT_NAME_ALREADY_EXISTS * CFF_EMPTY_CLIENT_NAME * CFF_CLIENT_NAME_EXCEEDS_255_CHARS * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT * CFF_FARM_ID_ALREADY_EXISTS * CFF_BAD_FARM_ID * CFF_FARM_ID_NAME_CONFLICT * CFF_FARM_ID_NOT_FOUND * CFF_FARM_NAME_ALREADY_EXISTS * CFF_EMPTY_FARM_NAME * CFF_FARM_NAME_EXCEEDS_255_CHARS * CFF_ALREADY_EXISTS_ACTIVE * CFF_ALREADY_EXISTS_ARCHIVED * CFF_ALREADY_EXISTS_MERGED * CFF_FIELD_ID_ALREADY_EXISTS * CFF_BAD_FIELD_ID * CFF_FIELD_NAME_ALREADY_EXISTS * CFF_EMPTY_FIELD_NAME * CFF_FIELD_NAME_EXCEEDS_255_CHARS * CFF_MISSING_REQUEST_BODY * CFF_OUTDATED_REQUEST * CFF_USER_LAST_MODIFIED_CLIPPED" + getFieldResponse: + description: "Get Field by client Id" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FieldResponse" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + total: 1 + values: + - name: "Aslan" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" schemas: - FieldsResponse: + ABLine: type: "object" properties: - links: - type: "array" - items: - $ref: "#/components/schemas/Link" - totals: - type: "integer" - values: - type: "array" - items: - $ref: "#/components/schemas/FieldResponse" - FieldResponse: + "@Type": + type: "string" + example: "AbLine" + heading: + type: "number" + example: 356.5847091769351 + aPoint: + $ref: "#/components/schemas/Point" + AccessPoint: type: "object" properties: - "@Type": + id: type: "string" - example: "Field" - name: + format: "uri" + description: type: "string" - example: "---" - farms: - $ref: "#/components/schemas/Farms" - clients: - $ref: "#/components/schemas/Clients" - boundaries: - type: "array" - items: - $ref: "#/components/schemas/Boundary" - accessPoints: - type: "array" - items: - $ref: "#/components/schemas/AccessPoint" - minItems: 0 - guidanceLines: - type: "array" - items: - $ref: "#/components/schemas/GuidanceLines" - minItems: 0 - archived: + direction: + type: "string" + isEntry: type: "boolean" - example: true - flags: - type: "array" - items: - $ref: "#/components/schemas/Flag" - minItems: 0 - id: + isExit: + type: "boolean" + location: + $ref: "#/components/schemas/Point" + name: type: "string" - format: "uuid" - example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" links: type: "array" items: $ref: "#/components/schemas/Link" - Farms: + Author: type: "object" properties: "@Type": type: "string" - example: "Farms" - farms: - type: "array" - items: - $ref: "#/components/schemas/Farm" - Farm: + example: "User" + accountName: + type: "string" + example: "scoutcarla1" + givenName: + type: "string" + example: "scoutcarla1" + familyName: + type: "string" + example: "scoutcarla1" + Boundary: type: "object" properties: "@Type": type: "string" - example: "Farm" + example: "Boundary" name: type: "string" - example: "---" + example: "Auto-Generated 2014 Harvest" + sourceType: + type: "string" + example: "Auto" + modifiedTime: + type: "string" + format: "date-time" + example: "2016-11-17T11:53:00.000Z" + area: + $ref: "#/components/schemas/MeasurementAsDouble" + workableArea: + $ref: "#/components/schemas/MeasurementAsDouble" + multipolygons: + type: "array" + items: + $ref: "#/components/schemas/Polygon" + extent: + $ref: "#/components/schemas/Extent" id: type: "string" - format: "uri" - example: "1efb4de1-fe41-42bc-bbb3-d128a432cafd" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" links: type: "array" items: $ref: "#/components/schemas/Link" - CreateUpdateFarm: - type: "object" - properties: - "@Type": + active: + type: "boolean" + description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." + irrigated: + type: "boolean" + description: "Indicates whether the contained area is irrigated" + Client: + type: "object" + properties: + "@Type": type: "string" - example: "Farm" + example: "Client" name: type: "string" - example: "SouthEast End" + example: "---" + id: + type: "string" + format: "uri" + example: "68b887c7-1ac2-40a4-b70b-117a8ec34abf" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" Clients: type: "object" properties: @@ -661,54 +725,179 @@ components: type: "array" items: $ref: "#/components/schemas/Client" - Client: + CreateUpdateClient: type: "object" properties: "@Type": type: "string" example: "Client" + name: + type: "string" + example: "SouthEast End_Client" + CreateUpdateFarm: + type: "object" + properties: + "@Type": + type: "string" + example: "Farm" + name: + type: "string" + example: "SouthEast End" + CreateUpdateField: + description: "Place holder for Matt to create the field object to be created or updated." + type: "object" + properties: + "@Type": + type: "string" + example: "Field" + name: + type: "string" + example: "Land_Demo_1" + archived: + type: "boolean" + example: true + Farms: + type: "object" + properties: + "@Type": + type: "string" + example: "Farms" + farms: + type: "array" + items: + $ref: "#/components/schemas/CreateUpdateFarm" + Clients: + type: "object" + properties: + "@Type": + type: "string" + example: "Clients" + clients: + type: "array" + items: + $ref: "#/components/schemas/CreateUpdateClient" + Extent: + type: "object" + properties: + "@Type": + type: "string" + example: "Extent" + topLeft: + $ref: "#/components/schemas/Point" + bottomRight: + $ref: "#/components/schemas/Point" + Farm: + type: "object" + properties: + "@Type": + type: "string" + example: "Farm" name: type: "string" example: "---" id: type: "string" format: "uri" - example: "68b887c7-1ac2-40a4-b70b-117a8ec34abf" + example: "1efb4de1-fe41-42bc-bbb3-d128a432cafd" links: type: "array" items: $ref: "#/components/schemas/Link" - GroupLink: - description: "Link to another resource" + Farms: type: "object" properties: - boundaries: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/boundaries" - description: "Boundaries Link." - clients: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/clients" - description: "Clients Link." + "@Type": + type: "string" + example: "Farms" farms: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/farms" - description: "Farms Link." - owningOrganization: - example: "https://sandboxapi.deere.com/platform/organizations/123456" - description: "Organizations Link." - notes: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" - description: "Notes Link." - simplifiedBoundaries: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" - description: "Boundaries Link." - fieldOperation: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" - description: "Field Operations Link." - mapLayerSummaries: - example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" - description: "Map Layer Summaries Link." - contributionDefinition: - example: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" - description: "Contribution Definition Link" + type: "array" + items: + $ref: "#/components/schemas/Farm" + FieldGuidSearches: + type: "object" + properties: + "@Type": + type: "string" + example: "FieldGuidSearches" + fieldIds: + type: "array" + items: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + clientName: + type: "string" + example: "client" + farmName: + type: "string" + example: "farm" + fieldName: + type: "string" + example: "field" + embeds: + type: "array" + items: + type: "string" + enum: + - "farms" + - "clients" + - "boundaries" + - "activeBoundary" + - "simplifiedBoundaries" + - "metadataOnlyBoundaries" + - "guidanceLines" + - "shapes" + - "accessPoints" + - "notes" + status: + type: "string" + enum: + - "AVAILABLE" + - "ARCHIVED" + - "ALL" + FieldResponse: + type: "object" + properties: + "@Type": + type: "string" + example: "Field" + name: + type: "string" + example: "---" + farms: + $ref: "#/components/schemas/Farms" + clients: + $ref: "#/components/schemas/Clients" + boundaries: + type: "array" + items: + $ref: "#/components/schemas/Boundary" + accessPoints: + type: "array" + items: + $ref: "#/components/schemas/AccessPoint" + minItems: 0 + guidanceLines: + type: "array" + items: + $ref: "#/components/schemas/GuidanceLines" + minItems: 0 + archived: + type: "boolean" + example: true + flags: + type: "array" + items: + $ref: "#/components/schemas/Flag" + minItems: 0 + id: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" FieldsPost: properties: name: @@ -737,100 +926,157 @@ components: type: "string" format: "uuid" description: "Client ID" - GetFarms: + FieldsResponse: type: "object" properties: - total: - type: "integer" - example: 1 - format: "int32" links: type: "array" items: - type: "object" - properties: - rel: - type: "string" - example: "self" - uri: - type: "string" - description: "Platform uri to fetch farm details" - example: "https://sandboxapi.deere.com/platform/organizations/5555/fields/222/farms" + $ref: "#/components/schemas/Link" + totals: + type: "integer" values: type: "array" items: - $ref: "#/components/schemas/GetFarm" - CreateUpdateClient: - type: "object" - properties: - "@Type": - type: "string" - example: "Client" - name: - type: "string" - example: "SouthEast End_Client" - Boundary: + $ref: "#/components/schemas/FieldResponse" + Flag: type: "object" properties: "@Type": type: "string" - example: "Boundary" - name: - type: "string" - example: "Auto-Generated 2014 Harvest" - sourceType: + example: "GenericNote" + createdDate: type: "string" - example: "Auto" - modifiedTime: + format: "date-time" + example: "2016-08-19T18:48:48.886Z" + lastModifiedDate: type: "string" format: "date-time" - example: "2016-11-17T11:53:00.000Z" - area: - $ref: "#/components/schemas/MeasurementAsDouble" - workableArea: - $ref: "#/components/schemas/MeasurementAsDouble" - multipolygons: + example: "2016-08-19T18:48:48.886Z" + text: + type: "string" + example: "some text" + metadata: type: "array" items: - $ref: "#/components/schemas/Polygon" - extent: - $ref: "#/components/schemas/Extent" + $ref: "#/components/schemas/MetaData" + author: + type: "array" + items: + $ref: "#/components/schemas/Author" + geometry: + $ref: "#/components/schemas/Geometry" + noteType: + type: "string" + example: "SCOUT" id: type: "string" - format: "uuid" - example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + format: "uri" + example: "4e7a1fa7-9db9-45ea-94d3-e45b2fa43c2a" links: type: "array" items: $ref: "#/components/schemas/Link" - active: - type: "boolean" - description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." - irrigated: - type: "boolean" - description: "Indicates whether the contained area is irrigated" - AccessPoint: + Geometry: type: "object" properties: - id: + coordinates: + type: "array" + items: + type: "string" + example: "-93.76592004432253, 41.643866385621365" + type: type: "string" - format: "uri" - description: + example: "Point" + GetFarm: + type: "object" + properties: + "@type": type: "string" - direction: + example: "Farm" + name: type: "string" - isEntry: - type: "boolean" - isExit: + example: "John Doe" + id: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + readOnly: true + archived: type: "boolean" - location: - $ref: "#/components/schemas/Point" - name: + example: false + clientUri: type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c" links: type: "array" + readOnly: true items: - $ref: "#/components/schemas/Link" + type: "object" + properties: + "@type": + type: "string" + example: "Link" + rel: + type: "string" + example: "self" + uri: + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + GetFarms: + type: "object" + properties: + total: + type: "integer" + example: 1 + format: "int32" + links: + type: "array" + items: + type: "object" + properties: + rel: + type: "string" + example: "self" + uri: + type: "string" + description: "Platform uri to fetch farm details" + example: "https://sandboxapi.deere.com/platform/organizations/5555/fields/222/farms" + values: + type: "array" + items: + $ref: "#/components/schemas/GetFarm" + GroupLink: + description: "Link to another resource" + type: "object" + properties: + boundaries: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/boundaries" + description: "Boundaries Link." + clients: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/clients" + description: "Clients Link." + farms: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/farms" + description: "Farms Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + notes: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" + description: "Notes Link." + simplifiedBoundaries: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" + description: "Boundaries Link." + fieldOperation: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" + description: "Field Operations Link." + mapLayerSummaries: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" + description: "Map Layer Summaries Link." + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" + description: "Contribution Definition Link" GuidanceLines: allOf: - $ref: "#/components/schemas/ABLine" @@ -875,44 +1121,35 @@ components: type: "array" items: $ref: "#/components/schemas/Link" - Flag: + Link: + description: "Link to another resource" type: "object" properties: - "@Type": - type: "string" - example: "GenericNote" - createdDate: + rel: + x-required-boolean: true type: "string" - format: "date-time" - example: "2016-08-19T18:48:48.886Z" - lastModifiedDate: + example: "self" + uri: + x-required-boolean: true type: "string" - format: "date-time" - example: "2016-08-19T18:48:48.886Z" - text: + example: "https://sandboxapi.deere.com/platform/users/USER" + MeasurementAsDouble: + type: "object" + properties: + "@Type": type: "string" - example: "some text" - metadata: - type: "array" - items: - $ref: "#/components/schemas/MetaData" - author: - type: "array" - items: - $ref: "#/components/schemas/Author" - geometry: - $ref: "#/components/schemas/Geometry" - noteType: + example: "MeasurementAsDouble" + valueAsDouble: + type: "number" + format: "double" + example: 7.502938 + vrDomainId: type: "string" - example: "SCOUT" - id: + example: "vrEastShiftComponent" + unit: type: "string" - format: "uri" - example: "4e7a1fa7-9db9-45ea-94d3-e45b2fa43c2a" - links: - type: "array" - items: - $ref: "#/components/schemas/Link" + description: "The unit of measure for this value" + example: "ha" MetaData: type: "object" properties: @@ -925,43 +1162,22 @@ components: value: type: "integer" example: 9 - Author: + Point: type: "object" properties: "@Type": - type: "string" - example: "User" - accountName: - type: "string" - example: "scoutcarla1" - givenName: - type: "string" - example: "scoutcarla1" - familyName: - type: "string" - example: "scoutcarla1" - Geometry: - type: "object" - properties: - coordinates: - type: "array" - items: - type: "string" - example: "-93.76592004432253, 41.643866385621365" - type: type: "string" example: "Point" - ABLine: - type: "object" - properties: - "@Type": - type: "string" - example: "AbLine" - heading: + lat: type: "number" - example: 356.5847091769351 - aPoint: - $ref: "#/components/schemas/Point" + format: "double" + description: "The latitude of the point" + example: 43.6187 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: 116.2146 Polygon: properties: "@Type": @@ -986,219 +1202,3 @@ components: example: "exterior" passable: type: "boolean" - Point: - type: "object" - properties: - "@Type": - type: "string" - example: "Point" - lat: - type: "number" - format: "double" - description: "The latitude of the point" - example: 43.6187 - lon: - type: "number" - format: "double" - description: "The longitude of the point" - example: 116.2146 - Extent: - type: "object" - properties: - "@Type": - type: "string" - example: "Extent" - topLeft: - $ref: "#/components/schemas/Point" - bottomRight: - $ref: "#/components/schemas/Point" - MeasurementAsDouble: - type: "object" - properties: - "@Type": - type: "string" - example: "MeasurementAsDouble" - valueAsDouble: - type: "number" - format: "double" - example: 7.502938 - vrDomainId: - type: "string" - example: "vrEastShiftComponent" - unit: - type: "string" - description: "The unit of measure for this value" - example: "ha" - Link: - description: "Link to another resource" - type: "object" - properties: - rel: - x-required-boolean: true - type: "string" - example: "self" - uri: - x-required-boolean: true - type: "string" - example: "https://sandboxapi.deere.com/platform/users/USER" - FieldGuidSearches: - type: "object" - properties: - "@Type": - type: "string" - example: "FieldGuidSearches" - fieldIds: - type: "array" - items: - type: "string" - format: "uuid" - example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" - clientName: - type: "string" - example: "client" - farmName: - type: "string" - example: "farm" - fieldName: - type: "string" - example: "field" - embeds: - type: "array" - items: - type: "string" - enum: - - "farms" - - "clients" - - "boundaries" - - "activeBoundary" - - "simplifiedBoundaries" - - "metadataOnlyBoundaries" - - "guidanceLines" - - "shapes" - - "accessPoints" - - "notes" - status: - type: "string" - enum: - - "AVAILABLE" - - "ARCHIVED" - - "ALL" - GetFarm: - type: "object" - properties: - "@type": - type: "string" - example: "Farm" - name: - type: "string" - example: "John Doe" - id: - type: "string" - format: "uuid" - example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" - readOnly: true - archived: - type: "boolean" - example: false - clientUri: - type: "string" - example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c" - links: - type: "array" - readOnly: true - items: - type: "object" - properties: - "@type": - type: "string" - example: "Link" - rel: - type: "string" - example: "self" - uri: - type: "string" - example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - CreateUpdateField: - description: "Place holder for Matt to create the field object to be created or updated." - type: "object" - properties: - "@Type": - type: "string" - example: "Field" - name: - type: "string" - example: "Land_Demo_1" - archived: - type: "boolean" - example: true - Farms: - type: "object" - properties: - "@Type": - type: "string" - example: "Farms" - farms: - type: "array" - items: - $ref: "#/components/schemas/CreateUpdateFarm" - Clients: - type: "object" - properties: - "@Type": - type: "string" - example: "Clients" - clients: - type: "array" - items: - $ref: "#/components/schemas/CreateUpdateClient" - examples: - getFieldsNoEmbed: - value: "{ \"links\":[ { \"rel\":\"self\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields\" }, { \"rel\":\"nextPage\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields;start=10;count=10\" } ], \"total\":1, \"values\":[ { \"@type\":\"Field\", \"name\":\"---\", \"id\":\"9369f3f6-2428-4bba-bf64-0a19cdaf007d\", \"links\":[ { \"@type\":\"Link\", \"rel\":\"self\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" }, { \"@type\":\"Link\", \"rel\":\"clients\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients\" }, { \"@type\":\"Link\", \"rel\":\"notes\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes\" }, { \"@type\":\"Link\", \"rel\":\"farms\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms\" }, { \"@type\":\"Link\", \"rel\":\"owningOrganization\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457\" }, { \"@type\":\"Link\", \"rel\":\"boundaries\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries\" }, { \"@type\":\"Link\", \"rel\":\"simplifiedBoundaries\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true\" }, { \"@type\":\"Link\", \"rel\":\"addBoundary\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries\" }, { \"@type\":\"Link\", \"rel\":\"fieldOperation\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations\" }, { \"@type\":\"Link\", \"rel\":\"guidanceLines\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines\" }, { \"@type\":\"Link\", \"rel\":\"addGuidanceTrack\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines\" }, { \"@type\":\"Link\", \"rel\":\"deleteField\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" }, { \"@type\":\"Link\", \"rel\":\"editField\", \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" } ] } ] }" - getFieldNoEmbed: - value: - "@type": "Field" - name: "---" - id: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" - links: - - "@type": "Link" - rel: "self" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - - "@type": "Link" - rel: "clients" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients" - - "@type": "Link" - rel: "notes" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes" - - "@type": "Link" - rel: "farms" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms" - - "@type": "Link" - rel: "owningOrganization" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457" - - "@type": "Link" - rel: "boundaries" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" - - "@type": "Link" - rel: "simplifiedBoundaries" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true" - - "@type": "Link" - rel: "addBoundary" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" - - "@type": "Link" - rel: "activeBoundary" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries/a34bfb73-7a36-4d93-9a24-9814a86f0f5d" - - "@type": "Link" - rel: "fieldOperation" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations" - - "@type": "Link" - rel: "guidanceLines" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" - - "@type": "Link" - rel: "addGuidanceTrack" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" - - "@type": "Link" - rel: "deleteField" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - - "@type": "Link" - rel: "editField" - uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" diff --git a/specs/fixed/files.yaml b/specs/fixed/files.yaml index e7839ed..f769a4e 100644 --- a/specs/fixed/files.yaml +++ b/specs/fixed/files.yaml @@ -19,6 +19,144 @@ servers: - "partnerapiqa" - "sandboxapiqa" paths: + /fileTransfers: + get: + summary: "List File Transfer Requests" + description: "This resource allows the client to check the status of a file transfer request that has already been submitted. The response will contain links to the following resources: file: View the file for which the transfer was requested. machine: View the machine to which the transfer was requested." + parameters: + - $ref: "#/components/parameters/Source2" + - $ref: "#/components/parameters/X-deere-signature_FileTransfers" + security: + - OAuth2: + - "files" + responses: + "200": + description: "File Transfer." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/FileLinkGet" + values: + items: + $ref: "#/components/schemas/FileValue" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers" + total: 2 + values: + - file: + name: "transferedFile1.zip" + type: "SETUP" + createdTime: "2014-01-13T12:15:51.159Z" + modifiedTime: "2014-01-13T12:16:09.443Z" + nativeSize: 927025 + source: "FitzwilliamDarcy" + status: "READY" + archived: false + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/7456" + id: "51234" + source: "HOST" + transferInitiationTime: "2014-01-13T12:16:15.924Z" + lastUpdatedTime: "2014-01-13T12:16:15.924Z" + status: "WDT_IN_PROCESS" + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/612" + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/1523" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/6234" + id: "4799048" + - file: + name: "transferedFile2.zip" + type: "SETUP" + createdTime: "2015-01-17T15:15:55.732Z" + modifiedTime: "2015-01-17T15:15:56.242Z" + nativeSize: 6813 + source: "LydiaBennett" + status: "READY" + archived: false + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/12345" + id: "1219063" + source: "HOST" + transferInitiationTime: "2013-01-17T15:18:41.512Z" + lastUpdatedTime: "2013-05-02T20:06:43.732Z" + status: "WDT_OPERATOR_REJECTED" + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/615" + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/243" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/7354" + id: "1219096" + /fileTransfers/{id}: + get: + summary: "View a File Transfer Request" + description: "This resource allows the client to check the status of a file transfer request that has already been submitted. The response will contain links to the following resources: file: View the file for which the transfer was requested. machine: View the machine to which the transfer was requested." + parameters: + - $ref: "#/components/parameters/Source" + - $ref: "#/components/parameters/Id" + security: + - OAuth2: + - "files" + responses: + "200": + description: "File Transfer by ID." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/FileTransfersLinkGet" + values: + items: + $ref: "#/components/schemas/FileTransfersValue" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + file: + name: "transferredFile1.zip" + type: "SETUP" + createdTime: "2015-06-09T09:42:55.817Z" + modifiedTime: "2015-06-09T09:43:01.693Z" + nativeSize: 9440 + source: "FitzwilliamDarcy" + status: "READY" + archived: false + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/15234" + id: "15234" + source: "HOST" + transferInitiationTime: "2015-06-09T09:43:01.381Z" + lastUpdatedTime: "2015-06-09T09:43:01.384Z" + status: "WDT_IN_PROCESS" + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/15234" + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/8237" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/61243" + id: "571637605" /files: get: summary: "List Files" @@ -116,6 +254,137 @@ paths: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/PutFiles" + /organizations/{orgId}/fileTransfers: + post: + summary: "Submit a File Transfer Request" + description: "This resource allows you to select a file and machine, and use the client software to submit a file transfer request. After that, MyJohnDeere API v3's infrastructure transfers the selected file to the selected machine, where it becomes available for the machine operator to use. The response links to the following resources: file: The file for which the transfer is being requested. machine: The machine to which the transfer is being requested." + parameters: + - $ref: "#/components/parameters/OrgId2" + security: + - OAuth2: + - "files" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FileTransfersPost" + examples: + Example with file and equipment link: + summary: "Example with file and equipment link" + value: + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/{fileId}" + - rel: "equipment" + uri: "https://equipmentapi.deere.com/isg/equipment?principalIds={machinePrincipalId}" + responses: + "200": + description: "File Transfer." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + $ref: "#/components/schemas/PostFileTransfersResponse" + get: + summary: "Get File Transfer List by Organization" + description: "This resource will retrieve list of all File Transfer by an Organization. The response will contain links to the following resources: file: View the file for which the transfer was requested. machine: View the machine to which the transfer was requested." + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Source" + security: + - OAuth2: + - "files" + responses: + "200": + description: "File Transfer." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/FileTransfersLinkGet" + values: + items: + $ref: "#/components/schemas/FileTransfersValue" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fileTransfers?source=ORGANIZATION" + total: 2 + values: + - "@type": "FileTransfer" + file: + "@type": "File" + name: "1H0S670SAE0765947_032020180053.zip" + type: "SETUP" + createdTime: "2018-03-20T05:53:47.476Z" + modifiedTime: "2018-03-20T21:10:41.325Z" + nativeSize: 80480 + source: "1H0S670SAE0765947" + status: "READY" + archived: false + id: "73391610" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/73391611" + source: "HOST" + transferInitiationTime: "2018-03-20T18:52:22.155Z" + lastUpdatedTime: "2018-03-20T21:11:35.519Z" + status: "WDT_AVAILABLE_TO_DISPLAY" + id: "73416642" + links: + - "@type": "Link" + rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/73391611" + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/8257" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/2551" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/73416642" + - "@type": "FileTransfer" + file: + "@type": "File" + name: "1H0S670SAE0765947_032020180053.zip" + type: "SETUP" + createdTime: "2018-03-20T05:53:47.476Z" + modifiedTime: "2018-03-20T21:10:41.325Z" + nativeSize: 80480 + source: "1H0S670SAE0765947" + status: "READY" + archived: false + id: "73391610" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/73391610" + source: "HOST" + transferInitiationTime: "2018-03-20T18:52:22.071Z" + lastUpdatedTime: "2018-03-20T21:11:34.379Z" + status: "WDT_AVAILABLE_TO_DISPLAY" + id: "73416640" + links: + - "@type": "Link" + rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/73391611" + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/8257" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/2551" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/73416640" /organizations/{orgId}/files: get: summary: "List an Org's Files" @@ -192,61 +461,39 @@ paths: schema: $ref: "#/components/schemas/PostFiles" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - files: "files" - ag3: "ag3" parameters: - OrganizationID: - in: "path" - name: "orgId" - description: "Organization" - x-required-boolean: true + Archived: + name: "archived" + in: "query" + description: "Allows client to filter files according to whether they have been archived. TRUE returns only archived files." schema: - type: "string" - default: "N/A" - example: 73 - OrganizationID2: - in: "path" - name: "orgId" - description: "Organization" - x-required-boolean: true + type: "boolean" + default: "false" + example: "true" + DelayProcessing: + name: "delayProcessing" + in: "body" + description: "Set to false to force the file to be processed if it would otherwise delay processing. Can only be used with a copyFrom link." schema: - type: "string" - example: 73 - OrganizationID3: + type: "boolean" + example: "false" + EndDate: + name: "endDate" + in: "query" + description: "Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the standard" + schema: + type: "dateTime" + default: "N/A" + example: "2015-02-03T10:42:24.282Z" + FileId: + name: "fileId" in: "path" - name: "orgId" - description: "Organization" + description: "File Id." x-required-boolean: true schema: type: "string" default: "N/A" - example: "5343535" - Filter: - in: "query" - name: "filter" - description: "Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host." - x-required-boolean: false - schema: - type: "string" - default: "ALL" - format: "int64" - example: "MACHINE" - FilterOptional: - in: "query" - name: "filter" - description: "Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host." - required: "Optional" - schema: - type: "string" - default: "ALL" - format: "int64" - example: "MACHINE" + example: 577499742 FileType: in: "query" name: "fileType" @@ -265,31 +512,50 @@ components: type: "integer" default: "N/A" example: "0" - X-deere-signature: - name: "x-deere-signature" - in: "header" + Filter: + in: "query" + name: "filter" + description: "Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host." x-required-boolean: false - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: type: "string" - example: "520122365ebb4870a344784570d202c7" - X-deere-signatureOptional: - name: "x-deere-signature" - in: "header" + default: "ALL" + format: "int64" + example: "MACHINE" + FilterOptional: + in: "query" + name: "filter" + description: "Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host." required: "Optional" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: type: "string" - example: "520122365ebb4870a344784570d202c7" - Transferable: - in: "query" - name: "transferable" - description: "Filters by whether a file is transferable" - required: "Optional" + default: "ALL" + format: "int64" + example: "MACHINE" + Id: + name: "id" + in: "path" + description: "File Transfer ID" + x-required-boolean: true schema: - type: "boolean" + type: "string" default: "N/A" - example: "true" + example: 1628996 + Links: + name: "links" + description: "Currently only supports a copyFrom rel, which can be passed to copy another file into the destination organization." + in: "body" + schema: + type: "Array of Links" + example: "[{\"rel\": \"copyFrom\", \"uri\": \"/files/12345\"}]" + Name: + name: "name" + in: "body" + description: "File name." + x-required-boolean: true + schema: + example: "back40Seeding.zip" + type: "string" Offset: name: "offset" in: "" @@ -299,6 +565,49 @@ components: type: "integer" default: "N/A" example: -1 + OrgId: + name: "orgId" + in: "path" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: 1234 + OrgId2: + name: "orgId" + in: "path" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + example: 1234 + OrganizationID: + in: "path" + name: "orgId" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: 73 + OrganizationID2: + in: "path" + name: "orgId" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + example: 73 + OrganizationID3: + in: "path" + name: "orgId" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: "5343535" Size: name: "size" in: "" @@ -308,15 +617,21 @@ components: type: "integer" default: "N/A" example: -1 - FileId: - name: "fileId" - in: "path" - description: "File Id." - x-required-boolean: true + Source: + name: "source" + in: "query" + description: "The source of the file transfer. Takes the values ORGANIZATION or MACHINE." schema: type: "string" default: "N/A" - example: 577499742 + example: "ORGANIZATION" + Source2: + name: "source" + in: "query" + description: "The source of the file transfer. Takes the values ORGANIZATION or MACHINE." + schema: + type: "string" + example: "ORGANIZATION" StartDate: name: "startDate" in: "query" @@ -326,14 +641,6 @@ components: format: "date-time" default: "N/A" example: "2013-01-04T14:08:51.104Z" - EndDate: - name: "endDate" - in: "query" - description: "Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the standard" - schema: - type: "dateTime" - default: "N/A" - example: "2015-02-03T10:42:24.282Z" Status: name: "status" in: "query" @@ -342,37 +649,90 @@ components: type: "string" default: "N/A" example: "TRANSFERABLE" - Archived: - name: "archived" + Transferable: in: "query" - description: "Allows client to filter files according to whether they have been archived. TRUE returns only archived files." + name: "transferable" + description: "Filters by whether a file is transferable" + required: "Optional" schema: type: "boolean" - default: "false" + default: "N/A" example: "true" - Name: - name: "name" - in: "body" - description: "File name." - x-required-boolean: true - schema: - example: "back40Seeding.zip" - type: "string" - DelayProcessing: - name: "delayProcessing" - in: "body" - description: "Set to false to force the file to be processed if it would otherwise delay processing. Can only be used with a copyFrom link." + X-deere-signature: + name: "x-deere-signature" + in: "header" + x-required-boolean: false + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: "boolean" - example: "false" - Links: - name: "links" - description: "Currently only supports a copyFrom rel, which can be passed to copy another file into the destination organization." - in: "body" + type: "string" + example: "520122365ebb4870a344784570d202c7" + X-deere-signatureOptional: + name: "x-deere-signature" + in: "header" + required: "Optional" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: "Array of Links" - example: "[{\"rel\": \"copyFrom\", \"uri\": \"/files/12345\"}]" + type: "string" + example: "520122365ebb4870a344784570d202c7" + X-deere-signature_FileTransfers: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000" responses: + FileIdGet: + description: "Successful operation" + content: + application/zip: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/octet-stream: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/x-zip: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/x-zip-compressed: + schema: + description: "Based on value of embed request param one of the above response object is returned" + multipart/mixed: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/vnd.deere.axiom.v3+json: + schema: + description: "Based on value of embed request param one of the above response object is returned" + properties: + links: + items: + $ref: "#/components/schemas/FilesLink" + values: + items: + $ref: "#/components/schemas/ValueFileIdGet" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + id: "577499742" + name: "back40.zip" + type: "SETUP" + createdTime: "2015-02-03T10:42:24.282Z" + modifiedTime: "2015-02-03T10:42:24.282Z" + nativeSize: "72946" + source: "JohnDoe" + transferPending: "false" + visibleViaShare: "owned" + shared: "false" + status: "UPLOAD_PENDING" + archived: "false" + assigned: "false" + new: "false" + links: + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/2101" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/466578633" FileListResponse: description: "Successful operation" content: @@ -426,58 +786,103 @@ components: archived: "false" assigned: "false" new: "false" - FileIdGet: - description: "Successful operation" - content: - application/zip: - schema: - description: "Based on value of embed request param one of the above response object is returned" - application/octet-stream: - schema: - description: "Based on value of embed request param one of the above response object is returned" - application/x-zip: - schema: - description: "Based on value of embed request param one of the above response object is returned" - application/x-zip-compressed: - schema: - description: "Based on value of embed request param one of the above response object is returned" - multipart/mixed: - schema: - description: "Based on value of embed request param one of the above response object is returned" - application/vnd.deere.axiom.v3+json: + schemas: + EditableFileDetails: + type: "object" + properties: + name: + type: "string" + example: "RW8360R907628_12062012.zip" + archived: + type: "boolean" + description: "Indicates whether the file has been archived." + example: false + delayProcessing: + type: "boolean" + description: "If set to true, then processing of the file will be delayed until this is toggled to false." + example: false + FileLinkGet: + properties: + file: + example: "https://sandboxapi.deere.com/platform/files/612" + description: "Files Link." + machine: + example: "https://sandboxapi.deere.com/platform/machines/1523" + description: "Machines Link." + FileTransfersLink: + properties: + file: + example: "https://sandboxapi.deere.com/platform/files/fileID" + description: "Files Link." + machine: + example: "https://sandboxapi.deere.com/platform/machines/machineID" + description: "Machines Link." + FileTransfersLinkAPIInteractions: + properties: + Status: + description: "Status." + location: + description: "The url of the created resources" schema: - description: "Based on value of embed request param one of the above response object is returned" + type: "string" + example: "https://sandboxapi.deere.com/platform/FileTransfer/7482" + FileTransfersLinkGet: + properties: + file: + example: "https://sandboxapi.deere.com/platform/files/15234" + description: "Files Link." + machine: + example: "https://sandboxapi.deere.com/platform/machines/8237" + description: "Machines Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organization Link." + FileTransfersPost: + type: "object" + properties: + links: + type: "array" + items: + type: "object" properties: - links: - items: - $ref: "#/components/schemas/FilesLink" - values: - items: - $ref: "#/components/schemas/ValueFileIdGet" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" - value: - id: "577499742" - name: "back40.zip" - type: "SETUP" - createdTime: "2015-02-03T10:42:24.282Z" - modifiedTime: "2015-02-03T10:42:24.282Z" - nativeSize: "72946" - source: "JohnDoe" - transferPending: "false" - visibleViaShare: "owned" - shared: "false" - status: "UPLOAD_PENDING" - archived: "false" - assigned: "false" - new: "false" - links: - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/2101" - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/files/466578633" - schemas: + rel: + type: "string" + enum: + - "file" + - "equipment" + x-required-boolean: true + uri: + type: "string" + format: "uri" + x-required-boolean: true + FileTransfersValue: + properties: + file: + description: "Information on the transferred file, including name, type, created type, modified time, native size, source, status, and whether it was archived." + example: "See sample response below." + type: "---" + id: + type: "string" + description: "File Transfer ID" + example: 1628996 + source: + type: "string" + description: "File source. If the request parameter value for source is MACHINE, this response value will also be MACHINE. If the request parameter value for source is ORGANIZATION, this response value will be HOST." + example: "HOST" + transferInitiationTime: + type: "string" + format: "date-time" + description: "Timestamp of when the file transfer was initiated.All timestamps are formatted according to the standard." + example: "2015-06-09T09:43:01.381Z" + lastUpdatedTime: + type: "string" + format: "date-time" + description: "Timestamp of when the file transfer was last updated.All timestamps are formatted according to the standard." + example: "2015-06-09T09:43:01.384Z" + status: + type: "string" + description: "Status of the file transfer." + example: "WDT_AVAILABLE_TO_DISPLAY" FileType: type: "string" enum: @@ -496,62 +901,38 @@ components: - "BOUNDARY" - "EXCEL" example: "SETUP" - PostableFileDetails: - allOf: - - $ref: "#/components/schemas/EditableFileDetails" - - type: "object" - properties: - type: - $ref: "#/components/schemas/FileType" - source: - type: "string" - description: "The source of the file (e.g., the display type or user that uploaded it)" - example: "myUserName" - contextMetadata: - type: "object" - description: "Contextual metadata for the file, such as frequency, report type, machines, and fields" - example: - frequency: "DAILY" - reportType: "CONNECTIVITY" - machines: - - "eb8a4a58-9d94-4c98-ae56-09331aa0ff50" - - "3341fe33-4825-464b-8442-3f17fa876cd1" - fields: - - "3341fe33-4825-464b-8442-3f17fa876cd1" - - "3341fe33-4825-464b-8442-3f17fa876cd1" - customMetadata: - type: "object" - description: "Additional custom metadata for the file" - example: - time_range_start: "2025-07-01T00:00:00Z" - time_range_end: "2025-07-28T00:00:00Z" - locale: "en-US" - time_zone: "UTC" - unit_of_measure: "XYZ" - user_type: "Admin" - schedule_id: "124jsg" - EditableFileDetails: - type: "object" + FileValue: properties: - name: + x-deere-signature: type: "string" - example: "RW8360R907628_12062012.zip" - archived: - type: "boolean" - description: "Indicates whether the file has been archived." - example: false - delayProcessing: - type: "boolean" - description: "If set to true, then processing of the file will be delayed until this is toggled to false." - example: false - FilesLink: - properties: - owningOrganization: - example: "https://sandboxapi.deere.com/platform/organizations/1234" - description: "Organization Link." - partnerships: - example: "https://sandboxapi.deere.com/platform/files/466578633/partnerships" - description: "Partnership Link." + example: "877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + file: + description: "Information on the transferred file, including name, type, created type, modified time, native size, source, status, and whether it was archived." + example: "See sample response below." + type: "object" + id: + type: "string" + default: "N/A" + description: "File Transfer ID" + example: 51234 + source: + type: "string" + default: "N/A" + description: "File source. If the request parameter value for source is MACHINE, this response value will also be MACHINE. If the request parameter value for source is ORGANIZATION, this response value will be HOST." + example: "HOST" + transferInitiationTime: + type: "string" + description: "Timestamp of when the file transfer was initiated.All timestamps are formatted according to the standard." + example: "2018-03-20T18:52:22.155Z" + lastUpdatedTime: + type: "string" + description: "Timestamp of when the file transfer was last updated.All timestamps are formatted according to the standard." + example: "2018-03-20T21:11:35.519Z" + status: + type: "string" + description: "Status of the file transfer." + example: "WDT_IN_PROCESS" FilesGet: type: "object" properties: @@ -624,6 +1005,71 @@ components: type: "string" example: "AgLeader" description: "Indicates the manufacturer." + FilesLink: + properties: + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organization Link." + partnerships: + example: "https://sandboxapi.deere.com/platform/files/466578633/partnerships" + description: "Partnership Link." + PostFileTransfersResponse: + description: "File Transfers Post Api Response." + properties: + Location: + description: "The URL of the created resource." + type: "string" + example: "https://sandboxapi.deere.com/platform/fileTransfers/7482" + PostFiles: + properties: + "201": + description: "The file was successfully created." + example: "Created" + "400": + description: "File names must be between 5 and 69 characters and may only contain international alphanumeric characters, spaces, and any of the following: \".,-_\". Specifically, it must match the following Unicode regular expression: ^[\\p{N}\\p{L}.,_ \\-]+$" + example: "Must be between 5 and 69 characters Should not contain invalid characters." + PostableFileDetails: + allOf: + - $ref: "#/components/schemas/EditableFileDetails" + - type: "object" + properties: + type: + $ref: "#/components/schemas/FileType" + source: + type: "string" + description: "The source of the file (e.g., the display type or user that uploaded it)" + example: "myUserName" + contextMetadata: + type: "object" + description: "Contextual metadata for the file, such as frequency, report type, machines, and fields" + example: + frequency: "DAILY" + reportType: "CONNECTIVITY" + machines: + - "eb8a4a58-9d94-4c98-ae56-09331aa0ff50" + - "3341fe33-4825-464b-8442-3f17fa876cd1" + fields: + - "3341fe33-4825-464b-8442-3f17fa876cd1" + - "3341fe33-4825-464b-8442-3f17fa876cd1" + customMetadata: + type: "object" + description: "Additional custom metadata for the file" + example: + time_range_start: "2025-07-01T00:00:00Z" + time_range_end: "2025-07-28T00:00:00Z" + locale: "en-US" + time_zone: "UTC" + unit_of_measure: "XYZ" + user_type: "Admin" + schedule_id: "124jsg" + PutFiles: + properties: + "204": + description: "The file was updated." + example: "No Content" + "400": + description: "File names must be between 1 and 45 characters and may only contain international alphanumeric characters, spaces, and any of the following: \".,-_\". Specifically, it must match the following Unicode regular expression: ^[\\p{N}\\p{L}.,_ \\-]+$" + example: "Must be between 1 and 45 characters Should not contain invalid characters." ValueFileIdGet: type: "object" properties: @@ -684,19 +1130,22 @@ components: type: "boolean" example: "false" description: "Indicates whether the file is new." - PostFiles: - properties: - "201": - description: "The file was successfully created." - example: "Created" - "400": - description: "File names must be between 5 and 69 characters and may only contain international alphanumeric characters, spaces, and any of the following: \".,-_\". Specifically, it must match the following Unicode regular expression: ^[\\p{N}\\p{L}.,_ \\-]+$" - example: "Must be between 5 and 69 characters Should not contain invalid characters." - PutFiles: - properties: - "204": - description: "The file was updated." - example: "No Content" - "400": - description: "File names must be between 1 and 45 characters and may only contain international alphanumeric characters, spaces, and any of the following: \".,-_\". Specifically, it must match the following Unicode regular expression: ^[\\p{N}\\p{L}.,_ \\-]+$" - example: "Must be between 1 and 45 characters Should not contain invalid characters." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + files: "files" + ag3: "ag3" + OAuth2_FileTransfers: + type: "oauth2" + flows: + clientCredentials: + scopes: + files: "files" +x-source-documents: + - endPointName: "files-api" + id: 18 + - endPointName: "file-transfers" + id: 19 diff --git a/specs/fixed/flags.yaml b/specs/fixed/flags.yaml index ede6be2..fa18a7b 100644 --- a/specs/fixed/flags.yaml +++ b/specs/fixed/flags.yaml @@ -19,15 +19,19 @@ servers: - "partnerapiqa" - "sandboxapiqa" paths: - /organizations/{orgId}/flags/{flagId}: + /organizations/{orgId}/fields/{fieldId}/flags: get: - summary: "List a flag by org id and Flag id" + operationId: "getOrgFieldFlags" + summary: "List flags for the field" + tags: + - "Flags APIs" + description: "This resource will return a list of flag objects associated with the field." security: - OAuth2: - "ag1" parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/FlagId" + - $ref: "#/components/parameters/OrgId3" + - $ref: "#/components/parameters/FieldId" - $ref: "#/components/parameters/Accept-Language" - $ref: "#/components/parameters/Embed" - $ref: "#/components/parameters/StartTime" @@ -35,90 +39,244 @@ paths: - $ref: "#/components/parameters/CategoryIds" - $ref: "#/components/parameters/CategoryNames" - $ref: "#/components/parameters/RecordFilter" - - $ref: "#/components/parameters/FlagScopes" - $ref: "#/components/parameters/ShapeTypes" - $ref: "#/components/parameters/Simple" - $ref: "#/components/parameters/MetadataOnly" - operationId: "getFlagForOrganizationByFlagId" + responses: + "200": + $ref: "#/components/responses/GetOrgId" + "403": + description: "Forbidden. The user has no access to the given flag" + "404": + description: "Entity Not found. No organization and/or field with these ids." + /organizations/{orgId}/flagCategories: + get: + summary: "List Flags Category Collection" + operationId: "getFlagCategoriesForOrganization" tags: - - "Flags APIs" - description: "This endpoint will return a flag for a given org and Flag id." + - "Flag Categories APIs" + description: "This resource will return a Flags Category Collection for Organization." + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId4" + - $ref: "#/components/parameters/Accept-Language_FlagCategories" + - $ref: "#/components/parameters/Embed_FlagCategories" responses: "200": - $ref: "#/components/responses/FlagIdGet" + description: "Returns collection of flag categories which includes reference and user-defined categories." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/LinkCategoryId2" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + type: "array" + items: + $ref: "#/components/schemas/FlagCategory2" + examples: + Headers: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/flagCategories" + total: 1 + values: + - "@type": "FlagCategory" + categoryTitle: "LineWithWidth" + preferred: false + id: "835b863c-1997-451d-8850-1123ff4ec0e3" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "updateCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + - "@type": "Link" + rel: "deleteCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" "403": - description: "Access forbidden. The user does not have permission to access the given organization." + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." "404": - description: "Entity Not found. No organization present for given orgId or no flag id present in the given org id" - put: - operationId: "updateFlagByIdOrgId" - summary: "Update flag by id" + description: "Entity Not found. No organization present for given orgId." + post: + operationId: "createFlagCategory" + summary: "Create a custom category" + parameters: + - $ref: "#/components/parameters/OrgId4" tags: - - "Flags APIs" - description: "This resource will update flag by Organization and Flag Id." + - "Flag Categories APIs" + description: "This resource will create a custom category in the given organization." security: - OAuth2: - "ag3" - parameters: - - $ref: "#/components/parameters/OrgId2" - - $ref: "#/components/parameters/FlagId" requestBody: + description: "This resource will create a custom category in the given organization." + x-required-boolean: true content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/ValuesFlagIdPut" + $ref: "#/components/schemas/PutResponse" examples: No Header: value: - "@type": "Flag" - id: "FlagId" - notes: "SomeRandomString" - geometry: - type: "Point" - coordinates: - - -95.14959274063109 - - 42.668815484 + "@type": "FlagCategory" + categoryTitle: "Rocks" + preferred: true archived: false - proximityAlertEnabled: false + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/flagCategories/fc602ae8-4351-4640-9de8-88792bda83d7" + "400": + description: "Invalid body - Bad Request" + "403": + description: "Forbidden - Given Invalid orgId or the user doesn't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No organization present for given orgId or no contribution definition ID is found." + "409": + description: "Conflict. User creates flag category with such title which is already being used in one of the existing category." + /organizations/{orgId}/flagCategories/{categoryId}: + get: + operationId: "getFlagCategoryByIdOrgId" + summary: "Get flag category by id" + tags: + - "Flag Categories APIs" + description: "This resource will return a flag category with the name translated into the specified language. The category can be a reference flagCategory, a master flagCategory created from a referenced flagCategory or a user-defined category." + parameters: + - $ref: "#/components/parameters/Accept-Language_FlagCategories" + - $ref: "#/components/parameters/Embed_FlagCategories" + - $ref: "#/components/parameters/OrgId_FlagCategories" + - $ref: "#/components/parameters/CategoryId" + security: + - OAuth2: + - "ag1" + responses: + "200": + description: "Returns flag category." + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: links: - - "@type": "Link" - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" - - "@type": "Link" - rel: "flagCategory" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/flagCategories/CATEGORYID" - - "@type": "Link" - rel: "field" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID" + items: + $ref: "#/components/schemas/LinkCategoryId" + values: + items: + $ref: "#/components/schemas/FlagCategory" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "FlagCategory" + categoryTitle: "Rocks" + sourceNode: "7ba95d7a-f798-46d0-9bf9-c39c31bcf984" + preferred: true + id: "7c602ae8-4351-4640-9de8-88792bda83d7" + createdDate: "2018-12-28T09:17:10.694Z" + lastModifiedDate: "2018-12-28T09:17:10.694Z" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "updateCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + - "@type": "Link" + rel: "deleteCategory" + uri: "https://sandboxapi.deere.com/platform/organizations/{orgId}/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No organization present for given orgId or given flag category does not exist" + put: + operationId: "updateFlagCategoryByIdOrgId" + summary: "Update flag category by organization and flag category Id" + tags: + - "Flag Categories APIs" + description: "This resource will update flag category by Id." + parameters: + - $ref: "#/components/parameters/OrgId2_FlagCategories" + - $ref: "#/components/parameters/CategoryId2" + security: + - OAuth2: + - "ag3" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutResponse" + examples: + No Header: + value: + "@type": "FlagCategory" + categoryTitle: "Rocks" + archived: false + preferred: true responses: "200": - description: "Update response by Flag Id" + description: "No Content. Successfully updated." content: application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" examples: Headers: description: "204 No Content" "400": - description: "- No contributionDefinition link specified - No category link specified" + description: "Invalid body - Bad Request" "403": description: "Forbidden Access" "404": - description: "Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org" + description: "Entity Not found. Missing or incorrect categoryId in the org Or incorrect org" delete: - operationId: "deleteFlagByIdOrgId" - summary: "Delete a flag for a given org" + operationId: "deleteFlagCategoryByIdOrgId" + summary: "Delete a flag category" tags: - - "Flags APIs" - description: "This resource will delete a single flag based on its Id and org id" + - "Flag Categories APIs" + description: "This resource will delete a single empty category based on the categoryId and orgId." + parameters: + - $ref: "#/components/parameters/OrgId3_FlagCategories" + - $ref: "#/components/parameters/CategoryId2" security: - OAuth2: - "ag3" - parameters: - - $ref: "#/components/parameters/FlagId" - - $ref: "#/components/parameters/OrgId" responses: "200": - description: "No Content. Flag deleted successfully." + description: "No Content. Flag Category deleted successfully." content: application/vnd.deere.axiom.v3+json: schema: @@ -131,9 +289,162 @@ paths: Headers: description: "204 No Content" "403": - description: "Forbidden. - The user has no permission to delete the flag." + description: "Forbidden. - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. - The user has no permission to delete the flag category." "404": - description: "Entity Not found. Given flag id does not exist or given orgId does not present." + description: "Entity Not found. Given category id does not exist or given orgId does not exist." + /organizations/{orgId}/flagCategories/{categoryId}/flagCategoryPreferences: + get: + operationId: "getFlagCategoryPreferencesByIdOrgId" + summary: "List collection of FlagCategoryPreference" + tags: + - "Flag Categories Preferences" + description: "This endpoint will return a collection of FlagCategoryPreference objects associated with the given flag category. The object with the key \"default\" is created automatically on the 1st access to the flagCategory object by a client. The default preference object shall be initialized with default values: prefKey: \"default\" hexColor: \"#FFFFFF\"" + parameters: + - $ref: "#/components/parameters/PrefKey" + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/CategoryId_FlagCategoriesPreferences" + security: + - OAuth2: + - "ag1" + responses: + "200": + description: "Returns the preferences object for the given flag category." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GetPreferences" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + items: + $ref: "#/components/schemas/FlagCategoryPreference" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + id: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: "default" + hexColor: "#0BA74A" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2018-07-01T21:10:10Z" + links: + - rel: "modifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/rostaninoleg" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No category with this id." + /organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId}: + get: + operationId: "getFlagCategoryPreferenceByIdOrgId" + summary: "View preferences object for a category" + parameters: + - $ref: "#/components/parameters/OrgId_FlagCategoriesPreferences" + - $ref: "#/components/parameters/FlagCategoryPreferencesId" + tags: + - "Flag Categories Preferences" + security: + - OAuth2: + - "ag1" + description: "This resource will return the preferences object for the given flag category and org" + responses: + "200": + description: "Returns the preferences object identified by its global ID." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GetPreferences" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + items: + $ref: "#/components/schemas/FlagCategoryPreference" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + id: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: "default" + hexColor: "#0BA74A" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2018-07-01T21:10:10Z" + links: + - rel: "modifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/rostaninoleg" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No reference category with this id." + put: + operationId: "updateFlagCategoryPreferenceByIdOrgId" + summary: "Update flag category preferences" + tags: + - "Flag Categories Preferences" + description: "This resource will update flag category preferences by Id and Org" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/FlagCategoryPreferencesId2" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FlagCategoryPreference" + examples: + No Header: + value: + id: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: "default" + hexColor: "#0BA74A" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2018-07-01T21:10:10Z" + links: + - rel: "modifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/USERNAME" + responses: + "204": + description: "No Content. Successfully updated." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/PutPreferences" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + examples: + Headers: + description: "204 No Content" + "400": + description: "Invalid body - Bad Request" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. Incorrect flagCategoryPreferencesId." /organizations/{orgId}/flags: post: operationId: "createFlag" @@ -208,19 +519,15 @@ paths: $ref: "#/components/responses/FlagsGet" "403": description: "Access forbidden. The user does not have permission to access the given organization, or the organization does not exist." - /organizations/{orgId}/fields/{fieldId}/flags: + /organizations/{orgId}/flags/{flagId}: get: - operationId: "getOrgFieldFlags" - summary: "List flags for the field" - tags: - - "Flags APIs" - description: "This resource will return a list of flag objects associated with the field." + summary: "List a flag by org id and Flag id" security: - OAuth2: - "ag1" parameters: - - $ref: "#/components/parameters/OrgId3" - - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FlagId" - $ref: "#/components/parameters/Accept-Language" - $ref: "#/components/parameters/Embed" - $ref: "#/components/parameters/StartTime" @@ -228,26 +535,192 @@ paths: - $ref: "#/components/parameters/CategoryIds" - $ref: "#/components/parameters/CategoryNames" - $ref: "#/components/parameters/RecordFilter" + - $ref: "#/components/parameters/FlagScopes" - $ref: "#/components/parameters/ShapeTypes" - $ref: "#/components/parameters/Simple" - $ref: "#/components/parameters/MetadataOnly" + operationId: "getFlagForOrganizationByFlagId" + tags: + - "Flags APIs" + description: "This endpoint will return a flag for a given org and Flag id." responses: "200": - $ref: "#/components/responses/GetOrgId" + $ref: "#/components/responses/FlagIdGet" "403": - description: "Forbidden. The user has no access to the given flag" + description: "Access forbidden. The user does not have permission to access the given organization." "404": - description: "Entity Not found. No organization and/or field with these ids." + description: "Entity Not found. No organization present for given orgId or no flag id present in the given org id" + put: + operationId: "updateFlagByIdOrgId" + summary: "Update flag by id" + tags: + - "Flags APIs" + description: "This resource will update flag by Organization and Flag Id." + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/OrgId2" + - $ref: "#/components/parameters/FlagId" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ValuesFlagIdPut" + examples: + No Header: + value: + "@type": "Flag" + id: "FlagId" + notes: "SomeRandomString" + geometry: + type: "Point" + coordinates: + - -95.14959274063109 + - 42.668815484 + archived: false + proximityAlertEnabled: false + links: + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "flagCategory" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/flagCategories/CATEGORYID" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID" + responses: + "200": + description: "Update response by Flag Id" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "- No contributionDefinition link specified - No category link specified" + "403": + description: "Forbidden Access" + "404": + description: "Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org" + delete: + operationId: "deleteFlagByIdOrgId" + summary: "Delete a flag for a given org" + tags: + - "Flags APIs" + description: "This resource will delete a single flag based on its Id and org id" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/FlagId" + - $ref: "#/components/parameters/OrgId" + responses: + "200": + description: "No Content. Flag deleted successfully." + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + "403": + description: "Forbidden. - The user has no permission to delete the flag." + "404": + description: "Entity Not found. Given flag id does not exist or given orgId does not present." components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag1: "ag1" - ag3: "ag3" parameters: + Accept-Language: + name: "Accept-Language" + in: "header" + description: "If embedding flag category, language that category name shall be returned within a flag, e.g., \"de-DE\"" + schema: + type: "string" + default: "en" + example: "de-DE" + Accept-Language_FlagCategories: + name: "Accept-Language" + in: "header" + description: "Language category names are being returned by the endpoint." + x-required-boolean: false + schema: + type: "string" + default: "en" + example: "de-DE" + CategoryId: + name: "categoryId" + in: "path" + description: "CategoryId to query for Category." + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: "7ba95d7a-f798-46d0-9bf9-c39c31bcf984" + CategoryId2: + name: "categoryId" + in: "path" + description: "CategoryId to query for Category." + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: "688c20bb-9609-4590-95c9-649ba65c06df" + CategoryId_FlagCategoriesPreferences: + name: "categoryId" + in: "path" + description: "CategoryId to query for preferences." + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: "7ba95d7a-f798-46d0-9bf9-c39c31bcf984" + CategoryIds: + name: "categoryIDs" + in: "query" + description: "Specify a comma-separated list of category GUIDs to retrieve" + schema: + type: "string" + default: "N/A" + example: "688c20bb-9609-4590-95c9-649ba65c06df,0aed8e88-c27c-424b-8b66-babfe7fcf5ee" + CategoryNames: + name: "categoryNames" + in: "query" + description: "Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used" + schema: + type: "string" + default: "N/A" + example: "ROCKS,WEEDS" + Embed: + name: "embed" + in: "query" + description: "Embed additional attributes if required to reduce the number of requests" + schema: + type: "string" + default: "N/A" + example: "flagCategory, flagCategoryWithPreferences, field, showRecordMetadata" + Embed_FlagCategories: + name: "embed" + in: "query" + description: "Embed additional attributes if required." + x-required-boolean: false + schema: + type: "string" + default: "N/A" + example: "preferences" + EndTime: + name: "endTime" + in: "query" + description: "Flags created before end time (in UTC) will be returned" + schema: + type: "string" + default: "now" + example: "2018-08-01T00:00:00Z" FieldId: name: "fieldId" in: "path" @@ -258,6 +731,49 @@ components: format: "uuid" default: "N/A" example: "c634597d-3d1a-4975-93e9-acc6696658d2" + FlagCategoryPreferencesId: + name: "flagCategoryPreferencesId" + in: "path" + description: "flagCategoryPreferencesId to query for preferences." + x-required-boolean: true + schema: + example: "9ba95d7a-f798-46d0-9bf9-c39c31bcf984" + default: "N/A" + type: "string" + FlagCategoryPreferencesId2: + name: "flagCategoryPreferencesId" + in: "path" + description: "flagCategoryPreferencesId to query for preferences." + x-required-boolean: true + schema: + example: "688c20bb-9609-4590-95c9-649ba65c06df" + default: "N/A" + type: "string" + FlagId: + name: "flagId" + in: "path" + description: "flagId to query for flag" + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: "688c20bb-9609-4590-95c9-649ba65c06df" + FlagScopes: + name: "flagScopes" + in: "query" + description: "Specify whether to request global flags, field-related flags or both" + schema: + type: "string" + default: "all" + example: "global, field, all" + MetadataOnly: + name: "metadataOnly" + in: "query" + description: "Does not populate geometry, overrides simple if both are true" + schema: + type: "boolean" + default: "false" + example: "false" OrgId: name: "orgId" in: "path" @@ -276,72 +792,78 @@ components: type: "string" default: "N/A" example: 123456 - OrgId3: + OrgId2_FlagCategories: name: "orgId" in: "path" - description: "Organization Id where the Flag belongs to" x-required-boolean: true + description: "Organization Id." schema: type: "string" default: "N/A" example: 123456 - FlagId: - name: "flagId" + OrgId3: + name: "orgId" in: "path" - description: "flagId to query for flag" + description: "Organization Id where the Flag belongs to" x-required-boolean: true schema: type: "string" default: "N/A" - example: "688c20bb-9609-4590-95c9-649ba65c06df" - Accept-Language: - name: "Accept-Language" - in: "header" - description: "If embedding flag category, language that category name shall be returned within a flag, e.g., \"de-DE\"" + example: 123456 + OrgId3_FlagCategories: + name: "orgId" + in: "path" + x-required-boolean: true + description: "OrgId to query for Category" schema: type: "string" - default: "en" - example: "de-DE" - Embed: - name: "embed" - in: "query" - description: "Embed additional attributes if required to reduce the number of requests" + default: "N/A" + example: 2101 + OrgId4: + name: "orgId" + in: "path" + x-required-boolean: true + description: "Organization Id where the Flag category belongs to" schema: type: "string" default: "N/A" - example: "flagCategory, flagCategoryWithPreferences, field, showRecordMetadata" - StartTime: - name: "startTime" - in: "query" - description: "Flags created after start time (in UTC) will be returned" + example: 123456 + OrgId_FlagCategories: + name: "orgId" + in: "path" + x-required-boolean: true + description: "OrgId to query for Org." schema: type: "string" default: "N/A" - example: "2018-08-01T00:00:00Z" - EndTime: - name: "endTime" - in: "query" - description: "Flags created before end time (in UTC) will be returned" + example: 123456 + OrgId_FlagCategoriesPreferences: + name: "orgId" + in: "path" + description: "orgId to query for preferences." + x-required-boolean: true schema: type: "string" - default: "now" - example: "2018-08-01T00:00:00Z" - CategoryIds: - name: "categoryIDs" - in: "query" - description: "Specify a comma-separated list of category GUIDs to retrieve" + default: "N/A" + example: 123456 + OrganizationId: + name: "organizationId" + in: "path" + description: "orgId to query for preferences." + x-required-boolean: true schema: type: "string" default: "N/A" - example: "688c20bb-9609-4590-95c9-649ba65c06df,0aed8e88-c27c-424b-8b66-babfe7fcf5ee" - CategoryNames: - name: "categoryNames" + example: 123456 + PrefKey: + name: "prefKey" in: "query" - description: "Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used" + description: "CategoryId to query for preferences" + x-required-boolean: false schema: type: "string" - default: "N/A" - example: "ROCKS,WEEDS" + example: "default" + default: "default" RecordFilter: name: "recordFilter" in: "query" @@ -350,14 +872,6 @@ components: type: "string" default: "active" example: "active, archived, all" - FlagScopes: - name: "flagScopes" - in: "query" - description: "Specify whether to request global flags, field-related flags or both" - schema: - type: "string" - default: "all" - example: "global, field, all" ShapeTypes: name: "shapeTypes" in: "query" @@ -374,14 +888,14 @@ components: type: "boolean" default: "false" example: "false" - MetadataOnly: - name: "metadataOnly" + StartTime: + name: "startTime" in: "query" - description: "Does not populate geometry, overrides simple if both are true" + description: "Flags created after start time (in UTC) will be returned" schema: - type: "boolean" - default: "false" - example: "false" + type: "string" + default: "N/A" + example: "2018-08-01T00:00:00Z" responses: FlagIdGet: description: "Get response by Flag Id" @@ -511,6 +1025,117 @@ components: Headers: description: "201 Created Location: https://sandboxapi.deere.com/platform/flags/3e4f37a4-5667-49ae-9f6b-5a13e446dee6" schemas: + ContentType: + properties: {} + FlagCategory: + properties: + categoryTitle: + type: "string" + description: "Name of the category." + example: "Rocks" + archived: + type: "boolean" + description: "Whether or not the category is archived" + example: "false" + default: false + preferred: + type: "boolean" + description: "Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org." + example: "true" + id: + type: "string" + format: "uuid" + readOnly: true + description: "GUID of a flag category." + example: "7c602ae8-4351-4640-9de8-88792bda83d7" + createdDate: + type: "string" + format: "date-time" + example: "2018-12-28T09:17:10.694Z" + lastModifiedDate: + type: "string" + format: "date-time" + example: "2018-12-28T09:17:10.694Z" + FlagCategory2: + properties: + categoryTitle: + type: "string" + description: "Name of the category." + example: "Rocks" + archived: + type: "boolean" + description: "Whether or not the category is archived" + example: "false" + default: false + preferred: + type: "boolean" + description: "Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org." + example: "true" + id: + type: "string" + format: "uuid" + readOnly: true + description: "GUID of a flag category." + example: "688c20bb-9609-4590-95c9-649ba65c06df" + createdDate: + type: "string" + example: "2018-12-18T13:29:14.167Z" + lastModifiedDate: + type: "string" + example: "2018-12-18T13:29:30.924Z" + FlagCategoryPreference: + type: "object" + description: "The object for keeping visual and non-visual preferences for the given FlagCategory." + properties: + id: + type: "string" + description: "Id of the FlagCategoryPreferences resource." + format: "GUID" + example: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: + type: "string" + description: "Key name for the preference object to be identified by clients to support client-specific preferences" + example: "default" + default: "default" + hexColor: + type: "string" + description: "Color code for the flag category in hexadecimal format." + example: "#0BA74A" + createdTime: + type: "string" + format: "date-time" + example: "2018-07-01T21:00:11Z" + modifiedTime: + example: "2018-07-01T21:10:10Z" + type: "string" + format: "date-time" + GetPreferences: + properties: + modifiedBy: + example: "https://sandboxapi.deere.com/platform/users/rostaninoleg" + description: "Users Link." + LinkCategoryId: + properties: + organization: + description: "Organization Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456" + updateCategory: + description: "Update Category Link." + example: "https://sandboxapi.deere.com/platform/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + deleteCategory: + description: "Delete Category Link." + example: "https://sandboxapi.deere.com/platform/organizations/{orgId}/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + LinkCategoryId2: + properties: + organization: + description: "Organization Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456" + updateCategory: + description: "Update Category Link." + example: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + deleteCategory: + description: "Delete Category Link." + example: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" LinkFlagId: properties: flagCategoryWithPrefrences: @@ -546,8 +1171,26 @@ components: field: example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID" description: "Field Link." - ContentType: - properties: {} + PutPreferences: + properties: + modifiedBy: + example: "https://sandboxapi.deere.com/platform/users/USERNAME" + description: "Users Link." + PutResponse: + properties: + categoryTitle: + type: "string" + description: "Name of the category." + example: "Rocks" + archived: + type: "boolean" + description: "Whether or not the category is archived" + example: "false" + default: false + preferred: + type: "boolean" + description: "Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org." + example: "true" ValuesFlagId: properties: geometry: @@ -601,3 +1244,18 @@ components: links: items: $ref: "#/components/schemas/LinkFlagIdPut" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" +x-source-documents: + - endPointName: "flags" + id: 81 + - endPointName: "flag-categories" + id: 82 + - endPointName: "flag-categories-preferences" + id: 83 diff --git a/specs/fixed/guidance-lines.yaml b/specs/fixed/guidance-lines.yaml index e2845ac..7833cef 100644 --- a/specs/fixed/guidance-lines.yaml +++ b/specs/fixed/guidance-lines.yaml @@ -180,15 +180,14 @@ paths: $ref: "#/components/responses/NotFound" components: parameters: - OrgId: - name: "orgId" - in: "path" - description: "The organization owning the guidance lines." - x-required-boolean: true + Embed: + name: "embed" + in: "query" + description: "Whether to return the track geometry for AB and Adaptive Curves. See" + x-required-boolean: false schema: - example: 127856 type: "string" - format: "int64" + example: "shapes" FieldId: name: "fieldId" in: "path" @@ -207,14 +206,15 @@ components: type: "string" example: "2fda92b1-7517-4b2a-8166-7616eb20eb02" format: "uuid" - Status: - name: "status" - in: "query" - description: "Whether to include archived guidance lines. Valid values are \"archived\", \"available\", or \"all\". Default is \"available\"." - x-required-boolean: false + OrgId: + name: "orgId" + in: "path" + description: "The organization owning the guidance lines." + x-required-boolean: true schema: + example: 127856 type: "string" - example: "archived" + format: "int64" RecordFilter: name: "recordFilter" in: "query" @@ -222,28 +222,44 @@ components: schema: type: "string" example: "active, archived, all" - Embed: - name: "embed" + Status: + name: "status" in: "query" - description: "Whether to return the track geometry for AB and Adaptive Curves. See" + description: "Whether to include archived guidance lines. Valid values are \"archived\", \"available\", or \"all\". Default is \"available\"." x-required-boolean: false schema: type: "string" - example: "shapes" - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag1: "ag1" - ag3: "ag3" + example: "archived" requestBodies: PostRequest: $ref: "#/components/schemas/GuidanceLine" PutRequest: $ref: "#/components/schemas/GuidanceLinePut" responses: + BadRequest: + description: "Request Validation failure" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + Created: + description: "Created, with a Location header containing the URI of the newly created resource" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + items: + $ref: "#/components/schemas/LinkArrayPost" + total: + type: "integer" + format: "int32" + example: 1 + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines/2fda92b1-7517-4b2a-8166-7616eb20eb02" + Forbidden: + description: "The user does not have sufficient privileges to access this resource." GuidanceLinesResponse: description: "A collection of guidance lines" content: @@ -370,22 +386,6 @@ components: - "@type": "Link" rel: "field" uri: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c" - Created: - description: "Created, with a Location header containing the URI of the newly created resource" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - items: - $ref: "#/components/schemas/LinkArrayPost" - total: - type: "integer" - format: "int32" - example: 1 - examples: - Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines/2fda92b1-7517-4b2a-8166-7616eb20eb02" NoContent: description: "No Content. Request Completed Succesfully." content: @@ -399,14 +399,6 @@ components: examples: Headers: description: "204 No Content" - BadRequest: - description: "Request Validation failure" - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/Errors" - Forbidden: - description: "The user does not have sufficient privileges to access this resource." NotFound: description: "The specified resource does not exist" schemas: @@ -440,16 +432,6 @@ components: items: $ref: "#/components/schemas/Error" readOnly: true - LinksArrayGet: - properties: - field: - example: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c" - description: "Fields Link." - LinkArrayPost: - properties: - field: - example: "https://sandboxapi.deere.com/platform/organizations/orgId/fields/fieldId" - description: "Fields Link." GuidanceLine: type: "object" properties: @@ -548,3 +530,21 @@ components: type: "object" description: "Spatial Projection used for guidance object. See “dtProjectionType” in the John Deere representation system for possible values." example: "{ \"@type\": \"SpatialProjection\", \"projectionType\": \"dtiProjectionDeere\", \"elevation\": { \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrElevation\", \"unit\": \"m\" } }" + LinkArrayPost: + properties: + field: + example: "https://sandboxapi.deere.com/platform/organizations/orgId/fields/fieldId" + description: "Fields Link." + LinksArrayGet: + properties: + field: + example: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c" + description: "Fields Link." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" diff --git a/specs/fixed/harvest-id.yaml b/specs/fixed/harvest-id.yaml index 6cba115..a8bf7f5 100644 --- a/specs/fixed/harvest-id.yaml +++ b/specs/fixed/harvest-id.yaml @@ -65,39 +65,6 @@ paths: $ref: "#/components/responses/HidModuleIdIsInvalid" components: parameters: - AcceptJSON: - name: "Accept" - in: "header" - x-required-boolean: true - schema: - type: "string" - enum: - - "application/vnd.deere.axiom.v3+json" - ModuleSerialNumber: - name: "moduleSerialNumber" - in: "path" - description: "Module Serial Number" - x-required-boolean: true - schema: - type: "string" - example: 14404565493 - OrgId: - name: "orgId" - in: "path" - description: "Organization ID" - x-required-boolean: true - schema: - type: "string" - format: "int64" - example: 913523 - Embed: - name: "embed" - in: "query" - description: "Related entities to embed. Possible values include clients, farms and field. (Note: embedding of clients and farms requires field to be embedded as well.)" - x-required-boolean: false - schema: - type: "string" - example: "clients,farms,field" Accept-UOM-System: name: "Accept-UOM-System" in: "METRIC" @@ -118,6 +85,14 @@ components: schema: type: "string" example: "MASS" + AcceptJSON: + name: "Accept" + in: "header" + x-required-boolean: true + schema: + type: "string" + enum: + - "application/vnd.deere.axiom.v3+json" DeereTags: name: "x-deere-signature" in: "header" @@ -126,14 +101,31 @@ components: type: "string" format: "uuid" example: "d5837765-4499-47b0-b2ab-6dde098e0e83" - WrapStartDate: - name: "startDate" + Embed: + name: "embed" in: "query" - description: "Start of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the endDate parameter." + description: "Related entities to embed. Possible values include clients, farms and field. (Note: embedding of clients and farms requires field to be embedded as well.)" + x-required-boolean: false schema: type: "string" - format: "date-time" - example: "2019-01-01T00:00:00Z" + example: "clients,farms,field" + ModuleSerialNumber: + name: "moduleSerialNumber" + in: "path" + description: "Module Serial Number" + x-required-boolean: true + schema: + type: "string" + example: 14404565493 + OrgId: + name: "orgId" + in: "path" + description: "Organization ID" + x-required-boolean: true + schema: + type: "string" + format: "int64" + example: 913523 WrapEndDate: name: "endDate" in: "query" @@ -142,15 +134,25 @@ components: type: "string" format: "date-time" example: "2020-01-01T00:00:00Z" - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - files: "files" - ag2: "ag2" + WrapStartDate: + name: "startDate" + in: "query" + description: "Start of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the endDate parameter." + schema: + type: "string" + format: "date-time" + example: "2019-01-01T00:00:00Z" responses: + BadDateRange: + description: "Bad Request - Start Date and End Date must both be present (or neither present), and Start Date should be chronologically first." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + DoesNotHaveAccessToFieldOperation: + description: "The user has not been provided access to the field operation specified by id." + DoesNotHaveAccessToOrg: + description: "The user has not been provided access to data in this organization" HIDCottonModules: description: "An array of HID Cotton modules" content: @@ -226,6 +228,12 @@ components: comment: "Here is a comment" fieldId: "4dd005c7-0000-1000-4022-e1e1e113c667" orgId: 12345 + HidModuleIdIsInvalid: + description: "The specified organization or HID Cotton module does not exist" + InputFieldOpGuidInvalid: + description: "The specified field operation does not exist." + InputOrgIdInvalid: + description: "The specified Organization ID does not exist" SingleHIDCottonModule: description: "A single HID Cotton Module" content: @@ -306,73 +314,40 @@ components: example: - 2018 - 2020 - BadDateRange: - description: "Bad Request - Start Date and End Date must both be present (or neither present), and Start Date should be chronologically first." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/Errors" - HidModuleIdIsInvalid: - description: "The specified organization or HID Cotton module does not exist" - InputOrgIdInvalid: - description: "The specified Organization ID does not exist" - DoesNotHaveAccessToOrg: - description: "The user has not been provided access to data in this organization" - DoesNotHaveAccessToFieldOperation: - description: "The user has not been provided access to the field operation specified by id." - InputFieldOpGuidInvalid: - description: "The specified field operation does not exist." schemas: - LinkHarvestIdentificationModules: - properties: - self: - description: "Self Link." - example: "https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules" - LinkSerialNumber: - properties: - self: - description: "Self Link." - example: "https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules/14404565493" - field: - example: "https://sandboxapi.deere.com/platform/organizations/123456/field/6547879-adfasdfa-dasf546-551das" - description: "Field Link." - organization: - example: "https://sandboxapi.deere.com/platform/organizations/123456" - description: "Organizations Link." - Link: - type: "object" - required: - - "rel" - - "uri" - description: "A link provides a URI to access resources that are related to the response." - properties: - "@type": - type: "string" - rel: - type: "string" - description: "The relation of the object to the linked resource." - example: "self" - uri: - type: "string" - format: "uri" - description: "The URI to the related resource." - example: "https://api.deere.com/platform/organizations/12345/harvestIdentificationModules/MHJL1232564" - Point: + Errors: type: "object" + format: "Errors/DataValidationException" properties: - "@type": - type: "string" - example: "Point" - lat: - type: "number" - format: "double" - description: "The latitude of the point" - example: 43.6187 - lon: - type: "number" - format: "double" - description: "The longitude of the point" - example: 116.2146 + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + message: + type: "string" + description: "An english description of the error" + example: "End date should not be specified without start date" + code: + type: "string" + example: "validation_constraint_operation_end_date_without_start_date" + description: "A string constant representing the type of error" + field: + type: "string" + example: "startDate" + description: "The name of the property or parameter deemed invalid" + invalidValue: + type: "string" + example: "null" + description: "The value that was supplied for this field in the request" EventMeasurement: type: "object" description: "A general representation of quantity and unit." @@ -471,36 +446,61 @@ components: type: "string" example: 1234 description: "Organization ID" - Errors: + Link: type: "object" - format: "Errors/DataValidationException" + required: + - "rel" + - "uri" + description: "A link provides a URI to access resources that are related to the response." properties: - errors: - type: "array" - items: - type: "object" - format: "Error/ConstraintViolation" - properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - example: "9b331708-10e8-4e15-8097-a9aed7455d6d" - message: - type: "string" - description: "An english description of the error" - example: "End date should not be specified without start date" - code: - type: "string" - example: "validation_constraint_operation_end_date_without_start_date" - description: "A string constant representing the type of error" - field: - type: "string" - example: "startDate" - description: "The name of the property or parameter deemed invalid" - invalidValue: - type: "string" - example: "null" - description: "The value that was supplied for this field in the request" + "@type": + type: "string" + rel: + type: "string" + description: "The relation of the object to the linked resource." + example: "self" + uri: + type: "string" + format: "uri" + description: "The URI to the related resource." + example: "https://api.deere.com/platform/organizations/12345/harvestIdentificationModules/MHJL1232564" + LinkHarvestIdentificationModules: + properties: + self: + description: "Self Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules" + LinkSerialNumber: + properties: + self: + description: "Self Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules/14404565493" + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/field/6547879-adfasdfa-dasf546-551das" + description: "Field Link." + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + Point: + type: "object" + properties: + "@type": + type: "string" + example: "Point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 43.6187 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: 116.2146 + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + files: "files" + ag2: "ag2" diff --git a/specs/fixed/machine-alerts.yaml b/specs/fixed/machine-alerts.yaml index 822d9fe..9889039 100644 --- a/specs/fixed/machine-alerts.yaml +++ b/specs/fixed/machine-alerts.yaml @@ -45,33 +45,7 @@ paths: "429": $ref: "#/components/responses/TooManyRequests" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - eq1: "eq1" parameters: - principalId: - name: "principalId" - in: "path" - description: "Principal ID of the machine/equipment." - x-required-boolean: true - schema: - type: "string" - default: "N/A" - example: "5432" - StartDate: - name: "startDate" - in: "query" - description: "Returns alerts from a specified date onward. Requests are time-based with a maximum length of seven days." - x-required-boolean: false - schema: - type: "string" - format: "date-time" - default: "24 hours before the timestamp of the request" - example: "2013-04-29T00:00:00Z" EndDate: name: "endDate" in: "query" @@ -89,6 +63,25 @@ components: type: "boolean" default: "false" example: "true" + StartDate: + name: "startDate" + in: "query" + description: "Returns alerts from a specified date onward. Requests are time-based with a maximum length of seven days." + x-required-boolean: false + schema: + type: "string" + format: "date-time" + default: "24 hours before the timestamp of the request" + example: "2013-04-29T00:00:00Z" + principalId: + name: "principalId" + in: "path" + description: "Principal ID of the machine/equipment." + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: "5432" responses: AlertID: description: "The list of machines for a organization." @@ -166,170 +159,37 @@ components: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/BadRequestResponseBody" - Unauthorized: - description: "The request could not be authorized with the given credentials." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/UnauthorizedResponseBody" Forbidden: description: "The provided authorization is not allowed to access this resource." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/ForbiddenResponseBody" - NotFound: - description: "The requested resource could not be found." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/NotFoundResponseBody" NotAcceptable: description: "The given Accept headers did not allow for the content type this resource produces." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/NotAcceptableResponseBody" + NotFound: + description: "The requested resource could not be found." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/NotFoundResponseBody" TooManyRequests: description: "The server has received too many requests and cannot fulfill them. Try again at a later time." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/TooManyRequestsResponseBody" + Unauthorized: + description: "The request could not be authorized with the given credentials." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/UnauthorizedResponseBody" schemas: - BadRequestResponseBody: - allOf: - - $ref: "#/components/schemas/ErrorResponseBody" - - properties: - code: - enum: - - "400" - format: "numeric" - type: "string" - message: - example: "The provided payload was invalid or malformed." - type: "string" - type: "object" - UnauthorizedResponseBody: - allOf: - - $ref: "#/components/schemas/ErrorResponseBody" - - properties: - code: - enum: - - "401" - format: "numeric" - type: "string" - message: - example: "The request could not be authorized with the given credentials." - type: "string" - type: "object" - ForbiddenResponseBody: - allOf: - - $ref: "#/components/schemas/ErrorResponseBody" - - properties: - code: - enum: - - "403" - format: "numeric" - type: "string" - message: - example: "The provided authorization is not allowed to access this resource." - type: "string" - type: "object" - NotAcceptableResponseBody: - allOf: - - $ref: "#/components/schemas/ErrorResponseBody" - - properties: - code: - enum: - - "406" - format: "numeric" - type: "string" - message: - example: "The requested resource could not be produced in any acceptable format." - type: "string" - type: "object" - NotFoundResponseBody: - allOf: - - $ref: "#/components/schemas/ErrorResponseBody" - - properties: - code: - enum: - - "404" - format: "numeric" - type: "string" - message: - example: "The requested resource could not be found." - type: "string" - type: "object" - UID: - description: "A unique string identifier." - example: "e7c52f93-4bb6-48bb-b808-11b7b4f23059" - format: "uuid" - readOnly: true - type: "string" - ErrorResponseBody: - properties: - "@type": - description: "This is the type definition for this reference object." - enum: - - "Errors" - readOnly: true - type: "string" - errors: - items: - properties: - "@type": - description: "This is the type definition for this reference object." - enum: - - "Error" - readOnly: true - type: "string" - code: - example: "400" - format: "numeric" - type: "string" - field: - description: "The field in the request body that is invalid." - example: "id" - type: "string" - guid: - $ref: "#/components/schemas/UID" - invalidValue: - description: "The invalid value present in the field." - example: "b48da18c-c0e6-4bcc-a00e-581035beab3d" - type: "string" - message: - example: "There was a problem with the request." - type: "string" - required: - - "guid" - - "message" - type: "object" - type: "array" - otherAttributes: - properties: - name: - example: "example_name" - type: "string" - value: - example: "example_value" - type: "string" - type: "object" - type: "object" - TooManyRequestsResponseBody: - allOf: - - $ref: "#/components/schemas/ErrorResponseBody" - - properties: - code: - enum: - - "429" - format: "numeric" - type: "string" - message: - example: "The server has received too many requests. Try again at a later time." - type: "string" - type: "object" AlertLink: properties: machine: @@ -451,3 +311,143 @@ components: type: "string" example: "Other AIC 524019.31 Reverser lever left in incorrect position. - Return to park to attempt recovery." description: "Diagnostic Trouble Code (DTC) description." + BadRequestResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "400" + format: "numeric" + type: "string" + message: + example: "The provided payload was invalid or malformed." + type: "string" + type: "object" + ErrorResponseBody: + properties: + "@type": + description: "This is the type definition for this reference object." + enum: + - "Errors" + readOnly: true + type: "string" + errors: + items: + properties: + "@type": + description: "This is the type definition for this reference object." + enum: + - "Error" + readOnly: true + type: "string" + code: + example: "400" + format: "numeric" + type: "string" + field: + description: "The field in the request body that is invalid." + example: "id" + type: "string" + guid: + $ref: "#/components/schemas/UID" + invalidValue: + description: "The invalid value present in the field." + example: "b48da18c-c0e6-4bcc-a00e-581035beab3d" + type: "string" + message: + example: "There was a problem with the request." + type: "string" + required: + - "guid" + - "message" + type: "object" + type: "array" + otherAttributes: + properties: + name: + example: "example_name" + type: "string" + value: + example: "example_value" + type: "string" + type: "object" + type: "object" + ForbiddenResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "403" + format: "numeric" + type: "string" + message: + example: "The provided authorization is not allowed to access this resource." + type: "string" + type: "object" + NotAcceptableResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "406" + format: "numeric" + type: "string" + message: + example: "The requested resource could not be produced in any acceptable format." + type: "string" + type: "object" + NotFoundResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "404" + format: "numeric" + type: "string" + message: + example: "The requested resource could not be found." + type: "string" + type: "object" + TooManyRequestsResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "429" + format: "numeric" + type: "string" + message: + example: "The server has received too many requests. Try again at a later time." + type: "string" + type: "object" + UID: + description: "A unique string identifier." + example: "e7c52f93-4bb6-48bb-b808-11b7b4f23059" + format: "uuid" + readOnly: true + type: "string" + UnauthorizedResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "401" + format: "numeric" + type: "string" + message: + example: "The request could not be authorized with the given credentials." + type: "string" + type: "object" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/fixed/machine-device-state-reports.yaml b/specs/fixed/machine-device-state-reports.yaml index 62a9dd3..8df16c8 100644 --- a/specs/fixed/machine-device-state-reports.yaml +++ b/specs/fixed/machine-device-state-reports.yaml @@ -116,33 +116,7 @@ paths: "410": description: "The requested resource is no longer available" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - eq1: "eq1" parameters: - principalId: - name: "principalId" - in: "path" - description: "Principal ID of the machine/equipment." - x-required-boolean: true - schema: - type: "string" - default: "N/A" - example: 5432 - startDate: - name: "startDate" - in: "query" - description: "Return DSR from the specified startDate." - x-required-boolean: false - schema: - type: "string" - format: "date-time" - default: "2 months old from CurrentTime" - example: "2010-10-04T14:35:05.000Z" endDate: name: "endDate" in: "query" @@ -163,13 +137,26 @@ components: format: "boolean" default: "false" example: "true" + principalId: + name: "principalId" + in: "path" + description: "Principal ID of the machine/equipment." + x-required-boolean: true + schema: + type: "string" + default: "N/A" + example: 5432 + startDate: + name: "startDate" + in: "query" + description: "Return DSR from the specified startDate." + x-required-boolean: false + schema: + type: "string" + format: "date-time" + default: "2 months old from CurrentTime" + example: "2010-10-04T14:35:05.000Z" schemas: - MyJD_links: - description: "The link object provides links to ressources which are related to the response" - properties: - self: - example: "https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports" - description: "Device State Report Link." DeviceStateReport: description: "Device State Report" type: "object" @@ -353,3 +340,16 @@ components: type: "byte" format: "int32" example: 2 + MyJD_links: + description: "The link object provides links to ressources which are related to the response" + properties: + self: + example: "https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports" + description: "Device State Report Link." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/fixed/machine-engine-hours.yaml b/specs/fixed/machine-engine-hours.yaml index fff882e..dca7189 100644 --- a/specs/fixed/machine-engine-hours.yaml +++ b/specs/fixed/machine-engine-hours.yaml @@ -104,14 +104,26 @@ paths: "404": description: "Machine does not exists with given machine id" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - eq1: "eq1" schemas: + EngineHours: + description: "Engine Hours" + type: "object" + properties: + reading: + x-required-boolean: true + description: "The number of hours the engine has been running." + example: "<valueAsDouble>523.5166666666667</valueAsDouble>" + type: "measurementAsDouble" + reportTime: + x-required-boolean: true + description: "Timestamp at which the report was created." + type: "string" + format: "date-time" + example: "2010-10-04T14:35:05.000Z" + source: + type: "string" + description: "Device which collected the data." + example: "CI" EngineHours_Response: description: "Page of engineHours information for the machine." type: "object" @@ -139,22 +151,10 @@ components: machine: description: "Machines Link." example: "https://sandboxapi.deere.com/platform/machines/4321" - EngineHours: - description: "Engine Hours" - type: "object" - properties: - reading: - x-required-boolean: true - description: "The number of hours the engine has been running." - example: "<valueAsDouble>523.5166666666667</valueAsDouble>" - type: "measurementAsDouble" - reportTime: - x-required-boolean: true - description: "Timestamp at which the report was created." - type: "string" - format: "date-time" - example: "2010-10-04T14:35:05.000Z" - source: - type: "string" - description: "Device which collected the data." - example: "CI" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/fixed/machine-hours-of-operation.yaml b/specs/fixed/machine-hours-of-operation.yaml index 920661a..5de61fb 100644 --- a/specs/fixed/machine-hours-of-operation.yaml +++ b/specs/fixed/machine-hours-of-operation.yaml @@ -112,37 +112,7 @@ paths: "404": description: "Machine does not exists with given machine id" components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - eq1: "eq1" schemas: - HoursOfOperation_Response: - description: "Page of hoursOfOperation information for the machine." - properties: - links: - description: "Link list" - type: "array" - items: - $ref: "#/components/schemas/MyJD_links" - total: - description: "Number of results in the list" - type: "integer" - format: "int64" - example: 1 - values: - type: "array" - items: - $ref: "#/components/schemas/HoursOfOperation" - MyJD_links: - description: "The link object provides links to ressources which are related to the response" - properties: - machine: - example: "https://sandboxapi.deere.com/platform/machines/5432" - description: "Machines Link." HoursOfOperation: description: "Hours Of Operation" type: "object" @@ -173,3 +143,33 @@ components: description: "The returned value indicates the user queried definedType value." type: "string" example: "PTO Status On" + HoursOfOperation_Response: + description: "Page of hoursOfOperation information for the machine." + properties: + links: + description: "Link list" + type: "array" + items: + $ref: "#/components/schemas/MyJD_links" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 1 + values: + type: "array" + items: + $ref: "#/components/schemas/HoursOfOperation" + MyJD_links: + description: "The link object provides links to ressources which are related to the response" + properties: + machine: + example: "https://sandboxapi.deere.com/platform/machines/5432" + description: "Machines Link." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/fixed/machine-locations.yaml b/specs/fixed/machine-locations.yaml index 61c8c95..5452735 100644 --- a/specs/fixed/machine-locations.yaml +++ b/specs/fixed/machine-locations.yaml @@ -19,6 +19,118 @@ servers: - "partnerapiqa" - "sandboxapiqa" paths: + /machines/{principalId}/breadcrumbs: + get: + operationId: "getBreadcrumbsByMachineId" + summary: "Machine Breadcrumbs" + description: "This resource allows the client to get the following details of a Machine: SpeedFuel LevelDirection of Machine (heading)Machine StateMachine State Defined Type IdCorrelation IdLocation AltitudeOriginCreated TimeStamp" + security: + - OAuth2: + - "eq1" + tags: + - "Breadcrumbs" + parameters: + - name: "principalId" + in: "path" + description: "principalId of Machine/Equipment." + x-required-boolean: true + schema: + type: "string" + example: 7099 + - name: "orgId" + in: "query" + description: "OrganizationId" + x-required-boolean: false + schema: + type: "string" + example: 2551 + - name: "startDate" + in: "query" + description: "UTC format Start Date.If null, 'current time - 24 hours' will be treated as startDate." + x-required-boolean: false + schema: + type: "string" + format: "date-time" + example: "2019-01-16T00:00:00.000Z" + - name: "endDate" + in: "query" + description: "UTC format End Date. If null, current time will be treated as endDate." + x-required-boolean: false + schema: + type: "string" + format: "date-time" + example: "2019-01-16T23:59:59.999Z" + - name: "lastKnown" + in: "query" + description: "Default value: false. Valid values: true or false. If true, then date parameters are not used and the last known location of the machine will be sent in the response." + x-required-boolean: false + schema: + type: "boolean" + default: false + example: "true" + - name: "Accept-Language" + in: "header" + description: "Accept Language. If not provided, the default Locale is US. Else, Locale will be searched on the basis of language." + x-required-boolean: false + schema: + type: "string" + example: "true" + default: "en" + responses: + "200": + description: "Breadcrumb list for the machine" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Breadcrumbs_Response" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/7099/breadcrumbs?lastKnown=true" + total: 1 + values: + - "@type": "Breadcrumb" + createTimestamp: "2018-12-18T08:30:03.789Z" + speed: + "@type": "measurementAsDouble" + valueAsDouble: 35 + unit: "km1hr-1" + heading: + "@type": "measurementAsInteger" + valueAsInteger: "33" + machineState: + "@type": "Breadcrumb$MachineState" + rawState: 1 + fuelLevel: + "@type": "measurementAsDouble" + valueAsDouble: 19 + unit: "prcnt" + principalId: + description: "Principal/Equipment id of which the location corresponds to." + type: "integer" + example: 123456 + origin: "BREADCRUMB" + correlationId: "1162b8ad-bbca-4c91-8c0e-2f2794b250a1" + point: + "@type": "Point" + lat: 18.513935 + lon: 73.927629 + altitude: + "@type": "measurementAsDouble" + valueAsDouble: 0 + unit: "m" + eventTimestamp: "2018-11-18T08:40:51.000Z" + links: + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/7099" + "403": + description: "The user does not have access to the machine or is not allowed to see machine locations" + "404": + description: "Machine not found" /machines/{principalId}/locationHistory: get: tags: @@ -125,19 +237,224 @@ paths: description: "Machine not found" content: {} components: - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - eq1: "eq1" schemas: + Breadcrumb: + description: "Breadcrumb object containing location information and location-relevant machine data." + type: "object" + allOf: + - $ref: "#/components/schemas/Breadcrumb_POST" + properties: + machineState: + $ref: "#/components/schemas/BreadcrumbMachineState" + origin: + x-required-boolean: true + type: "string" + description: "The origin of the breadcrumb" + enum: + - "JDLINK" + - "BREADCRUMB" + default: "BREADCRUMB" + example: "BREADCRUMB" + links: + x-required-boolean: true + type: "array" + items: + type: "object" + allOf: + - $ref: "#/components/schemas/Breadcrumb_links" + BreadcrumbMachineState: + description: "Human readable title for the machine state" + type: "object" + properties: + "@type": + type: "string" + default: "Breadcrumb$MachineState" + example: "Breadcrumb$MachineState" + value: + type: "string" + enum: + - "Idle" + - "Working" + - "Transporting" + example: "Idle" + Breadcrumb_POST: + description: "Breadcrumb object containing location information and location-relevant machine data." + type: "object" + required: + - "@type" + - "createTimestamp" + - "eventTimestamp" + - "point" + - "links" + properties: + "@type": + description: "Object type" + type: "string" + default: "Breadcrumb" + example: "Breadcrumb" + createTimestamp: + description: "The timestamp of the breadcrumb creation" + type: "string" + format: "date-time" + example: "2018-08-07T10:12:50.911Z" + eventTimestamp: + description: "The timestamp of the event when the position was changed" + type: "string" + format: "date-time" + example: "2018-08-07T10:12:50.911Z" + point: + $ref: "#/components/schemas/Point" + speed: + $ref: "#/components/schemas/MeasurementAsDouble" + heading: + $ref: "#/components/schemas/MeasurementAsInteger" + fuelLevel: + $ref: "#/components/schemas/MeasurementAsDouble" + principalId: + description: "Principal/Equipment id of which the location corresponds to." + type: "integer" + example: 123456 + correlationId: + description: "Correlation ID has to be submitted with location or breadcrumb information when uploading to the server. Corellation ID information can be used by clients for diagnostics of the parallel assignment of the same machine to 2 or more devices. Workflow for detection: - My app subscribed to the machine locations changes of my org - If selecting a machine on my mobile device my app checks whether some device sent locations recently which was not mine (not one of my previous or current correlationIDs) - Prevention! - If I detected that another device sent location - the app warns me and I'm able to decide to select the machine or not - I started MLT and my app sends the breadcrumb/location with my correlationID to the server - My app is still subscribed to machine locations changes of the org and receives a location of machine selected in my app with a correlation ID which is not one of mines - My app warns me that another user reports locations to My machine as well - BTW - empty Correlation ID is not allowed when contributing a location or breadcrumb using the API or IoT - Recommendation - the app shall create a new correlationID (guid) when the user selects a new machine Correlation ID can be used for cleaning up recorded locations data on the server side in case the client erroneously submitted location data for a wrong machine." + type: "string" + format: "guid" + example: "c1429d12-17db-4fd5-a27f-50ba62e81c8c" + links: + type: "array" + items: + type: "object" + allOf: + - $ref: "#/components/schemas/Breadcrumb_links" + Breadcrumb_links: + description: "Links related to the breadcrumb" + required: + - "@type" + - "rel" + - "uri" + properties: + "@type": + type: "string" + default: "Link" + description: "This is the @type definition for this reference object." + example: "Link" + rel: + type: "string" + description: "Defines the relation from the object to the link. The minimum response is the self link. Please refere to the individual example and object definition (the allOf keyword which is only visibile in the YAMl code) to see all required links for the instance of the object." + uri: + type: "string" + format: "uri" + description: "The URL to the ressource which is related" + example: + - "@type": "Link" + rel: "contributionDefinition" + uri: "https://partnerapi.deere.com/platform/contributionDefinitions/70df8ced-b6df-458e-b6f2-2d705cb9a2bf" + - "@type": "Link" + rel: "machine" + uri: "https://partnerapi.deere.com/platform/machines/482754" + Breadcrumbs_Response: + description: "Page of bredacrumb information for the machine" + type: "object" + properties: + links: + x-required-boolean: true + description: "Link list" + type: "array" + items: + $ref: "#/components/schemas/MyJD_links_Breadcrumbs" + total: + x-required-boolean: true + description: "Number of results in the list" + type: "integer" + example: 1 + values: + x-required-boolean: true + type: "array" + items: + $ref: "#/components/schemas/Breadcrumb" + MeasurementAsDouble: + description: "Measurement as double value" + type: "object" + required: + - "valueAsDouble" + properties: + valueAsDouble: + type: "number" + format: "float" + unit: + type: "string" + vrDomainId: + type: "string" + MeasurementAsInteger: + description: "Measurement as integer value" + type: "object" + required: + - "valueAsInteger" + properties: + valueAsInteger: + type: "number" + unit: + type: "string" + vrDomainId: + type: "string" MyJD_links: properties: machine: example: "https://sandboxapi.deere.com/platform/machines/4321" description: "Machines Link." + MyJD_links_Breadcrumbs: + description: "The link object provides links to ressources which are related to the response" + properties: + "@type": + x-required-boolean: true + type: "string" + default: "Link" + description: "This is the @type definition for this reference object." + example: "Link" + rel: + x-required-boolean: true + type: "string" + default: "self" + description: "Defines the relation from the object to the link. The minimum response is the self link. Please refere to the individual example and object definition (the allOf keyword which is only visibile in the YAMl code) to see all required links for the instance of the object." + uri: + x-required-boolean: true + type: "string" + format: "uri" + description: "The URL to the ressource which is related" + example: + - "@type": "Link" + rel: "self" + uri: "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs" + - "@type": "Link" + rel: "nextPage" + uri: "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs;start=30;count=10" + - "@type": "Link" + rel: "nextPage" + uri: "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs;start=10;count=10" + Point: + description: "Point." + type: "object" + required: + - "@type" + - "lat" + - "lon" + properties: + "@type": + description: "Object type" + type: "string" + default: "Point" + example: "Point" + lat: + description: "Latitude in range of -90 to +90" + type: "number" + format: "float" + example: 7.801324 + lon: + description: "longitude in range of -180 to +180" + type: "number" + format: "float" + example: 49.456166 + altitude: + $ref: "#/components/schemas/MeasurementAsDouble" ReportedLocation: properties: point: @@ -169,3 +486,15 @@ components: format: "date" description: "The last time the machine noted its GPS location." example: "2010-10-04T15:06:24.000Z" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" +x-source-documents: + - endPointName: "location-history" + id: 23 + - endPointName: "breadcrumbs" + id: 24 diff --git a/specs/fixed/map-layers.yaml b/specs/fixed/map-layers.yaml index 67ba747..8bac35f 100644 --- a/specs/fixed/map-layers.yaml +++ b/specs/fixed/map-layers.yaml @@ -15,71 +15,62 @@ servers: - "sandboxapi" - "partnerapi" paths: - /organizations/{orgId}/fields/{id}/mapLayerSummaries: + /fileResources/{id}: get: - description: "This resource will list all Map Layer Summaries for a specified field." - summary: "List Map Layer Summaries" + description: "This resource allows the client to view or download a File Resource. To view a File Resource's metadata, set the application/vnd.deere.axiom.v3+json Accept Header. To download the File Resource itself, choose a zip or octet-stream Accept Header." + summary: "View/Download a File Resource" parameters: - - $ref: "#/components/parameters/OrganizationId" - - $ref: "#/components/parameters/fieldId" - - $ref: "#/components/parameters/includePartialSummaries" - - $ref: "#/components/parameters/embed" + - $ref: "#/components/parameters/fileId_FileResources" security: - OAuth2: - - "ag2" + - "ag1" responses: "200": - $ref: "#/components/schemas/MapLayerSummaryCollection" - post: - description: "Creates a new Map Layer Summary resource." - summary: "Create a map layer summary" + $ref: "#/components/schemas/GetFileResponseDetails" + put: + description: "Uploads a binary File Resource for a given Map Layer. The client must first create a File Resource ID by calling POST /mapLayers/{id}/fileResources API before uploading. Check the status of the upload by requesting the File Resource's targetResource Link." + summary: "Upload a File Resource" parameters: - - $ref: "#/components/parameters/OrganizationId" - - $ref: "#/components/parameters/fieldId" + - $ref: "#/components/parameters/fileId_FileResources" security: - OAuth2: - "ag3" - requestBody: - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/PostRequest" - Create Map Layer Summary: - examples: - No Header: - description: "" - value: - links: - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" - title: "some title" - text: "description of map layer summary with [a link](https://www.example.com)" - metadata: - - name: "The Name" - value: "The Value" - dateCreated: "2016-01-02T16:14:23.421Z" responses: "200": description: "Created" content: application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" examples: - No Header: - description: "201 CREATED Location: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "403": - $ref: "#/components/responses/403" - "404": - $ref: "#/components/responses/404" - "406": - $ref: "#/components/responses/406" - "415": - $ref: "#/components/responses/415" - "429": - $ref: "#/components/responses/429" + Headers: + description: "204 No Content" + delete: + description: "Deletes a file resource." + summary: "Delete a File Resource" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/fileId_FileResources" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" /mapLayerSummaries/{id}: get: description: "Returns a specific Map Layer Summary resource." @@ -168,18 +159,345 @@ paths: $ref: "#/components/responses/406" "429": $ref: "#/components/responses/429" + /mapLayerSummaries/{id}/mapLayers: + get: + description: "This resource lists all Map Layers for a specific Map Layer Summary. Note: This API does not support eTags." + summary: "List Map Layers" + parameters: + - $ref: "#/components/parameters/id_MapLayers" + - $ref: "#/components/parameters/includePartialLayers" + responses: + "200": + $ref: "#/components/schemas/MapLayerCollection_MapLayers" + security: + - OAuth2: + - "ag1" + post: + description: "Creates a new Map Layer resource." + summary: "Create a Map Layer" + parameters: + - $ref: "#/components/parameters/id_MapLayers" + security: + - OAuth2: + - "ag3" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostResponse_MapLayers" + Create Map Layer: + examples: + No Header: + description: "" + value: + title: "The title on the Map Layer" + text: "NDVI Layer for mid-season plant health based on near infrared ([NIR](https://en.wikipedia.org/wiki/Infrared#Regions_within_the_infrared))" + metadata: + - name: "time" + value: "Friday, June 29, 2018 (CDT)" + - name: "elevation" + value: "35ft" + extent: + minimumLatitude: 41.76073 + maximumLatitude: 41.771366 + minimumLongitude: -93.488106 + maximumLongitude: -93.4837 + sortName: "02" + legends: + unitId: "seeds1ha-1" + ranges: + - label: "Other - Upper Bound" + minimum: 87500 + maximum: 262500 + hexColor: "#a6cee3" + percent: 2.11 + - label: "High" + minimum: 87300 + maximum: 87500 + hexColor: "#1f78b4" + percent: 18.02 + - label: "Medium" + minimum: 87100 + maximum: 87300 + hexColor: "#b2df8a" + percent: 49.74 + - label: "Low" + minimum: 87100 + maximum: 87300 + hexColor: "#b2df8a" + percent: 49.74 + - label: "Other - Lower Bound" + minimum: 0 + maximum: 87000 + hexColor: "#fb9a99" + percent: 3.13 + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + description: "Number of results in the list" + type: "integer" + format: "int32" + example: 761 + examples: + No Header: + description: "201 CREATED Location: https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + /mapLayers/{id}: + get: + description: "Returns a specific Map Layer resource." + summary: "View a Map Layer" + parameters: + - $ref: "#/components/parameters/getId" + security: + - OAuth2: + - "ag1" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/GetResponseDetails" + links: + items: + $ref: "#/components/schemas/GetAvailableLinks" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "ContributedMapLayer" + title: "The title on the Map Layer" + extent: + "@type": "MapExtent" + minimumLatitude: 41.76073 + maximumLatitude: 41.771366 + minimumLongitude: -93.488106 + maximumLongitude: -93.4837 + sortName: "02" + legends: + "@type": "MapLegend" + unitId: "seeds1ha-1" + ranges: + - "@type": "MapLegendItem" + label: "Some Label" + minimum: 87300 + maximum: 87300 + hexColor: "#0BA74A" + percent: 0.13 + status: "QUEUED" + id: "MAP_LAYER_ID" + links: + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "image" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "mapLayerSummary" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - "@type": "Link" + rel: "fileResources" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + - "@type": "Link" + rel: "createFileResource" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + delete: + description: "Deletes a Map Layer and its underlying File Resource." + summary: "Delete a Map Layer" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/getMapId" + responses: + "200": + description: "Deleted" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + /mapLayers/{id}/fileResources: + get: + description: "This resource will return the File Resource associated to the specified Map Layer. Note: This API does not support eTags." + summary: "Get a Map Layer File Resource" + parameters: + - $ref: "#/components/parameters/id_FileResources" + security: + - OAuth2: + - "ag1" + responses: + "200": + $ref: "#/components/schemas/GetFileResponse" + post: + description: "This resource will create a new File Resource for a Map Layer." + summary: "Create a Map Layer File Resource" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/id_FileResources" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/RequestDetails" + Create a new File Resource: + examples: + No Header: + description: "" + value: + links: + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + mimeType: "image/png" + metadata: + - name: "filename" + value: "mapLayerImage.png" + timestamp: "2019-01-02T16:14:23.421Z" + responses: + "200": + $ref: "#/components/schemas/PostFileResponse" + /mapLayers/{mapLayerId}: + get: + description: "Returns the image file associated with the Map Layer resource." + summary: "Extract Map Layer Image" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/getMapId" + responses: + "200": + description: "Created" + content: + image/png OR application/octet-stream: + examples: + Headers: + description: "The binary contents of the Map Layer are returned in PNG format." + /organizations/{orgId}/fields/{id}/mapLayerSummaries: + get: + description: "This resource will list all Map Layer Summaries for a specified field." + summary: "List Map Layer Summaries" + parameters: + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/fieldId" + - $ref: "#/components/parameters/includePartialSummaries" + - $ref: "#/components/parameters/embed" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/schemas/MapLayerSummaryCollection" + post: + description: "Creates a new Map Layer Summary resource." + summary: "Create a map layer summary" + parameters: + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/fieldId" + security: + - OAuth2: + - "ag3" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostRequest" + Create Map Layer Summary: + examples: + No Header: + description: "" + value: + links: + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + title: "some title" + text: "description of map layer summary with [a link](https://www.example.com)" + metadata: + - name: "The Name" + value: "The Value" + dateCreated: "2016-01-02T16:14:23.421Z" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + examples: + No Header: + description: "201 CREATED Location: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "415": + $ref: "#/components/responses/415" + "429": + $ref: "#/components/responses/429" components: - parameters: - OrganizationId: - in: "path" - name: "orgId" - description: "Organization ID" - x-required-boolean: true - schema: + examples: + 400Errors: + description: "{ \"@type\": \"Errors\", \"errors\": [ { \"@type\": \"Error\", \"guid\": \"53697217-9e70-492b-be04-179e253c3116\", \"message\": \"Owning Organization Link is missing and is required.\", \"code\": \"validation_constraint_owning_org_link_missing\", \"field\": \"owningOrganization\" }, { \"@type\": \"Error\", \"guid\": \"39dc10f0-6e2c-4517-bfd6-713a7c4da768\", \"message\": \"Contribution Definition Link is missing and is required.\", \"code\": \"validation_constraint_contribution_definition_link_missing\", \"field\": \"contributionDefinition\" }, { \"@type\": \"Error\", \"guid\": \"5cdee9be-4120-4d0e-9da3-15a1d4f0713a\", \"message\": \"This field is required.\", \"code\": \"validation_constraint_required_field\", \"field\": \"title\" }, { \"@type\": \"Error\", \"guid\": \"1d5d178b-e037-4c76-927c-94ca19e74362\", \"message\": \"This field is required.\", \"code\": \"validation_constraint_required_field\", \"field\": \"text\" }, { \"@type\": \"Error\", \"guid\": \"f5c78d7c-9eaa-45ef-86bb-c28391d9ee2c\", \"message\": \"This field is required.\", \"code\": \"validation_constraint_required_field\", \"field\": \"legends\" }, { \"@type\": \"Error\", \"guid\": \"4a9d25f4-2f59-4900-91e9-766d78b8483c\", \"message\": \"Required field.\", \"code\": \"validation_constraint_notBlank\", \"field\": \"metadata.value\", \"invalidValue\": \"\" }, { \"@type\": \"Error\", \"guid\": \"eb364fd8-d6c0-41fd-84ff-72580407bbb2\", \"message\": \"Required field.\", \"code\": \"validation_constraint_notBlank\", \"field\": \"owningOrganization\", \"invalidValue\": \"\" }, { \"@type\": \"Error\", \"guid\": \"1a66a1a6-355f-44c9-83e3-11eb5cb641fa\", \"message\": \"Map layer must have an extent for supplied mime-type\", \"code\": \"validation_constraint_file_type_requires_extent\", \"field\": \"mimeType\" }, { \"@type\": \"Error\", \"guid\": \"9bb8fd7c-3b31-4f75-bd35-05256c35c92e\", \"message\": \"Invalid Contribution Definition ID, please use another.\", \"code\": \"validation_constraint_contribution_definition_id_invalid\", \"field\": \"contributionDefinition\", \"invalidValue\": \"7a6641a6-d6c0-4cc9-d3e3-766d78b8483c\" } ], \"otherAttributes\": {} }" + ContributedMapLayer: + description: "{ \"title\": \"Image 1\", \"extent\": { \"minimumLatitude\": 41.47187948123269, \"maximumLatitude\": 41.48192734153501, \"minimumLongitude\": -90.43179946950056, \"maximumLongitude\": -90.4157062154112 }, \"sortName\": \"1\", \"legends\": { \"unitId\": \"colors\", \"ranges\": [ { \"label\": \"Label\", \"minimum\": 0, \"maximum\": 100, \"hexColor\": \"#367C2B\", \"percent\": 50.0 }, { \"label\": \"Label\", \"minimum\": 0, \"maximum\": 100, \"hexColor\": \"#FFDE00\", \"percent\": 50.0 } ] }, \"text\": \"The first image taken\", \"metadata\": [ { \"name\": \"subject\", \"value\": \"the main building\" } ] }" + ContributedMapLayerSummary: + description: "{ \"links\": [ { \"rel\": \"owningOrganization\", \"uri\": \"https://apiqa.tal.deere.com/platform/organizations/61265\" }, { \"rel\": \"contributionDefinition\", \"uri\": \"https://apiqa.tal.deere.com/platform/contributionDefinitions/85c1dfbb-4a9b-4cd2-b967-1e818b86fcb1\" } ], \"title\": \"World Headquarters\", \"text\": \"Deere & Company\", \"metadata\": [ { \"name\": \"Moline\", \"value\": \"Illinois\" } ] }" + FileResource: + description: "{ \"links\": [ { \"rel\": \"owningOrganization\", \"uri\": \"https://apiqa.tal.deere.com/platform/organizations/61265\" } ], \"mimeType\": \"image/png\", \"metadata\": [ { \"name\": \"filename\", \"value\": \"first_image.png\" } ] }" + parameters: + OrganizationId: + in: "path" + name: "orgId" + description: "Organization ID" + x-required-boolean: true + schema: type: "string" example: 1234 format: "uuid" default: "N/A" + embed: + name: "embed" + in: "query" + description: "Takes these values mapLayers." + x-required-boolean: false + schema: + type: "string" + example: "mapLayers" + format: "uuid" + default: "N/A" + fieldId: + name: "fieldId" + in: "path" + description: "Field ID" + x-required-boolean: true + schema: + type: "string" + format: "uuid" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + default: "N/A" fileId: in: "path" name: "fileId" @@ -190,35 +508,35 @@ components: format: "int64" example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" default: "N/A" - includePartialSummaries: - name: "includePartialSummaries" - in: "query" - description: "Set includePartialSummaries to true to include Map Layer Summaries without File Resources." - x-required-boolean: false + fileId_FileResources: + in: "path" + name: "id" + description: "File Resource ID" + x-required-boolean: true schema: - type: "boolean" - example: "true" + type: "string" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" format: "uuid" - default: "false" - embed: - name: "embed" - in: "query" - description: "Takes these values mapLayers." - x-required-boolean: false + default: "N/A" + getId: + in: "path" + name: "id" + description: "Map Layer ID" + x-required-boolean: true schema: type: "string" - example: "mapLayers" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" format: "uuid" default: "N/A" - fieldId: - name: "fieldId" + getMapId: in: "path" - description: "Field ID" + name: "id" + description: "Map Layer ID" x-required-boolean: true schema: type: "string" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" format: "uuid" - example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" default: "N/A" id: name: "id" @@ -230,31 +548,156 @@ components: example: "y02111d6-1fa4-4659-943a-3df4a6b7933c" format: "uuid" default: "N/A" - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag2: "ag2" - ag3: "ag3" + id_FileResources: + in: "path" + name: "id" + description: "Map Layer ID" + x-required-boolean: true + schema: + type: "string" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + format: "uuid" + default: "N/A" + id_MapLayers: + in: "path" + name: "id" + description: "Map Layer Summary ID" + x-required-boolean: true + schema: + type: "string" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + format: "uuid" + default: "N/A" + includePartialLayers: + in: "query" + name: "includePartialLayers" + description: "Set includePartialLayers to true to include Map Layers without File Resources." + x-required-boolean: false + schema: + example: "true" + type: "boolean" + default: "false" + includePartialSummaries: + name: "includePartialSummaries" + in: "query" + description: "Set includePartialSummaries to true to include Map Layer Summaries without File Resources." + x-required-boolean: false + schema: + type: "boolean" + example: "true" + format: "uuid" + default: "false" + responses: + "400": + description: "The request body was missing a required field or supplied a read-only value." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/400Errors" + "401": + description: "The user's OAuth credentials are not recognized by the server." + "403": + description: "The user does not have access to the requested resource." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "404": + description: "The specified resource was not found on the server." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "406": + description: "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request." + "409": + description: "Indicates that the request could not be processed because of conflict in the request, such as an edit conflict." + "415": + description: "The server refuses to accept the request because the payload format is in an unsupported format." + "429": + description: "The user has sent too many requests in a given amount of time." schemas: - Link: - type: "object" + 400Errors: properties: "@type": type: "string" - example: "Link" - rel: - type: "string" - description: "The relation of the object to the linked resource." - example: "owningOrganization" - uri: - type: "string" - description: "The URI to the related resource." - format: "uri" - example: "https://api.deere.com/platform/organizations/61265" - description: "Provides a reference to an associated object or list." + example: "Errors" + errors: + type: "array" + items: + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" + message: + type: "string" + example: "This field is required." + code: + type: "string" + example: "validation_constraint_required_field" + field: + type: "string" + example: "title" + otherAttributes: + type: "object" + AvailableLinks: + properties: + self (map layer summaries list): + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries" + description: "This Map Layer List Link." + self (map layer summary): + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "This Map Layer Summary Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID" + description: "Fields Link." + mapLayers: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "Map Layers Link." + createMapLayer: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "Create Map Layers Link." + AvailableLinks_FileResources: + properties: + self: + description: "This File Resource Link." + example: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + owningOrganization: + description: "Organizations Link." + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + targetResource: + description: "Map Layers Link." + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + AvailableLinks_MapLayers: + properties: + self (map list): + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "This Map Layer List Link." + self (map layer): + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + description: "This Map Layer Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." + mapLayerSummary: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "Map Layer Summary Link." + fileResources: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + image: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + description: "Map Layer's PNG Image Link." + createFileResource: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." CollectionBase: type: "object" properties: @@ -274,181 +717,281 @@ components: total: type: "number" example: 1 - MapLayerSummaryCollection: - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - values: - type: "array" - items: - $ref: "#/components/schemas/ContributedMapLayerSummary" - links: - items: - $ref: "#/components/schemas/AvailableLinks" - examples: - No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" - value: - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries" - total: 1 - values: - - links: - - rel: "self" - uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" - - rel: "owningOrganization" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" - - rel: "targetResource" - uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FEILD_ID" - - rel: "mapLayers" - uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" - - rel: "createMapLayer" - uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" - id: "MAP_LAYER_SUMMARY_ID" - title: "some title" - text: "description of the map layers" - mapType: "OTHER" - metadata: - - name: "The Name" - value: "The Value" - dateCreated: "2016-01-02T16:14:23.421Z" - lastModifiedDate: "2016-01-02T16:14:23.421Z" - ContributedMapLayerSummary: + ContributedMapLayer: + type: "object" + required: + - "title" + - "legends" properties: - links: - type: "array" - description: "Links to other objects in the Deere ecosystem." - example: "See \"Available Links\" below" - total: + "@type": + type: "string" + example: "ContributedMapLayer" + title: + type: "string" + description: "The title on the map layer." + example: "Drone Flyover" + extent: + $ref: "#/components/schemas/MapExtent" + sortName: + type: "string" + description: "A value to sort the Map Layer by in Field Analyzer Beta. Defaults to `title` if not provided." + example: "1" + legends: + $ref: "#/components/schemas/MapLegend" + status: + type: "string" + description: "Map layer status." + readOnly: true + enum: + - "VALID" + - "INVALID" + - "QUEUED" + - "NO_FILE_RESOURCE" + text: + type: "string" + description: "Description of the map layer." + example: "An aerial view of the building." + metadata: + type: "array" + items: + $ref: "#/components/schemas/Metadata" + id: + type: "string" + description: "The primary identifier for the operation." + example: "8a0011f1-297e-48c2-a030-91a21287e721" + readOnly: true + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + ContributedMapLayerSummary: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + total: type: "number" description: "Count of Map Layer Summaries in response." example: 3 values: type: "array" description: "The primary resource listing." - PostContributedMapLayerSummary: + ContributedMapLayer_FileResources: properties: links: type: "array" description: "Links to other objects in the Deere ecosystem." - example: "See \"Available Links\" below" + example: "See \"Available Links\" below Readonly: Yes, except owningOrganization" id: type: "string" - format: "uuid" - description: "Map Layer Summary ID" - example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" - title: - type: "string" - description: "Top level name of the Map Layer Summary" - example: "Summary of Map Layers" - text: - type: "string" - description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited" - example: "My summary of agronomic image data" - mapType: - type: "string" - description: "The type of data represented by the summary." - example: "PRESCRIPTION" + description: "File Resource ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes" metadata: type: "array" - description: "An array of key value pair items about the Map Layer Summary." - example: "See sample response below" - dateCreated: + description: "An array of key value pair items about the File Resource." + example: "See sample response below Readonly: No" + mimeType: + type: "string" + description: "Valid values are image/png, image/tif, image/tiff and application/zip" + example: "image/png Readonly: No" + timestamp: type: "string" format: "date-time" description: "ISO 8601 Date and time in UTC this resource was created." - example: "2016-01-02T16:14:23.421Z" - lastModifiedDate: + example: "2019-03-02T16:14:23.421Z Readonly: No" + ContributedMapLayer_MapLayers: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + total: + type: "number" + description: "Count of Map Layer Summaries in response." + example: 3 + values: + type: "Array" + description: "The primary resource listing." + FileResource: + required: + - "links" + - "metadata" + type: "object" + properties: + "@type": type: "string" - format: "date-time" - description: "ISO 8601 Date and time in UTC this resource was last modified." - example: "2016-01-02T16:14:23.421Z" - AvailableLinks: + example: "FileResource" + mimeType: + type: "string" + description: "The mimeType of the FileResource." + enum: + - "image/png" + - "image/tif" + - "image/tiff" + - "application/zip" + metadata: + description: "The name of the file" + type: "array" + items: + properties: + name: + type: "string" + example: "filename" + value: + type: "string" + example: "a_green_tractor.png" + id: + type: "string" + description: "The primary identifier for the FileResource." + example: "888d97c6-cd87-48de-88d5-3c2721250a5e" + readOnly: true + links: + description: "Links for self, targetResource, and owningOrganization" + type: "array" + items: + $ref: "#/components/schemas/Link" + FileResourceAvailableLinks: properties: - self (map layer summaries list): - example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries" - description: "This Map Layer List Link." - self (map layer summary): - example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" - description: "This Map Layer Summary Link." + self: + description: "Map Layers Link." + example: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" owningOrganization: - example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" description: "Organizations Link." + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" targetResource: - example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID" - description: "Fields Link." - mapLayers: - example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" description: "Map Layers Link." - createMapLayer: - example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" - description: "Create Map Layers Link." - PostRequest: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + FileResourceGetResponse: properties: links: - example: "See \"Request Links\" below Readonly: No" - description: "Links to other objects in the Deere ecosystem." type: "array" - x-required-boolean: true - title: - example: "Summary of Map Layers Readonly: No" - description: "Top level name of the Map Layer Summary" - type: "string" - x-required-boolean: true - text: - example: "My summary of agronomic image data Readonly: No" - description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited" - type: "string" - mapType: - example: "PRESCRIPTION Readonly: No" - description: "The type of data represented by the summary" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below Readonly: Yes, except owningOrganization" + id: type: "string" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below Readonly: Yes" metadata: - example: "See sample request below Readonly: No" - description: "An array of key value pair items about the Map Layer Summary." type: "array" - dateCreated: - example: "2016-01-02T16:14:23.421Z Readonly: No" - description: "ISO 8601 Date and time in UTC this resource was created." + description: "An array of key value pair items about the File Resource." + example: "See sample response below Readonly: No" + mimeType: + type: "string" + description: "Valid values are image/png, image/tif, image/tiff and application/zip" + example: "image/png Readonly: No" + timestamp: type: "string" format: "date-time" - PostResponse: + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2019-03-02T16:14:23.421Z Readonly: No" + GenericErrors: properties: - links: - example: "See \"Request Links\" below Readonly: No" - description: "Links to other objects in the Deere ecosystem." - type: "array" - title: - example: "Summary of Map Layers Readonly: No" - description: "Top level name of the Map Layer Summary" - type: "string" - text: - example: "My summary of agronomic image data Readonly: No" - description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited" - type: "string" - mapType: - example: "PRESCRIPTION Readonly: No" - description: "The type of data represented by the summary" + "@type": type: "string" - metadata: - example: "See sample request below Readonly: No" - description: "An array of key value pair items about the Map Layer Summary." + example: "Errors" + errors: type: "array" - dateCreated: - example: "2016-01-02T16:14:23.421Z Readonly: No" - description: "ISO 8601 Date and time in UTC this resource was created." - type: "string" - format: "date-time" - PostAvailableLinks: + items: + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" + message: + type: "string" + example: "The requested resource was not found" + otherAttributes: + type: "object" + GetAvailableLinks: properties: + self: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + description: "This Map Layer Link." owningOrganization: example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" - description: "Organizations Link" - contributionDefinition: - example: "https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID" - description: "Contribution Definitions Link." + description: "Organizations Link." + mapLayerSummary: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "Map Layer Summary Link." + fileResources: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + image: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + description: "Map Layer's PNG Image Link." + createFileResource: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + GetFileResponse: + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/ContributedMapLayer_FileResources" + links: + items: + $ref: "#/components/schemas/AvailableLinks_FileResources" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "FileResource" + timestamp: "2016-01-02T16:14:23.421Z" + mimeType: "image/zip" + metadata: + - "@type": "Metadata" + name: "filename" + value: "small_png.png" + id: "FILE_RESOURCE_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + - "@type": "Link" + rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + GetFileResponseDetails: + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/FileResourceGetResponse" + links: + items: + $ref: "#/components/schemas/FileResourceAvailableLinks" + examples: + No Header: + description: "" + value: + "@type": "FileResource" + timestamp: "2016-01-02T16:14:23.421Z" + mimeType: "image/zip" + metadata: + - "@type": "Metadata" + name: "filename" + value: "small_png.png" + id: "FILE_RESOURCE_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + - "@type": "Link" + rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" GetMapLayerSummaryAvailableLinks: properties: self: @@ -466,77 +1009,61 @@ components: createMapLayer: example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" description: "Create Map Layers Link." - Metadata: - required: - - "name" - - "value" - type: "object" + GetResponseDetails: properties: - "@type": + links: + example: "See \"Map Layer Available Links\" below" + description: "Links to other objects in the Deere ecosystem." + type: "array" + id: + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + description: "Map Layer ID" type: "string" - example: "Metadata" - name: - type: "string" - example: "Location" - value: - type: "string" - example: "Moline, IL" - MapLayerCollection: - type: "object" - allOf: - - $ref: "#/components/schemas/CollectionBase" - - properties: - values: - type: "array" - items: - $ref: "#/components/schemas/ContributedMapLayer" - ContributedMapLayer: - type: "object" - required: - - "title" - - "legends" - properties: - "@type": - type: "string" - example: "ContributedMapLayer" + format: "uuid" title: + example: "NDVI Layer" + description: "Top level name of the Map Layer" type: "string" - description: "The title on the map layer." - example: "Drone Flyover" + text: + example: "NDVI Layer for mid-season plant health based on near infrared" + description: "Describes Map Layer. Supports limited ." + type: "string" + metadata: + example: "See sample request below" + description: "An array of key value pair items about the Map Layer. Supports limited ." + type: "array" extent: - $ref: "#/components/schemas/MapExtent" + example: null + description: "Maximum and minimum extent of the map." + type: "Object" sortName: + example: null + description: "Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title." type: "string" - description: "A value to sort the Map Layer by in Field Analyzer Beta. Defaults to `title` if not provided." - example: "1" legends: - $ref: "#/components/schemas/MapLegend" + example: null + description: "Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image." + type: "Object" status: + example: "VALID" + description: "Map Layer image processing progress." + type: "object" + Link: + type: "object" + properties: + "@type": type: "string" - description: "Map layer status." - readOnly: true - enum: - - "VALID" - - "INVALID" - - "QUEUED" - - "NO_FILE_RESOURCE" - text: + example: "Link" + rel: type: "string" - description: "Description of the map layer." - example: "An aerial view of the building." - metadata: - type: "array" - items: - $ref: "#/components/schemas/Metadata" - id: + description: "The relation of the object to the linked resource." + example: "owningOrganization" + uri: type: "string" - description: "The primary identifier for the operation." - example: "8a0011f1-297e-48c2-a030-91a21287e721" - readOnly: true - links: - type: "array" - items: - $ref: "#/components/schemas/Link" + description: "The URI to the related resource." + format: "uri" + example: "https://api.deere.com/platform/organizations/61265" + description: "Provides a reference to an associated object or list." MapExtent: description: "Extents of the field. If not provided, the FileResource must be of type `image/tiff` or `application/zip` and contain the extents." required: @@ -565,6 +1092,140 @@ components: type: "number" format: "double" example: -90.4157062154112 + MapLayerCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ContributedMapLayer" + MapLayerCollection_MapLayers: + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/ContributedMapLayer_MapLayers" + links: + items: + $ref: "#/components/schemas/AvailableLinks_MapLayers" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + total: 1 + values: + - "@type": "ContributedMapLayer" + title: "Zones" + extent: + "@type": "MapExtent" + minimumLatitude: 41.97959187228855 + maximumLatitude: 41.98562116731833 + minimumLongitude: -93.69586944580077 + maximumLongitude: -93.68591308593747 + sortName: "Zones" + legends: + "@type": "MapLegend" + unitId: "1" + ranges: + - "@type": "MapLegendItem" + label: "Zone A" + minimum: 0 + maximum: 0 + hexColor: "#ff0000" + percent: 0.12334877135018732 + - "@type": "MapLegendItem" + label: "Zone B" + minimum: 0 + maximum: 0 + hexColor: "#ffa500" + percent: 0.3943243163515148 + - "@type": "MapLegendItem" + label: "Zone C" + minimum: 0 + maximum: 0 + hexColor: "#ffff00" + percent: 0.48232691229829794 + - "@type": "MapLegendItem" + label: "Zone D" + minimum: 0 + maximum: 0 + hexColor: "#adff2f" + percent: 0 + - "@type": "MapLegendItem" + label: "Zone E" + minimum: 0 + maximum: 0 + hexColor: "#008000" + percent: 0 + status: "QUEUED" + id: "MAP_LAYER_ID" + links: + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "image" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "mapLayerSummary" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - "@type": "Link" + rel: "fileResources" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + - "@type": "Link" + rel: "createFileResource" + uri: "https://sandboxapi.deere.complatform/mapLayers/MAP_LAYER_ID/fileResources" + MapLayerSummaryCollection: + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ContributedMapLayerSummary" + links: + items: + $ref: "#/components/schemas/AvailableLinks" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries" + total: 1 + values: + - links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FEILD_ID" + - rel: "mapLayers" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + - rel: "createMapLayer" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + id: "MAP_LAYER_SUMMARY_ID" + title: "some title" + text: "description of the map layers" + mapType: "OTHER" + metadata: + - name: "The Name" + value: "The Value" + dateCreated: "2016-01-02T16:14:23.421Z" + lastModifiedDate: "2016-01-02T16:14:23.421Z" MapLegend: type: "object" properties: @@ -605,127 +1266,228 @@ components: type: "number" format: "double" example: 3.5 - FileResource: + Metadata: required: - - "links" - - "metadata" + - "name" + - "value" type: "object" properties: "@type": type: "string" - example: "FileResource" - mimeType: + example: "Metadata" + name: type: "string" - description: "The mimeType of the FileResource." - enum: - - "image/png" - - "image/tif" - - "image/tiff" - - "application/zip" + example: "Location" + value: + type: "string" + example: "Moline, IL" + PostAvailableLinks: + properties: + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link" + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID" + description: "Contribution Definitions Link." + PostAvailableLinks_FileResources: + properties: + owningOrganization: + description: "Organizations Link." + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + PostContributedMapLayerSummary: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + id: + type: "string" + format: "uuid" + description: "Map Layer Summary ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + title: + type: "string" + description: "Top level name of the Map Layer Summary" + example: "Summary of Map Layers" + text: + type: "string" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited" + example: "My summary of agronomic image data" + mapType: + type: "string" + description: "The type of data represented by the summary." + example: "PRESCRIPTION" metadata: - description: "The name of the file" type: "array" - items: + description: "An array of key value pair items about the Map Layer Summary." + example: "See sample response below" + dateCreated: + type: "string" + format: "date-time" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2016-01-02T16:14:23.421Z" + lastModifiedDate: + type: "string" + format: "date-time" + description: "ISO 8601 Date and time in UTC this resource was last modified." + example: "2016-01-02T16:14:23.421Z" + PostFileResponse: + content: + application/vnd.deere.axiom.v3+json: + schema: properties: - name: - type: "string" - example: "filename" - value: - type: "string" - example: "a_green_tractor.png" - id: + links: + items: + $ref: "#/components/schemas/PostAvailableLinks_FileResources" + examples: + Headers: + description: "201 CREATED Location: https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + PostRequest: + properties: + links: + example: "See \"Request Links\" below Readonly: No" + description: "Links to other objects in the Deere ecosystem." + type: "array" + x-required-boolean: true + title: + example: "Summary of Map Layers Readonly: No" + description: "Top level name of the Map Layer Summary" type: "string" - description: "The primary identifier for the FileResource." - example: "888d97c6-cd87-48de-88d5-3c2721250a5e" - readOnly: true + x-required-boolean: true + text: + example: "My summary of agronomic image data Readonly: No" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited" + type: "string" + mapType: + example: "PRESCRIPTION Readonly: No" + description: "The type of data represented by the summary" + type: "string" + metadata: + example: "See sample request below Readonly: No" + description: "An array of key value pair items about the Map Layer Summary." + type: "array" + dateCreated: + example: "2016-01-02T16:14:23.421Z Readonly: No" + description: "ISO 8601 Date and time in UTC this resource was created." + type: "string" + format: "date-time" + PostResponse: + properties: links: - description: "Links for self, targetResource, and owningOrganization" + example: "See \"Request Links\" below Readonly: No" + description: "Links to other objects in the Deere ecosystem." type: "array" - items: - $ref: "#/components/schemas/Link" - 400Errors: + title: + example: "Summary of Map Layers Readonly: No" + description: "Top level name of the Map Layer Summary" + type: "string" + text: + example: "My summary of agronomic image data Readonly: No" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited" + type: "string" + mapType: + example: "PRESCRIPTION Readonly: No" + description: "The type of data represented by the summary" + type: "string" + metadata: + example: "See sample request below Readonly: No" + description: "An array of key value pair items about the Map Layer Summary." + type: "array" + dateCreated: + example: "2016-01-02T16:14:23.421Z Readonly: No" + description: "ISO 8601 Date and time in UTC this resource was created." + type: "string" + format: "date-time" + PostResponse_MapLayers: properties: - "@type": + id: + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes" + description: "Map Layer ID" type: "string" - example: "Errors" - errors: + format: "uuid" + title: + example: "NDVI Layer Readonly: No" + description: "Top level name of the Map Layer" + type: "string" + x-required-boolean: true + text: + example: "NDVI Layer for mid-season plant health based on near infrared Readonly: No" + description: "Describes Map Layer. Supports limited ." + type: "string" + metadata: + example: "See sample request below Readonly: No" + description: "An array of key value pair items about the Map Layer. Supports limited" type: "array" - items: - properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - example: "ed292512-1f3c-4285-83c3-1fb084423f9b" - message: - type: "string" - example: "This field is required." - code: - type: "string" - example: "validation_constraint_required_field" - field: - type: "string" - example: "title" - otherAttributes: - type: "object" - GenericErrors: + extent: + example: "See sample request below Readonly: No" + description: "Maximum and minimum extent of the map." + type: "Object" + required: "Yes, except if submitting GeoTIFF File Resource for the Map Layer" + sortName: + example: "02 Readonly: No" + description: "Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title." + type: "string" + legends: + example: "--- Readonly: No" + description: "Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image." + type: "Object" + status: + example: "VALID Readonly: Yes" + description: "Map Layer image processing progress." + type: "string" + RequestDetails: properties: - "@type": + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below Readonly: Yes, except owningOrganization" + x-required-boolean: true + id: type: "string" - example: "Errors" - errors: + description: "File Resource ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes" + x-required-boolean: true + metadata: type: "array" - items: - properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - example: "ed292512-1f3c-4285-83c3-1fb084423f9b" - message: - type: "string" - example: "The requested resource was not found" - otherAttributes: - type: "object" - responses: - "400": - description: "The request body was missing a required field or supplied a read-only value." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/400Errors" - "401": - description: "The user's OAuth credentials are not recognized by the server." - "403": - description: "The user does not have access to the requested resource." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/GenericErrors" - "404": - description: "The specified resource was not found on the server." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/GenericErrors" - "406": - description: "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request." - "409": - description: "Indicates that the request could not be processed because of conflict in the request, such as an edit conflict." - "415": - description: "The server refuses to accept the request because the payload format is in an unsupported format." - "429": - description: "The user has sent too many requests in a given amount of time." - examples: - ContributedMapLayerSummary: - description: "{ \"links\": [ { \"rel\": \"owningOrganization\", \"uri\": \"https://apiqa.tal.deere.com/platform/organizations/61265\" }, { \"rel\": \"contributionDefinition\", \"uri\": \"https://apiqa.tal.deere.com/platform/contributionDefinitions/85c1dfbb-4a9b-4cd2-b967-1e818b86fcb1\" } ], \"title\": \"World Headquarters\", \"text\": \"Deere & Company\", \"metadata\": [ { \"name\": \"Moline\", \"value\": \"Illinois\" } ] }" - ContributedMapLayer: - description: "{ \"title\": \"Image 1\", \"extent\": { \"minimumLatitude\": 41.47187948123269, \"maximumLatitude\": 41.48192734153501, \"minimumLongitude\": -90.43179946950056, \"maximumLongitude\": -90.4157062154112 }, \"sortName\": \"1\", \"legends\": { \"unitId\": \"colors\", \"ranges\": [ { \"label\": \"Label\", \"minimum\": 0, \"maximum\": 100, \"hexColor\": \"#367C2B\", \"percent\": 50.0 }, { \"label\": \"Label\", \"minimum\": 0, \"maximum\": 100, \"hexColor\": \"#FFDE00\", \"percent\": 50.0 } ] }, \"text\": \"The first image taken\", \"metadata\": [ { \"name\": \"subject\", \"value\": \"the main building\" } ] }" - FileResource: - description: "{ \"links\": [ { \"rel\": \"owningOrganization\", \"uri\": \"https://apiqa.tal.deere.com/platform/organizations/61265\" } ], \"mimeType\": \"image/png\", \"metadata\": [ { \"name\": \"filename\", \"value\": \"first_image.png\" } ] }" - 400Errors: - description: "{ \"@type\": \"Errors\", \"errors\": [ { \"@type\": \"Error\", \"guid\": \"53697217-9e70-492b-be04-179e253c3116\", \"message\": \"Owning Organization Link is missing and is required.\", \"code\": \"validation_constraint_owning_org_link_missing\", \"field\": \"owningOrganization\" }, { \"@type\": \"Error\", \"guid\": \"39dc10f0-6e2c-4517-bfd6-713a7c4da768\", \"message\": \"Contribution Definition Link is missing and is required.\", \"code\": \"validation_constraint_contribution_definition_link_missing\", \"field\": \"contributionDefinition\" }, { \"@type\": \"Error\", \"guid\": \"5cdee9be-4120-4d0e-9da3-15a1d4f0713a\", \"message\": \"This field is required.\", \"code\": \"validation_constraint_required_field\", \"field\": \"title\" }, { \"@type\": \"Error\", \"guid\": \"1d5d178b-e037-4c76-927c-94ca19e74362\", \"message\": \"This field is required.\", \"code\": \"validation_constraint_required_field\", \"field\": \"text\" }, { \"@type\": \"Error\", \"guid\": \"f5c78d7c-9eaa-45ef-86bb-c28391d9ee2c\", \"message\": \"This field is required.\", \"code\": \"validation_constraint_required_field\", \"field\": \"legends\" }, { \"@type\": \"Error\", \"guid\": \"4a9d25f4-2f59-4900-91e9-766d78b8483c\", \"message\": \"Required field.\", \"code\": \"validation_constraint_notBlank\", \"field\": \"metadata.value\", \"invalidValue\": \"\" }, { \"@type\": \"Error\", \"guid\": \"eb364fd8-d6c0-41fd-84ff-72580407bbb2\", \"message\": \"Required field.\", \"code\": \"validation_constraint_notBlank\", \"field\": \"owningOrganization\", \"invalidValue\": \"\" }, { \"@type\": \"Error\", \"guid\": \"1a66a1a6-355f-44c9-83e3-11eb5cb641fa\", \"message\": \"Map layer must have an extent for supplied mime-type\", \"code\": \"validation_constraint_file_type_requires_extent\", \"field\": \"mimeType\" }, { \"@type\": \"Error\", \"guid\": \"9bb8fd7c-3b31-4f75-bd35-05256c35c92e\", \"message\": \"Invalid Contribution Definition ID, please use another.\", \"code\": \"validation_constraint_contribution_definition_id_invalid\", \"field\": \"contributionDefinition\", \"invalidValue\": \"7a6641a6-d6c0-4cc9-d3e3-766d78b8483c\" } ], \"otherAttributes\": {} }" + description: "An array of key value pair items about the File Resource." + example: "See sample response below Readonly: No" + x-required-boolean: true + mimeType: + type: "string" + description: "Valid values are image/png, image/tif, image/tiff and application/zip" + example: "image/png Readonly: No" + x-required-boolean: true + timestamp: + type: "string" + format: "date-time" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2019-03-02T16:14:23.421Z Readonly: No" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag2: "ag2" + ag3: "ag3" + OAuth2_FileResources: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" + OAuth2_MapLayers: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" +x-source-documents: + - endPointName: "map-layer-summaries" + id: 96 + - endPointName: "file-resources" + id: 98 + - endPointName: "map-layers" + id: 97 diff --git a/specs/fixed/notifications.yaml b/specs/fixed/notifications.yaml index bf11d0e..bcbb6a6 100644 --- a/specs/fixed/notifications.yaml +++ b/specs/fixed/notifications.yaml @@ -4,6 +4,69 @@ info: title: "Notification API" description: "APIs for creating, monitoring the creation of, as well as the viewing of Notifications" paths: + /notificationEvents: + post: + description: "This resource creates an event that Operations Center will use to generate notifications. These notifications will be received by anyone who is subscribed to your services. Each notification event will include a link to source, which will define the event." + summary: "Create Notification Event" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostNotifications" + examples: + Target Resource Association: + value: + links: + - rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID" + eventAssociation: + links: + - rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID" + title: "Some Agronomy Title" + text: "Detailed Agronomy Information" + severity: "HIGH" + eventType: "AGRONOMY" + additionalDetails: + - name: "some name" + value: "some value" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + items: + $ref: "#/components/schemas/Links" + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/notificationEvents/b89c2933-96da-45f4-9f93-880023611e07" + /notificationEvents/{sourceEvent}: + delete: + description: "This resource deletes a notification event that was previously posted to MJD as well as any generated notifications." + summary: "Delete a Notification Event" + parameters: + - $ref: "#/components/parameters/sourceEvent" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "202 Accepted" /notifications/{sourceEvent}: get: summary: "Fetch single notification." @@ -98,69 +161,6 @@ paths: description: "Not authorized" "404": description: "Not Found" - /notificationEvents: - post: - description: "This resource creates an event that Operations Center will use to generate notifications. These notifications will be received by anyone who is subscribed to your services. Each notification event will include a link to source, which will define the event." - summary: "Create Notification Event" - requestBody: - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/PostNotifications" - examples: - Target Resource Association: - value: - links: - - rel: "contributionDefinition" - uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID" - eventAssociation: - links: - - rel: "targetResource" - uri: "https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID" - title: "Some Agronomy Title" - text: "Detailed Agronomy Information" - severity: "HIGH" - eventType: "AGRONOMY" - additionalDetails: - - name: "some name" - value: "some value" - responses: - "200": - description: "Created" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - items: - $ref: "#/components/schemas/Links" - total: - type: "integer" - example: 1 - format: "int32" - examples: - Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/notificationEvents/b89c2933-96da-45f4-9f93-880023611e07" - /notificationEvents/{sourceEvent}: - delete: - description: "This resource deletes a notification event that was previously posted to MJD as well as any generated notifications." - summary: "Delete a Notification Event" - parameters: - - $ref: "#/components/parameters/sourceEvent" - responses: - "200": - description: "Created" - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - total: - type: "integer" - example: 1 - format: "int32" - examples: - Headers: - description: "202 Accepted" /organizations/{orgId}/notifications/events: get: description: "This endpoint will let you search Notifications based on criteria specified in request parameters. The return value is the list of notifications that exist only in the user’s staff organization(s). This API cannot be used with a partner organization ID in the path. If partnership permissions are set up properly in Operations Center, partner notifications for shared resources will be available in the users staff organization which holds the partnership. Each data point will include links to: targetResource: View the target (like file) associated with this notification within each MinimizedNotification object. Please refer to sample response below to see the example. contributionDefinition: View the definition of \"notification\"." @@ -287,23 +287,15 @@ paths: uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6" components: parameters: - sourceEvent: - in: "path" - name: "sourceEvent" - description: "Source Event" - x-required-boolean: true + after: + in: "query" + name: "after" + description: "Criteria to search Notifications after event GUID." + x-required-boolean: false schema: - type: "string" - example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + type: "Notification event GUID" + example: "753b1ce2-74bd-4183-8e13-d0f03b9be20d" format: "uuid" - orgId: - in: "path" - name: "orgId" - description: "Organization" - x-required-boolean: true - schema: - type: "string" - example: 123456 before: in: "query" name: "before" @@ -313,15 +305,6 @@ components: type: "Notification event GUID" example: "753b1ce2-74bd-4183-8e13-d0f03b9be20" format: "uuid" - after: - in: "query" - name: "after" - description: "Criteria to search Notifications after event GUID." - x-required-boolean: false - schema: - type: "Notification event GUID" - example: "753b1ce2-74bd-4183-8e13-d0f03b9be20d" - format: "uuid" count: in: "query" name: "count" @@ -330,6 +313,15 @@ components: schema: type: "number" example: 100 + endDate: + in: "query" + name: "endDate" + description: "Criteria to search for end date in time range." + x-required-boolean: false + schema: + type: "string" + format: "date-time" + example: "2017-07-25T08:33:27.311Z" eventTypes: in: "query" name: "eventTypes" @@ -338,6 +330,14 @@ components: schema: type: "List of String" example: "FILE, ORGANIZATION, ANNOUNCEMENT" + orgId: + in: "path" + name: "orgId" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + example: 123456 severities: in: "query" name: "severities" @@ -346,6 +346,15 @@ components: schema: type: "List of String" example: "NONE, LOW, MEDIUM" + sourceEvent: + in: "path" + name: "sourceEvent" + description: "Source Event" + x-required-boolean: true + schema: + type: "string" + example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + format: "uuid" sourceEvents: in: "query" name: "sourceEvents" @@ -364,15 +373,6 @@ components: type: "string" format: "date-time" example: "2017-07-25T08:33:27.311Z" - endDate: - in: "query" - name: "endDate" - description: "Criteria to search for end date in time range." - x-required-boolean: false - schema: - type: "string" - format: "date-time" - example: "2017-07-25T08:33:27.311Z" schemas: Error: type: "object" @@ -399,24 +399,52 @@ components: description: "The value that was supplied for this field in the request" example: null readOnly: true - ResponseDetails: + GetAvailableLinks: properties: - eventId: + contribution: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6" + description: "Contribution Definitions Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/machines/317783" + description: "Machines Link." + GetResponse: + properties: + title: type: "string" - example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" - description: "Event ID" - eventStatusCode: + example: "Some Title" + description: "Event title." + geometries: + type: null + example: "See sample response below." + description: "GeoJSON representation of the location." + text: type: "string" - example: "SUCCESS" - description: "Event status code." - expectedNotificationCount: - type: "integer" - example: 2 - description: "Number of notifications expected to generate from this event." - actualNotificationCount: - type: "integer" - example: 2 - description: "Actual number of notifications generated from this event." + example: "Detailed event text." + description: "Event description." + severity: + type: "string" + example: "HIGH" + description: "Event severity." + eventType: + type: "string" + example: "AGRONOMY" + description: "Event type." + sourceEvent: + type: "Event GUID" + example: "2acf8953-8eaf-4487-9cd0-391059fcbfcf" + description: "Notification Event GUID" + minimizedNotifications: + type: "List of objects" + example: "See sample response below." + description: "Minimized version of notification having additionalDetails, notificationState, targetResourceOrgId, dateCreated and link to targetResource." + Links: + properties: + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID" + description: "Contribution Definitions Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID" + description: "Fields Link." PostNotifications: properties: title: @@ -455,52 +483,24 @@ components: type: "string" example: "[{“rel”:”targetResource”,”/some/target/123”}]" description: "A link that contains the URI of the target resource. An event association can have multiple links." - GetResponse: + ResponseDetails: properties: - title: - type: "string" - example: "Some Title" - description: "Event title." - geometries: - type: null - example: "See sample response below." - description: "GeoJSON representation of the location." - text: - type: "string" - example: "Detailed event text." - description: "Event description." - severity: + eventId: type: "string" - example: "HIGH" - description: "Event severity." - eventType: + example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + description: "Event ID" + eventStatusCode: type: "string" - example: "AGRONOMY" - description: "Event type." - sourceEvent: - type: "Event GUID" - example: "2acf8953-8eaf-4487-9cd0-391059fcbfcf" - description: "Notification Event GUID" - minimizedNotifications: - type: "List of objects" - example: "See sample response below." - description: "Minimized version of notification having additionalDetails, notificationState, targetResourceOrgId, dateCreated and link to targetResource." - GetAvailableLinks: - properties: - contribution: - example: "https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6" - description: "Contribution Definitions Link." - targetResource: - example: "https://sandboxapi.deere.com/platform/machines/317783" - description: "Machines Link." - Links: - properties: - contributionDefinition: - example: "https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID" - description: "Contribution Definitions Link." - targetResource: - example: "https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID" - description: "Fields Link." + example: "SUCCESS" + description: "Event status code." + expectedNotificationCount: + type: "integer" + example: 2 + description: "Number of notifications expected to generate from this event." + actualNotificationCount: + type: "integer" + example: 2 + description: "Actual number of notifications generated from this event." servers: - url: "https://{environment}.deere.com/platform" variables: diff --git a/specs/fixed/operators.yaml b/specs/fixed/operators.yaml index 04567d6..6fe32b3 100644 --- a/specs/fixed/operators.yaml +++ b/specs/fixed/operators.yaml @@ -196,14 +196,14 @@ paths: description: "204 No Content" components: parameters: - orgId: - in: "path" - name: "orgId" - description: "Organization ID" - x-required-boolean: true + embed: + in: "query" + name: "embed" + description: "Include operator metadata in the response." + x-required-boolean: false schema: type: "string" - example: 123456 + example: "showRecordMetadata" format: "uuid" id: in: "path" @@ -214,14 +214,23 @@ components: type: "string" example: "0235d40e-02d0-44cb-a126-fff21173fc1f" format: "uuid" - embed: + lastModifiedTime: in: "query" - name: "embed" - description: "Include operator metadata in the response." + name: "lastModifiedTime" + description: "Start of the range for timestamp filtering" x-required-boolean: false + schema: + type: "dateTime" + example: "2019-01-01T00:00:00Z" + format: "uuid" + orgId: + in: "path" + name: "orgId" + description: "Organization ID" + x-required-boolean: true schema: type: "string" - example: "showRecordMetadata" + example: 123456 format: "uuid" recordFilter: in: "query" @@ -232,24 +241,19 @@ components: type: "string" example: "ACTIVE" format: "uuid" - lastModifiedTime: - in: "query" - name: "lastModifiedTime" - description: "Start of the range for timestamp filtering" - x-required-boolean: false - schema: - type: "dateTime" - example: "2019-01-01T00:00:00Z" - format: "uuid" - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - org1: "org1" - org2: "org2" schemas: + ContentType: + properties: {} + GetAvailableLinks: + properties: + self: + example: "https://sandboxapi.deere.com/platform/organizations/123456/operators" + description: "Self Link" + GetOperatorAvailableLinks: + properties: + self: + example: "https://sandboxapi.deere.com/platform/organizations/123456/operators/0235d40e-02d0-44cb-a126-fff21173fc1f" + description: "Self Link" GetResponseDetails: properties: id: @@ -294,8 +298,6 @@ components: example: "John Doe" description: "Operator Name" type: "string" - ContentType: - properties: {} PutOperator: properties: name: @@ -307,13 +309,11 @@ components: example: "false" type: "string" description: "Archived Status" - GetAvailableLinks: - properties: - self: - example: "https://sandboxapi.deere.com/platform/organizations/123456/operators" - description: "Self Link" - GetOperatorAvailableLinks: - properties: - self: - example: "https://sandboxapi.deere.com/platform/organizations/123456/operators/0235d40e-02d0-44cb-a126-fff21173fc1f" - description: "Self Link" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + org1: "org1" + org2: "org2" diff --git a/specs/fixed/organizations.yaml b/specs/fixed/organizations.yaml index 9073315..b79fbee 100644 --- a/specs/fixed/organizations.yaml +++ b/specs/fixed/organizations.yaml @@ -200,22 +200,6 @@ paths: description: "Not found" components: parameters: - UserName: - in: "query" - name: "userName" - description: "Returns a list of organizations of which a particular user is a member." - x-required-boolean: false - schema: - type: "string" - example: "JohnDoe" - UserName2: - in: "path" - name: "userName" - description: "User Name." - x-required-boolean: true - schema: - type: "string" - example: "JohnDoe" OrgId: in: "query" name: "orgId" @@ -224,6 +208,14 @@ components: schema: type: "string" example: 2101 + OrgIdGet: + in: "path" + name: "orgId" + description: "Organization" + x-required-boolean: true + schema: + type: "string" + example: 734561 OrgName: in: "query" name: "orgName" @@ -232,6 +224,22 @@ components: schema: type: "string" example: "Smith Farms" + UserName: + in: "query" + name: "userName" + description: "Returns a list of organizations of which a particular user is a member." + x-required-boolean: false + schema: + type: "string" + example: "JohnDoe" + UserName2: + in: "path" + name: "userName" + description: "User Name." + x-required-boolean: true + schema: + type: "string" + example: "JohnDoe" X-deere-signature: in: "header" name: "x-deere-signature" @@ -248,37 +256,7 @@ components: schema: type: "string" example: "4r5392615e4b4e1c92018026f47109bb" - OrgIdGet: - in: "path" - name: "orgId" - description: "Organization" - x-required-boolean: true - schema: - type: "string" - example: 734561 schemas: - OrganizationLink: - properties: - self: - example: "https://sandboxapi.deere.com/platform/organizations/1234" - description: "Link to organization" - connections: - example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations" - description: "Redirect link to enable organization access" - manage_connections: - example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" - description: "Redirect link to manage organization access and permissions" - OrganizationLink2: - properties: - self: - example: "https://sandboxapi.deere.com/platform/organizations/1234" - description: "Link to organization" - connections: - example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/organizations" - description: "Redirect link to enable organization access" - manage_connections: - example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" - description: "Redirect link to manage organization access and permissions" Organization: properties: x-deere-signature: @@ -301,6 +279,28 @@ components: type: "boolean" example: "true" description: "TRUE means that the user is a member of the org." + OrganizationLink: + properties: + self: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Link to organization" + connections: + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations" + description: "Redirect link to enable organization access" + manage_connections: + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" + description: "Redirect link to manage organization access and permissions" + OrganizationLink2: + properties: + self: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Link to organization" + connections: + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/organizations" + description: "Redirect link to enable organization access" + manage_connections: + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" + description: "Redirect link to manage organization access and permissions" OrganizationView: properties: id: diff --git a/specs/fixed/partnerships.yaml b/specs/fixed/partnerships.yaml index 99b3122..6ee7732 100644 --- a/specs/fixed/partnerships.yaml +++ b/specs/fixed/partnerships.yaml @@ -241,39 +241,17 @@ paths: Headers: description: "204 No Content" components: - parameters: - X-deere-signature: - name: "x-deere-signature" - in: "header" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." - schema: - type: "string" - example: "9f5396716e4b4e1c92018026f47109bb" - PartnershipId: - name: "token" - in: "path" - description: "Token Id" - x-required-boolean: true - schema: - type: "string" - format: "uuid" - example: "2b1b34fc-2cc3-4a57-8120-28ea912113fc" - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - org1: "org1" - org2: "org2" examples: - TokenNotFound: + CreateInvalidPrimaryDealer: value: "@type": "Errors" errors: - "@type": "Error" guid: "123abc-123-abc-123-abc123" - message: "No Partnership exists with the given partnership token." + message: "Attempting to set a non-dealer organization as primary dealer." + code: "Attempting to set a non-dealer organization as primary dealer." + field: "uri" + invalidValue: "https://api.deere.com/platform/organizations/12345" otherAttributes: {} NoDealerAccountExists: value: @@ -297,27 +275,32 @@ components: field: "dealerAccountId" invalidValue: "https://api.deere.com/platform/organizations/12345" otherAttributes: {} - CreateInvalidPrimaryDealer: + TokenNotFound: value: "@type": "Errors" errors: - "@type": "Error" guid: "123abc-123-abc-123-abc123" - message: "Attempting to set a non-dealer organization as primary dealer." - code: "Attempting to set a non-dealer organization as primary dealer." - field: "uri" - invalidValue: "https://api.deere.com/platform/organizations/12345" + message: "No Partnership exists with the given partnership token." otherAttributes: {} + parameters: + PartnershipId: + name: "token" + in: "path" + description: "Token Id" + x-required-boolean: true + schema: + type: "string" + format: "uuid" + example: "2b1b34fc-2cc3-4a57-8120-28ea912113fc" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9f5396716e4b4e1c92018026f47109bb" responses: - TokenNotFound: - description: "Not found" - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/Errors" - examples: - Partnership Not Found: - $ref: "#/components/examples/TokenNotFound" BadCreateRequests: description: "Request body was invalid" content: @@ -333,19 +316,16 @@ components: $ref: "#/components/examples/CreateInvalidPrimaryDealer" Forbidden: description: "Not authorized" + TokenNotFound: + description: "Not found" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + examples: + Partnership Not Found: + $ref: "#/components/examples/TokenNotFound" schemas: - Errors: - description: "A list of errors" - properties: - "@type": - type: "string" - example: "Errors" - errors: - type: "array" - items: - $ref: "#/components/schemas/Error" - otherAttributes: - type: "object" Error: description: "An error object" properties: @@ -368,6 +348,36 @@ components: invalidValue: type: "string" example: 1234123412341234 + Errors: + description: "A list of errors" + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + otherAttributes: + type: "object" + Partnership: + description: "A partnership object" + type: "object" + properties: + x-deere-signature: + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "3b6402615e4b4e1c92013026f47109bb" + status: + type: "string" + example: "REJECTED" + description: "View the status of the partnership" + PartnershipId: + properties: + status: + type: "string" + example: "PENDING" + description: "View the status of the partnership" Partnerships: description: "A list of partnerships" type: "object" @@ -385,32 +395,6 @@ components: type: "array" items: $ref: "#/components/schemas/Partnership" - Partnership: - description: "A partnership object" - type: "object" - properties: - x-deere-signature: - type: "string" - description: "A new x-deere-signature response header will be included if the response has changed since last api call." - example: "3b6402615e4b4e1c92013026f47109bb" - status: - type: "string" - example: "REJECTED" - description: "View the status of the partnership" - PartnershipsLink: - properties: - fromPartnership: - example: "https://sandboxapi.deere.com/platform/organizations/0987" - description: "Organizations Link." - toPartnership: - example: "https://sandboxapi.deere.com/platform/organizations/1234" - description: "Organizations Link." - permissions: - example: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" - description: "Permissions Link." - contactInvitation: - example: "https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703" - description: "Partnerships Link." PartnershipsId: description: "A list of partnerships" type: "object" @@ -428,8 +412,36 @@ components: type: "array" items: $ref: "#/components/schemas/PartnershipId" - PartnershipId: + PartnershipsLink: + properties: + fromPartnership: + example: "https://sandboxapi.deere.com/platform/organizations/0987" + description: "Organizations Link." + toPartnership: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organizations Link." + permissions: + example: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" + description: "Permissions Link." + contactInvitation: + example: "https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703" + description: "Partnerships Link." + PermissionPostValue: properties: + type: + type: "string" + example: "viewDetailsAndMapLocation" + description: "The type of permission." + status: + type: "string" + example: "requested" + description: "Indicates whether this permission has been granted to the partner org. Possible values are: Not Given, Requested, and Approved." + PermissionValue: + properties: + type: + type: "string" + example: "prescription Files" + description: "The type of permission." status: type: "string" example: "PENDING" @@ -456,16 +468,6 @@ components: requestPermissions: example: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" description: "Permissions Link." - PermissionValue: - properties: - type: - type: "string" - example: "prescription Files" - description: "The type of permission." - status: - type: "string" - example: "PENDING" - description: "View the status of the partnership" PermissionsPost: description: "A list of permissions" type: "object" @@ -474,13 +476,11 @@ components: type: "array" items: $ref: "#/components/schemas/PermissionPostValue" - PermissionPostValue: - properties: - type: - type: "string" - example: "viewDetailsAndMapLocation" - description: "The type of permission." - status: - type: "string" - example: "requested" - description: "Indicates whether this permission has been granted to the partner org. Possible values are: Not Given, Requested, and Approved." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + org1: "org1" + org2: "org2" diff --git a/specs/fixed/products.yaml b/specs/fixed/products.yaml index 7bb84d5..fe55e76 100644 --- a/specs/fixed/products.yaml +++ b/specs/fixed/products.yaml @@ -11,6 +11,7 @@ tags: description: "Chemical/Fertilizer and Variety master data for an organization" - name: "Tank Mixes" description: "Tank Mix master data for an organization" + - name: "Active Ingredients" servers: - url: "https://{environment}.deere.com/platform" variables: @@ -24,293 +25,345 @@ servers: - "apiqa.tal" - "apidev.tal" paths: - /organizations/{organizationId}/varieties: + /activeIngredients: get: tags: - - "Varieties" - summary: "View varieties for an org" - description: "This endpoint will retrieve a collection of varieties for the specified org." + - "Active Ingredients" + summary: "List of available active ingredients" + security: + - OAuth2: + - "eq1" + description: "Returns a list of all available active ingredients." parameters: - - $ref: "#/components/parameters/OrganizationID" - - $ref: "#/components/parameters/ArchiveStatus" - - $ref: "#/components/parameters/VarietyEmbed" + - $ref: "#/components/parameters/EntityTypeQueryParam" + responses: + "200": + description: "List of available active ingredients." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ActiveIngredientsCollection" + examples: + No Header: + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/isg/activeIngredients" + total: 4 + values: + - "@type": "ActiveIngredient" + id: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + name: "Urea Nitrogen" + - "@type": "ActiveIngredient" + id: "e022ec44-43de-43ab-92e2-2c60da7762b9" + name: "1-aminocyclopropanecarboxylic acid" + - "@type": "ActiveIngredient" + id: "fa79f870-7aa1-48e7-9d1e-4cf98d68ca57" + name: "1-aminocyclopropanecarboxylic acid (ACC)" + - "@type": "ActiveIngredient" + id: "962bd78a-0029-4c6a-b2dd-2efab3f53285" + name: "1-Methylcyclopropene" + "401": + description: "The user does not have access to the list of active ingredients." + /chemicals: + get: + tags: + - "Reference Chemicals" + summary: "Reference list of all known chemicals" security: - OAuth2: - "eq1" + description: "List of all chemicals from industry data sources, such as CDMS." + parameters: + - name: "searchString" + in: "query" + description: "performs a fuzzy search on product name, manufacturer, and chemical type. The search string must be at least 3 characters long." + schema: + type: "string" + example: "Roundup" + x-required-boolean: true + - name: "chemicalType" + in: "query" + description: "Specifies the registration number of the chemical based on the country or region/state of use." + schema: + type: "string" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + example: "INSECTICIDE" + - name: "productName" + in: "query" + description: "Specifies the name of the chemical in the global reference list." + schema: + type: "string" + example: "RoundUp" + x-required-boolean: true + - name: "brandName" + in: "query" + description: "Specifies the product manufacturer name of the chemical based on the region being used." + schema: + type: "string" + example: "MONSANTO AGRICULTURAL CO" + x-required-boolean: true + - name: "registration" + in: "query" + description: "Specifies the registration number of the chemical based on the region of use." + schema: + type: "string" + example: "89167-72-89391" + - name: "sourceSystemProductId" + in: "query" + description: "Specifies the source system product id of the chemical based on the country of use." + schema: + type: "string" + example: "905P24930" + - name: "countryCode" + in: "query" + description: "Specifies the region the chemical data belongs to. Some data may not be available in certain regions and data will not be included in the response." + schema: + type: "string" + example: "USA" responses: "200": - description: "A collection of your org varieties. If any of the supported embeds are used, the associated data will be present as a field in the variety." + description: "A collection of products matching the specified search criteria." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/VarietyCollection" + $ref: "#/components/schemas/ReferenceChemicalCollection" examples: No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" value: links: - "@type": "Link" rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=0" + uri: "https://sandboxapi.deere.com/platform/chemicals?searchString=round&itemLimit=10&pageOffset=0" - "@type": "Link" rel: "nextPage" - uri: "https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=10" - total: 20 + uri: "https://sandboxapi.deere.com/platform/chemicals?searchString=round&itemLimit=10&pageOffset=10" + total: 100 values: - - "@type": "Variety" - id: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - name: "1299" - category: "VARIETY" - cropName: "Cornell" - companyName: "Curry Seed" - createdTime: "2024-12-04T07:52:51.267Z" - modifiedTime: "2024-12-06T07:52:51.267Z" - referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - archived: false + - "@type": "ReferenceChemical" + id: "8fb34898-64f5-5a1e-a698-34ab348220a7" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + materialClassification: "LIQUID" + category: "CHEMICAL" + epaRegistration: "a12e9i84" + referenceId: "8fb34898-64f5-5a1e-a698-34ab348220a7" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" countryCode: "USA" - documentsList: - - "@type": "Document" - erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" - docType: "24(c) Registration" - productErid: "388ab719-277d-4032-a2c3-40a297d8f482" - description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" - fileName: "ld7OD026.pdf" - expirationDate: "2017-03-22" - childProducts: - - "@type": "Variety" - id: "18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc" - name: "corn123" - companyName: "1.4GROUP" - cropName: "SOYBEANS" - archived: false - category: "VARIETY" - createdTime: "2025-03-21T21:12:53.865Z" - modifiedTime: "2025-04-06T15:12:52.910Z" - countryCode: "USA" - cleanupStatus: "MERGED" - parentErid: "b0241592-c95a-4a8b-a2f9-3e58168ac291" - cleanupActionDate: "2025-09-22T11:24:43.855Z" - documentsList: [] - childProducts: [] - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff" - - "@type": "Variety" - id: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" - name: "2C788A SXRA COR" - category: "VARIETY" - cropName: "CORN_WET" - companyName: "MYCOGEN SEEDS" - createdTime: "2024-12-04T07:52:51.267Z" - referenceGuid: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" - referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - archived: false + type: "HERBICIDE" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: "905P24925" + - "@type": "ReferenceChemical" + id: "bef74fe4-95bf-4e00-9833-b5b8272177c8" + name: "SOURCE® Corn" + category: "CHEMICAL" + type: "HERBICIDE" + companyName: "Sound Agriculture" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2023-09-02T01:32:21.945933Z" + modifiedTime: "2023-11-15T16:40:15.451Z" + sourceSystem: "3" + sourceSystemProductId: "20265" countryCode: "USA" - documentsList: - - "@type": "Document" - erid: "4cb1e8c0-e801-4f19-b674-6362246be920" - docType: "24(c) Registration" - productErid: "388ab719-277d-4032-a2c3-40a297d8f482" - description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" - fileName: "ld7OD026.pdf" - expirationDate: "2017-03-22" - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/c3a58145-acfc-4b73-bc1d-0d442697e053" - - "@type": "Variety" - id: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa" - name: "33H83" - category: "VARIETY" - cropName: "CORN_WET" - companyName: "Pioneer" - createdTime: "2024-12-04T07:52:51.267Z" - referenceGuid: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa" - referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - archived: false + referenceId: "bef74fe4-95bf-4e00-9833-b5b8272177c8" + referenceGuid: "bef74fe4-95bf-4e00-9833-b5b8272177c8" + restrictedUse: false + - "@type": "ReferenceChemical" + id: "aa1ffc6e-edcd-4112-b62d-74cdad35fa03" + name: "Roundup Ultra®" + category: "CHEMICAL" + type: "HERBICIDE" + companyName: "BAYER CROPSCIENCE" + epaRegistration: "524-475" + registration: "524-475" + materialClassification: "LIQUID" + createdTime: "2023-09-02T01:22:00.669119Z" + modifiedTime: "2024-11-19T15:20:10.752Z" + sourceSystem: "3" + sourceSystemProductId: "856" countryCode: "USA" - documentsList: - - "@type": "Document" - erid: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" - docType: "24(c) Registration" - productErid: "388ab719-277d-4032-a2c3-40a297d8f482" - description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" - fileName: "ld7OD026.pdf" - expirationDate: "2017-03-22" - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/b006726b-38a0-44a6-b723-a966c68170b6" + referenceId: "aa1ffc6e-edcd-4112-b62d-74cdad35fa03" + referenceGuid: "aa1ffc6e-edcd-4112-b62d-74cdad35fa03" + restrictedUse: false "403": - description: "The user has not been provided access to the varieties for this org" + description: "The user does not have access to manage products." "404": - description: "The specified organization does not exist" - post: + description: "No chemical found with this country code." + /chemicals/{erid}: + get: tags: - - "Varieties" - summary: "Add a variety" - description: "This endpoint will add a custom variety into the organization. Its name+cropName must be unique within your organization. Its crop name must be a supported crop name (see /cropTypes). There are a number of crop names that are deprecated in the system. If the crop name is set to one of these, then it will be mapped to its corresponding valid crop name. Additionally, POST can be used for supporting offline creation of varieties from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + - "Reference Chemicals" + summary: "Get a single reference chemical" + description: "Single chemical from industry data sources, such as CDMS." + security: + - OAuth2: + - "eq1" parameters: - - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "A single chemical matching the specified erid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceChemical" + examples: + No Header: + value: + "@type": "ReferenceChemical" + id: "8fb34898-64f5-5a1e-a698-34ab348220a7" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + materialClassification: "LIQUID" + category: "CHEMICAL" + countryCode: "USA" + type: "HERBICIDE" + restrictedUse: false + sourceSystem: "3" + epaRegistration: "a12e9i84" + sourceSystemProductId: "905P24925" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + "403": + description: "The user does not have access to manage products." + "404": + description: "No chemical found matching this erid." + /chemicals/{erid}/associateToOrg/{organizationId}: + post: + tags: + - "Reference Chemicals" + summary: "Adds a single reference chemical to organization" security: - OAuth2: - "eq2" + description: "This endpoint will associate a reference chemical to your organization from the global reference list. The reference chemicals are immutable, however, they can still be archived or made available. If a reference chemical is created as a carrier, it cannot be changed thereafter. The registration of a reference chemical can also be updated. The response headers from the GET endpoints will include the attributes that can be overridden." + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" requestBody: description: "The product to add." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/PostVariety" + $ref: "#/components/schemas/PostReferenceChemical" examples: No Header: value: - name: "2C788A SXRA COR" - companyName: "MYCOGEN SEEDS" - cropName: "CORN_WET" - category: "VARIETY" - archived: false - createdTime: "2017-03-21T21:12:53.865Z" - modifiedTime: "2018-04-06T15:12:52.910Z" + countryCode: "USA" + overrides: + - key: "archived" + value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" + value: true responses: - "201": + "200": + description: "Successful association of reference chemical to org." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/responses/Created" examples: Headers: - description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/654321/varieties/8e1e0920-1265-4066-8067-8ce2ce5012b2" + description: "201 Created" + value: + - key: "archived" + success: true + errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" + success: true + errors: [] "400": - description: "Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid." + description: "Unresolvable name conflict or other error occurred." content: - application/vnd.deere.axiom.v3+json: + application/json: schema: - $ref: "#/components/schemas/Errors" + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" "403": - description: "The user has not been provided write access to the variety list for the org" + description: "Invalid access to products for organization" "404": - description: "The specified organization does not exist" - "409": - description: "A product already exists in this org with the specified reference Erid" - /organizations/{organizationId}/varieties/{erid}: + description: "Organization does not exist" + /chemicals/{erid}/documents: get: - summary: "View a specific variety" - description: "This endpoint will return the variety with the specified erid." - parameters: - - $ref: "#/components/parameters/OrganizationID" - - $ref: "#/components/parameters/ERID" - - $ref: "#/components/parameters/VarietyEmbed" + tags: + - "Reference Chemicals" + summary: "Reference list of documents for an associated chemical" security: - OAuth2: - "eq1" + description: "List of all the documents for a chemical from industry data sources, such as CDMS." + parameters: + - $ref: "#/components/parameters/ERID" responses: "200": - description: "A variety object" + description: "A collection of documents for the specified chemical." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/Variety" + $ref: "#/components/schemas/DocumentCollection_Chemicals" examples: No Header: - description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" value: - "@type": "Variety" - id: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - name: "1299" - cropName: "Cornell" - companyName: "Curry Seed" - archived: false - category: "VARIETY" - referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - createdTime: "2017-03-21T21:12:53.865Z" - modifiedTime: "2017-03-22T21:12:53.870Z" - countryCode: "USA" - documentsList: - - "@type": "Document" - erid: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" - docType: "24(c) Registration" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/chemicals/2efdaf0a-254c-4ba2-9a1f-b3c94f962224/documents?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "next" + uri: "https://sandboxapi.deere.com/platform/chemicals/2efdaf0a-254c-4ba2-9a1f-b3c94f962224/documents?itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "Document" + erid: "1f8c12b4-126f-11ec-82a8-0242ac130003" productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + docType: "24(c) Registration" description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" fileName: "ld7OD026.pdf" expirationDate: "2017-03-22" - childProducts: - - "@type": "Variety" - id: "18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc" - name: "corn123" - companyName: "1.4GROUP" - cropName: "SOYBEANS" - archived: false - category: "VARIETY" - createdTime: "2025-03-21T21:12:53.865Z" - modifiedTime: "2025-04-06T15:12:52.910Z" - countryCode: "USA" - cleanupStatus: "MERGED" - parentErid: "b0241592-c95a-4a8b-a2f9-3e58168ac291" - cleanupActionDate: "2025-09-22T11:24:43.855Z" - documentsList: [] - childProducts: [] - links: - - "@type": "Link" - rel: "self" - uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff" - "403": - description: "The user does not have sufficient privileges to access varieties in this org" - "404": - description: "There is no variety matching the specified Erid" - put: - summary: "Update a single variety" - description: "This endpoint allows the custom variety to be renamed, made active/archived, or associated to a different manufacturer or crop type." - parameters: - - $ref: "#/components/parameters/OrganizationID" - - $ref: "#/components/parameters/ERID" - security: - - OAuth2: - - "eq2" - requestBody: - description: "The updated variety object." - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/PutVariety" - examples: - No Header: - value: - name: "1299" - companyName: "Curry Seed" - cropName: "SOYBEANS" - archived: true - createdTime: "2019-03-28T14:59:57.000Z" - modifiedTime: "2019-03-27T14:59:57.000Z" - responses: - "204": - description: "The update was completed successfully" - content: - application/vnd.deere.axiom.v3+json: - examples: - Headers: - description: "204 No Content The update was completed successfully." - "400": - description: "Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid" - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/Errors" + - "@type": "Document" + erid: "6d0b01a5-05b7-4c2b-985b-c322939f92cb" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + fileName: "mp6EE011.pdf" + docType: "SDS" + description: "2/26/2021" "403": - description: "The user does not have sufficient privileges to update varieties in this org" - "404": - description: "There is no variety matching the specified Erid" - /varieties/{erid}/associateToOrg/{organizationId}: - post: + description: "The user does not have access to manage products." + /chemicals/{erid}/setOverridesForOrg/{organizationId}: + patch: tags: - - "Reference Varieties" - summary: "Adds a single reference variety to organization" + - "Reference Chemicals" security: - OAuth2: - "eq2" - description: "This endpoint will associate a reference variety to your organization from the global reference list. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden." + summary: "Sets organizational attributes such as isCarrier, archived, registration, etc" + description: "This endpoint will set attribute overrides while importing a reference chemical to your organization. The reference chemicals are immutable, however, they can still be archived or made available. Once set to true, the carrier attribute cannot be set to false. The registration of a reference chemical can be updated. The response headers from the GET endpoints will include the attributes that can be overridden." parameters: - $ref: "#/components/parameters/ERID" - $ref: "#/components/parameters/OrganizationID" @@ -319,30 +372,39 @@ paths: content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/ReferenceProductPointerRequest" + $ref: "#/components/schemas/CommonReferenceChemical" examples: No Header: value: - countryCode: "USA" overrides: - key: "archived" value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" + value: true responses: "200": - description: "Successful association of reference variety to org." + description: "Successful update of overrides of reference chemical associated to your org." content: application/vnd.deere.axiom.v3+json: schema: type: "array" items: - $ref: "#/components/schemas/ReferenceProductOverrideStatus" + $ref: "#/components/schemas/ReferenceProductOverrideStatus_Chemicals" examples: Headers: - description: "201 Created Created successfully." + description: "200 Created" value: - key: "archived" success: true errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" + success: true + errors: [] "400": description: "Unresolvable name conflict or other error occurred." content: @@ -358,67 +420,106 @@ paths: items: $ref: "#/components/schemas/Errors" "403": - description: "Invalid access to products for organization" + description: "Invalid access to reference product associated to organization" "404": - description: "Organization does not exist." - "409": - description: "A product already exists in this org with the specified erid." - /varieties: + description: "Organization does not exist" + /documents/{erid}: get: tags: - - "Reference Varieties" - summary: "Search reference catalog varieties" + - "Documents" + summary: "Document details w/ pdf file" security: - OAuth2: - "eq1" - description: "This endpoint searches the reference catalog for varieties that match the given search criteria. This data can be used in a subsequent request to create a variety in an organization. Results are limited to 100 items." + description: "Document details for a product with embedded pdf file (gzip+base64)." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "Document details with included pdf file." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DocumentWithPdfFile" + examples: + No Header: + value: + "@type": "Document" + erid: "cff5ba0b-1768-48a3-b3ec-dd62aac1cff3" + productErid: "7d9ec6a6-6b8f-4312-92c7-bc022b7f5351" + fileName: "ld8NF004.pdf" + docType: "Specimen Label" + description: "SAL 7/27/11" + pdfFile: "H4sIAAAAAAAAAIy7BVhduxI2XNy1aLFNcYe9cXd3l01xd3eKuzsUd5fiBYq7u0OLe6G4f+05175z7n+/f60nzySTWZPJ5J1kW..." + "403": + description: "The user does not have access to manage products." + "404": + description: "Not Found." + /fertilizers: + get: + tags: + - "Reference Fertilizers" + summary: "Reference list of all known fertilizers" + security: + - OAuth2: + - "eq1" + description: "List of all fertilizers from industry data sources, such as CDMS." parameters: - name: "searchString" in: "query" - description: "Performs a fuzzy search on variety and manufacturer name. The search string must be at least 3 characters long." + description: "performs a fuzzy search on product name, manufacturer, and fertilizer type. The search string must be at least 3 characters long." schema: type: "string" - example: "venture" + example: "Manure" x-required-boolean: true - - name: "cropName" + - name: "fertilizerType" in: "query" - description: "Filters the results by crop id (see the /cropTypes API)." + description: "Specifies the registration number of the fertilizer based on the country or region/state of use." schema: type: "string" - example: "SOYBEANS" + enum: + - "FERTILIZER" + - "MANURE" + example: "FERTILIZER" - name: "productName" in: "query" - description: "Specifies the name of the variety from the global reference list." + description: "Specifies the name of the fertilizer in the global reference list." schema: type: "string" - example: "SH 5614 LL/STS" + example: "ProNatural® Calcium Plus 1-0-0" x-required-boolean: true - name: "brandName" in: "query" - description: "Specifies the product manufacturer name of the variety based on the region being used." + description: "Specifies the product manufacturer name of the fertilizer based on the region being used." schema: type: "string" - example: "Southern Harvest" + example: "Wilbur-Ellis Company LLC" x-required-boolean: true + - name: "registration" + in: "query" + description: "Specifies the registration number of the fertilizer based on the region of use." + schema: + type: "string" + example: "EXEMPT" - name: "sourceSystemProductId" in: "query" - description: "Specifies the source system product id of the variety based on the country of use." + description: "Specifies the source system product id of the fertilizer based on the country of use." schema: type: "string" - example: "79186" + example: "13328" - name: "countryCode" in: "query" - description: "Specifies the region the variety data belongs to. Some data may not be available in certain regions and data will not be included in the response." + description: "Specifies the region the fertilizer data belongs to. Some data may not be available in certain regions and data will not be included in the response." schema: type: "string" example: "USA" responses: "200": - description: "A collection of reference varieties matching the specified search criteria." + description: "A collection of reference fertilizers matching the specified search criteria." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/ReferenceVarietyCollection" + $ref: "#/components/schemas/ReferenceFertilizerCollection" examples: Headers: description: "200 OK" @@ -426,96 +527,175 @@ paths: links: - "@type": "Link" rel: "self" - uri: "https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=0" + uri: "https://sandboxapi.deere.com/platform/fertilizers?searchString=corn&itemLimit=10&pageOffset=0" - "@type": "Link" rel: "nextPage" - uri: "https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=10" + uri: "https://sandboxapi.deere.com/platform/fertilizers?searchString=corn&itemLimit=10&pageOffset=10" total: 100 values: - - "@type": "ReferenceVariety" - id: "1f8c12b4-126f-11ec-82a8-0242ac130003" - referenceId: "1f8c12b4-126f-11ec-82a8-0242ac130003" - category: "VARIETY" - name: "S73-Z5 - 50lb bag" - companyName: "NK" - cropName: "SOYBEANS" + - "@type": "Fertilizer" + id: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + referenceId: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + materialClassification: "LIQUID" + category: "FERTILIZER" countryCode: "USA" - sourceSystem: "3" - sourceSystemProductId: "905P24925" + epaRegistration: "a12e9i84" createdTime: "2017-03-21T21:12:53.865Z" modifiedTime: "2018-04-06T15:12:52.910Z" - - "@type": "ReferenceVariety" - id: "75138754-6381-49c7-be9e-9e08a847075a" - referenceId: "75138754-6381-49c7-be9e-9e08a847075a" - category: "VARIETY" - name: "Cornelius 155A" - companyName: "Cornelius Seed" - cropName: "ALFALFA" + type: "MANURE" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: "905P24925" + - "@type": "Fertilizer" + id: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + referenceId: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + name: "Corn Mix LS" + companyName: "WinField United" + registration: "EXEMPT" + materialClassification: "LIQUID" + category: "FERTILIZER" countryCode: "USA" + epaRegistration: "EXEMPT" + createdTime: "2023-11-02T22:49:10.585718Z" + modifiedTime: "2024-11-19T17:51:38.225Z" + type: "FERTILIZER" + restrictedUse: false sourceSystem: "3" - sourceSystemProductId: 105332 - createdTime: "2023-09-02T05:10:33.415Z" - modifiedTime: "2024-11-20T02:04:39.994Z" + sourceSystemProductId: 13977 "403": description: "The user does not have access to manage products." "404": - description: "No variety found with this country code." - /varieties/{erid}: + description: "No fertilizer found with this country code." + /fertilizers/{erid}: get: tags: - - "Reference Varieties" - summary: "Get a single reference variety." + - "Reference Fertilizers" + summary: "Single reference fertilizer" security: - OAuth2: - "eq1" - description: "Single variety from industry data sources, such as CDMS." + description: "Single fertilizer from industry data sources, such as CDMS." parameters: - $ref: "#/components/parameters/ERID" responses: "200": - description: "A single variety matching the specified erid." + description: "A single reference fertilizer matching the specified erid." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/ReferenceVariety" + $ref: "#/components/schemas/ReferenceFertilizer" examples: Headers: description: "200 OK" value: - "@type": "ReferenceVariety" - id: "1f8c12b4-126f-11ec-82a8-0242ac130003" - referenceId: "1f8c12b4-126f-11ec-82a8-0242ac130003" - category: "VARIETY" - name: "S73-Z5 - 50lb bag" - companyName: "NK" - cropName: "SOYBEANS" + "@type": "Fertilizer" + id: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + referenceId: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + epaRegistration: "a12e9i84" + materialClassification: "LIQUID" + category: "FERTILIZER" countryCode: "USA" - sourceSystem: "3" - sourceSystemProductId: "905P24925" createdTime: "2017-03-21T21:12:53.865Z" modifiedTime: "2018-04-06T15:12:52.910Z" + type: "MANURE" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: "905P24925" "403": description: "The user does not have access to manage products." "404": - description: "No variety found matching this erid." - /varieties/{erid}/documents: + description: "No fertilizer found matching this erid." + /fertilizers/{erid}/associateToOrg/{organizationId}: + post: + tags: + - "Reference Fertilizers" + summary: "Adds a single reference fertilizer to organization" + security: + - OAuth2: + - "eq2" + description: "This endpoint will associate a reference fertilizer to your organization from the global reference list. The reference fertilizers are immutable, however, they can still be archived or made available. If a reference fertilizer is created as a carrier, it cannot be changed thereafter. The registration of a reference fertilizer can also be updated. The response headers from the GET endpoints will include the attributes that can be overridden." + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostReferenceFertilizer" + examples: + No Header: + value: + countryCode: "USA" + overrides: + - key: "archived" + value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" + value: true + responses: + "200": + description: "Successful association of reference fertilizer to org." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "200 Created" + value: + - key: "archived" + success: true + errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: + application/json: + schema: + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to products for organization" + "404": + description: "Organization does not exist" + /fertilizers/{erid}/documents: get: tags: - - "Reference Varieties" - summary: "Reference list of documents for an associated seed variety." + - "Reference Fertilizers" + summary: "Reference list of documents for an associated fertilizer" security: - OAuth2: - "eq1" - description: "List of all the documents for a variety from industry data sources, such as CDMS." + description: "List of all the documents for a fertilizer from industry data sources, such as CDMS." parameters: - $ref: "#/components/parameters/ERID" responses: "200": - description: "A collection of documents for the specified seed variety." + description: "A collection of documents for the specified fertilizer." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/DocumentCollection" + $ref: "#/components/schemas/DocumentCollection_Fertilizers" examples: Headers: description: "200 OK" @@ -536,17 +716,23 @@ paths: description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" fileName: "ld7OD026.pdf" expirationDate: "2017-03-22" + - "@type": "Document" + erid: "5c2dd6b0-3f66-437c-910b-634c9e83e205" + productErid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + fileName: "mpCO7001.pdf" + docType: "SDS" + description: "April 6, 2020" "403": description: "The user does not have access to manage products." - /varieties/{erid}/setOverridesForOrg/{organizationId}: + /fertilizers/{erid}/setOverridesForOrg/{organizationId}: patch: tags: - - "Reference Varieties" - summary: "Sets organizational attributes such as isCarrier, archived, registration, etc." + - "Reference Fertilizers" + summary: "Sets organizational attributes such as isCarrier, archived, registration, etc" security: - OAuth2: - "eq2" - description: "This endpoint will set attribute overrides while importing a reference variety to your organization. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden." + description: "This endpoint will set attribute overrides while importing a reference fertilizer to your organization. The reference fertilizers are immutable, however, they can still be archived or made available. Once set to true, the carrier attribute cannot be set to false. The registration of a reference fertilizer can be updated. The response headers from the GET endpoints will include the attributes that can be overridden." parameters: - $ref: "#/components/parameters/ERID" - $ref: "#/components/parameters/OrganizationID" @@ -555,32 +741,42 @@ paths: content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/CommonProductPointerRequest" + $ref: "#/components/schemas/CommonPostReferenceFertilizer" examples: No Header: value: overrides: - key: "archived" value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" + value: true responses: "200": - description: "Successful update of overrides of reference variety associated to your org." + description: "Successful update of overrides of reference fertilizer associated to your org." content: application/vnd.deere.axiom.v3+json: schema: type: "array" items: - $ref: "#/components/schemas/ReferenceProductOverrideStatus" + $ref: "#/components/schemas/ReferenceProductOverrideStatus_Fertilizers" examples: Headers: - description: "200 OK" + description: "200 Created" value: - key: "archived" success: true errors: [] - "400": - description: "Unresolvable name conflict or other error occurred." - content: + - key: "isCarrier" + success: true + errors: [] + - key: "registration" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: application/json: schema: properties: @@ -596,189 +792,5544 @@ paths: description: "Invalid access to reference product associated to organization" "404": description: "Organization does not exist" -components: - parameters: - VarietyEmbed: - in: "query" - name: "embed" - description: "An embeddable list of properties which are optional by default." - schema: - type: "array" - items: - type: "string" - enum: - - "documents" - - "showMergedProducts" - ArchiveStatus: - in: "query" - name: "status" - description: "Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties." - x-required-boolean: false - schema: - type: "string" - enum: - - "AVAILABLE" - - "ARCHIVED" - - "ALL" - example: "AVAILABLE" - OrganizationID: - in: "path" - name: "organizationId" - description: "The identifier of the Organization." - x-required-boolean: true - schema: - type: "integer" - example: 6781 - format: "int64" - OrgId: - name: "orgId" - in: "path" - description: "The organization owning the varieties." - x-required-boolean: true - schema: - type: "number" - example: 654321 - RecordFilter: - name: "recordFilter" - in: "query" - description: "Filter results based on status" - schema: - type: "string" - example: "active, archived, all" - Embed: - name: "embed" - in: "query" - description: "Embeds extra information in the org varieties response" - schema: - type: "string" - example: "documents" - Embed2: - name: "embed" - in: "query" - description: "Embeds extra information in the variety response" - schema: - type: "string" - example: "documents" - X-deere-signature: - name: "x-deere-signature" - in: "header" - description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." - schema: - type: "string" - example: "9r8392615e4b4e1c92018026f47109bb" - VarietyId: - name: "varietyId" - in: "path" - description: "The variety Id to find." - x-required-boolean: true - schema: - type: "string" - example: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - VarietyId2: - name: "varietyId" - in: "path" - description: "The variety Id" - x-required-boolean: true - schema: - type: "string" - example: "8e1e0920-1265-4066-8067-8ce2ce5012b2" - ERID: - in: "path" - name: "erid" - description: "A unique identifier for an entity formatted as a uuid." - x-required-boolean: true - example: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" - schema: - type: "string" - format: "uuid" - securitySchemes: - OAuth2: - type: "oauth2" - flows: - clientCredentials: - scopes: - ag2: "ag2" - ag3: "ag3" - schemas: - BaseResourceWithoutLink: - type: "object" - properties: - "@type": - type: "string" - example: "BaseResource" - id: - description: "Primary identifier for resource." - type: "string" - format: "uuid" - example: "1f8c12b4-126f-11ec-82a8-0242ac130003" - Document: - type: "object" - allOf: - - properties: - "@type": - example: "Document" - x-required-boolean: true - erid: - type: "string" - description: "Unique id of the document" - example: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" - docType: - type: "string" - example: "24(c) Registration" - description: "Type of document for this product." - x-required-boolean: true - productErid: - type: "string" - example: "388ab719-277d-4032-a2c3-40a297d8f482" - description: "The Unique id of the product." - x-required-boolean: true - description: - type: "string" - example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" - description: "Information about the document." - x-required-boolean: true - fileName: - type: "string" - example: "ld7OD026.pdf" - description: "The filename of the document." - x-required-boolean: true - expirationDate: + /organizations/{organizationId}/chemicals: + get: + tags: + - "Chemicals" + summary: "Retrieve unified list of custom and reference chemicals in your organization." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ArchiveStatus" + - $ref: "#/components/parameters/ChemicalEmbed" + responses: + "200": + description: "A collection of your org chemicals. If any of the supported embeds are used, the associated data will be present as a field in the chemical." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ChemicalCollection" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/85f76746-fba2-48d0-bf7c-e46a79b00327" + id: "85f76746-fba2-48d0-bf7c-e46a79b00327" + name: "Abacus V" + type: "INSECTICIDE" + category: "CHEMICAL" + companyName: "Rotam North America, Inc. - US" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + referenceId: "85f76746-fba2-48d0-bf7c-e46a79b00327" + referenceGuid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: + - "@type": "ActiveIngredient" + guid: "40ab45ee-96ef-4bfe-883a-fb65ced5b748" + name: "Ammonium sulfate" + percent: 40.25 + unit: "%" + value: 40.25 + availableRegistrations: + - "EXEMPT" + documentsList: + - "@type": "Document" + erid: "4360eaf3-cd0e-486d-88d9-8153ca547084" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "ldC7J001.pdf" + docType: "Specimen Label" + description: "6422SP-0418" + - "@type": "Document" + erid: "8769a734-7a91-4b6d-b829-06e50e25ebc6" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J002.pdf" + docType: "SDS" + description: "April 28, 2020" + - "@type": "Document" + erid: "d2c5f59f-1136-449e-9d62-017979f8a617" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J004.pdf" + docType: "SDS" + description: "10/29/2024" + childProducts: + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/chemicals/5e069eca-e445-41af-b870-c78390f7e7cb" + id: "5e069eca-e445-41af-b870-c78390f7e7cb" + name: "ABAMEC SC" + type: "ADDITIVE" + category: "CHEMICAL" + companyName: "1.4GROUP" + carrier: false + archived: true + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + cleanupStatus: "MERGED," + parentErid: "d8355ff0-2d14-4eee-8092-b30568cd4adb," + cleanupActionDate: "2025-09-15T11:25:16.149Z," + restrictedUse: false + countryCode: "USA" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/00e03fe1-421e-4b2d-870e-9c1f010fba66" + id: "00e03fe1-421e-4b2d-870e-9c1f010fba66" + name: "Chemical-Fungicide (Liquid)" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "Koch Agronomic Services, LLC" + carrier: false + archived: true + restrictedUse: false + countryCode: "USA" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Chemicals" + summary: "Add chemical" + parameters: + - $ref: "#/components/parameters/OrganizationID" + security: + - OAuth2: + - "eq2" + description: "This endpoint will add a custom chemical into the organization. Its name+type must be unique within your organization, unless carrier is set to true. If carrier is set to true, then type is disregarded. A chemical's carrier property cannot be changed to false once set to true. A chemical cannot be archived if it is in an active tank mix or dry blend. If a chemical is marked as archived and is used in a tank mix/dry blend, if the tank mix/dry blend is made available, then this chemical will also be made available. If passing in a liquid weight or weight unit, material classification should be set to LIQUID. Additionally, POST can be used for supporting offline creation of chemicals from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostChemical" + examples: + No Header: + value: + "@type": "Chemical" + name: "Tide Propiconazole 41.8EC" + registration: "a12e9i84" + companyName: "Tide International USA, Inc." + type: "HERBICIDE" + restrictedUse: false + materialClassification: "DRY" + carrier: false + archived: false + referenceGuid: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "a12e9i84" + responses: + "201": + description: "Create Chemicals" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/123456/chemicals/c0dcb00a-6b6f-4508-9180-679addad23f8" + "400": + description: "Schema validation error. Missing one or more of the required fields (name, company, type, material classification), or name does not meet length requirements." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user has not been provided write access to the product list for the org" + "404": + description: "The specified organization does not exist" + "409": + description: "A product already exists in this org with the requested Erid" + /organizations/{organizationId}/chemicals/{erid}: + get: + tags: + - "Chemicals" + summary: "Retrieve a specific chemical from an organization's asset list." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/ChemicalEmbed" + responses: + "200": + description: "A chemical matching the requested erid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Chemical" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/85f76746-fba2-48d0-bf7c-e46a79b00327" + id: "85f76746-fba2-48d0-bf7c-e46a79b00327" + name: "AMS-All" + type: "ADJUVANT" + category: "CHEMICAL" + companyName: "Drexel Chemical Company" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + referenceId: "85f76746-fba2-48d0-bf7c-e46a79b00327" + referenceGuid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: + - "@type": "ActiveIngredient" + guid: "40ab45ee-96ef-4bfe-883a-fb65ced5b748" + name: "Ammonium sulfate" + percent: 40.25 + unit: "%" + value: 40.25 + availableRegistrations: + - "EXEMPT" + documentsList: + - "@type": "Document" + erid: "4360eaf3-cd0e-486d-88d9-8153ca547084" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "ldC7J001.pdf" + docType: "Specimen Label" + description: "6422SP-0418" + - "@type": "Document" + erid: "8769a734-7a91-4b6d-b829-06e50e25ebc6" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J002.pdf" + docType: "SDS" + description: "April 28, 2020" + - "@type": "Document" + erid: "d2c5f59f-1136-449e-9d62-017979f8a617" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J004.pdf" + docType: "SDS" + description: "10/29/2024" + childProducts: + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/chemicals/5e069eca-e445-41af-b870-c78390f7e7cb" + id: "5e069eca-e445-41af-b870-c78390f7e7cb" + name: "ABAMEC SC" + type: "ADDITIVE" + category: "CHEMICAL" + companyName: "1.4GROUP" + carrier: false + archived: true + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + cleanupStatus: "MERGED," + parentErid: "d8355ff0-2d14-4eee-8092-b30568cd4adb," + cleanupActionDate: "2025-09-15T11:25:16.149Z," + restrictedUse: false + countryCode: "USA" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + "403": + description: "The user does not have sufficient privileges to access products in this org" + "404": + description: "There is no product matching the specified Erid" + put: + tags: + - "Chemicals" + summary: "Update a single chemical" + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + description: "Allows the custom chemical to be renamed, made active/archived, or flagged as a carrier." + security: + - OAuth2: + - "eq2" + requestBody: + description: "The updated chemical object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutChemical" + examples: + No Header: + value: + "@type": "Chemical" + name: "Tide Propiconazole 41.8EC" + registration: "a12e9i84" + companyName: "Tide International USA, Inc." + type: "MANURE" + materialClassification: "GAS" + carrier: false + archived: false + restrictedUse: false + referenceGuid: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + liquidWeight: 3.14 + weightUnit: "lb/gal" + epaRegistration: "a12e9i84" + createdTime: "2017-03-20T21:12:53.870Z" + modifiedTime: "2017-03-22T21:12:53.870Z" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "a12e9i84" + responses: + "200": + description: "The update was completed successfully" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "An invalid type or material classification was specified." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user does not have sufficient privileges to update products in this org" + "404": + description: "There is no product matching the specified Erid" + /organizations/{organizationId}/dryBlends: + post: + parameters: + - $ref: "#/components/parameters/OrganizationID" + tags: + - "Dry Blends" + summary: "Create a dry blend" + security: + - OAuth2: + - "eq2" + description: "Add a dry blend to the asset list of an organization. Any chemicals or fertilizers in the dry blend must exist in the organization before the dry blend is persisted. The name of the dry blend must be unique in your organization. Additionally, POST can be used for supporting offline creation of dry blends from e.g. a mobile app, by sending a payload with an `erid` generated by the client. If an `erid` is present in the payload, the service checks the database for that `erid`. In case no record is found, a new one is created with that `erid` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `erid` already exists." + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostDryBlend" + examples: + No Header: + value: + "@type": "DryBlend" + name: "TestDryBlend" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 0 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "Mix in the carrier last" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 1.784 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/b25de35e-6062-4ecb-917d-ed145ab378d1" + targetCrops: + - "CORN_WET" + - "ALFALFA" + responses: + "201": + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/123456/dryBlends/11139377-60ab-451f-931e-1d0569f343f1" + "400": + description: "Missing a required field, or an invalid value is included in a field." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user is not allowed to manage products for this org." + "404": + description: "The specified organization does not exist." + "409": + description: "A dry blend already exists in this org with the requested erid." + get: + parameters: + - $ref: "#/components/parameters/DryBlendEmbed" + - $ref: "#/components/parameters/OrganizationID" + tags: + - "Dry Blends" + summary: "Retrieve dry blends for an org" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A collection of dry blends." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DryBlendCollection" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/dryBlends?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/dryBlends?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "DryBlend" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8" + erid: "af20cf1a-2def-47ce-9861-35f51afc1ad8" + name: "dryblend_alfa" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "notes" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + targetCrops: + - "ALFALFA" + - "ALMONDS" + - "@type": "DryBlend" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/c0fac05d-a4e3-4c0d-9465-4a742ee08b11" + erid: "c0fac05d-a4e3-4c0d-9465-4a742ee08b11" + name: "dryBlend_almond" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "detail notes" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/efe46183-f5e6-43a5-9ceb-3611adc03cc3" + id: "efe46183-f5e6-43a5-9ceb-3611adc03cc3" + name: "LMA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "efe46183-f5e6-43a5-9ceb-3611adc03cc3" + referenceGuid: "efe46183-f5e6-43a5-9ceb-3611adc03cc3" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/efe46183-f5e6-43a5-9ceb-3611adc03cc3" + targetCrops: + - "ALMONDS" + "403": + description: "The user has not been provided access to the products for this org." + "404": + description: "The specified organization does not exist." + /organizations/{organizationId}/dryBlends/{erid}: + get: + parameters: + - $ref: "#/components/parameters/DryBlendEmbed" + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + tags: + - "Dry Blends" + summary: "Retrieves a specific dry blend" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A dry blend object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DryBlend" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "DryBlend" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8" + erid: "af20cf1a-2def-47ce-9861-35f51afc1ad8" + name: "dryblend_alfa" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "notes" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + targetCrops: + - "ALFALFA" + "403": + description: "The user has not been provided access to the products for this org." + "404": + description: "The specified organization does not exist, or does not contain the requested dry blend." + put: + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + tags: + - "Dry Blends" + summary: "Update a dry blend" + security: + - OAuth2: + - "eq2" + description: "Allows updates to be made to the name, archival status, and components of a dry blend." + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostDryBlend" + examples: + No Header: + value: + name: "TestDryBlend" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 0 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "Mix in the carrier last" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 1.784 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/b25de35e-6062-4ecb-917d-ed145ab378d1" + targetCrops: + - "CORN_WET" + responses: + "204": + description: "The update was completed successfully." + content: + application/vnd.deere.axiom.v3+json: + examples: + Header: + description: "204 No Content" + "400": + description: "Missing a required field, or an invalid value is included in a field." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user is not allowed to manage products for this org." + "404": + description: "The specified dry blend does not exist in this organization." + /organizations/{organizationId}/fertilizers: + get: + tags: + - "fertilizers" + summary: "Retrieve unified list of custom and reference fertilizers in your organization." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ArchiveStatus" + - $ref: "#/components/parameters/FertilizerEmbed" + responses: + "200": + description: "A collection of your org fertilizers. If any of the supported embeds are used, the associated data will be present as a field in the fertilizer.s" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FertilizerCollection" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + id: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + name: "Corn Mix LS" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "WinField United" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + createdTime: "2025-09-15T11:15:38.863123Z" + referenceId: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + referenceGuid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://apiqa.tal.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + childProducts: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/3ae537ba-72ae-4446-98ca-882c54eb8fe1" + id: "3ae537ba-72ae-4446-98ca-882c54eb8fe1" + name: "cornMixLS~1" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "1.4GROUP" + createdTime: "2025-09-15T09:28:08.079Z" + modifiedTime: "2025-09-23T11:25:38.471Z" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + cleanupActionDate: "2025-09-23T11:25:38.521Z" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + childProducts: [] + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers/e2f8093a-b1ec-4bd4-a8de-aa83855cbd15" + id: "e2f8093a-b1ec-4bd4-a8de-aa83855cbd15" + type: "FERTILIZER" + category: "MANURE" + companyName: "Tide International USA,Inc." + name: "Tide Propiconazole 41.8EC" + registration: "a12e9i84" + epaRegistration: "a12e9i84" + materialClassification: "DRY" + restrictedUse: false + createdTime: "2018-04-30T08:30:19.326Z" + modifiedTime: "2018-04-26T15:13:32.890Z" + carrier: false + archived: false + carrierId: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + referenceGuid: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + referenceId: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + availableRegistrations: + - "a12e9i84, 0000264-00783-AA-0067760" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers/6c42adb6-15ce-4f63-9528-c91470900e2c" + id: "6c42adb6-15ce-4f63-9528-c91470900e2c" + name: "SOURCE Corn" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "Sound Agriculture" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-12-05T06:43:57.118Z" + referenceId: "6c42adb6-15ce-4f63-9528-c91470900e2c" + referenceGuid: "6c42adb6-15ce-4f63-9528-c91470900e2c" + carrier: false + archived: false + restrictedUse: false + liquidWeight: 8.45 + weightUnit: "lbs/gal" + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + availableRegistrations: + - "a12e9i84, 0000264-00783-AA-0067760" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Fertilizer" + summary: "Add fertilizer" + description: "This endpoint will add a custom fertilizer into the organization. Its name+type must be unique within your organization, unless carrier is set to true. If carrier is set to true, then type is disregarded. A fertilizer's carrier property cannot be changed to false once set to true. A fertilizer cannot be archived if it is in an active tank mix or dry blend. If a fertilizer is marked as archived and is used in a tank mix/dry blend, if the tank mix/dry blend is made available, then this fertilizer will also be made available. If passing in a liquid weight or weight unit, material classification should be set to LIQUID. Additionally, POST can be used for supporting offline creation of fertilizers from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + security: + - OAuth2: + - "eq2" + parameters: + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add. If an ERID is specified in the request, it should exist as part of the reference data set (/fertilizers); this ERID will be unique only within the context of an organization. If the ERID is omitted, a uuid will be assigned; in this case, the item will be considered a custom product, and there will be no association to any reference product. Using the reference Erid when adding a product will help to maintain a common parentage of products across organizations." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostFertilizer" + examples: + No Header: + value: + "@type": "Fertilizer" + name: "Tide Propiconazole 41.8EC" + companyName: "Tide International USA, Inc." + type: "MANURE" + materialClassification: "DRY" + registration: "a12e9i84" + restrictedUse: false + category: "FERTILIZER" + carrier: false + archived: false + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + responses: + "201": + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/123456/fertilizers/c0dcb00a-6b6f-4508-9180-679addad23f8" + "400": + description: "Schema validation error. Missing one or more of the required fields (name, company, type, material classification), or name does not meet length requirements." + "403": + description: "The user has not been provided write access to the product list for the org" + "404": + description: "The specified organization does not exist" + "409": + description: "A product already exists in this org with the requested Erid" + /organizations/{organizationId}/fertilizers/{erid}: + get: + tags: + - "fertilizer" + summary: "Retrieve a specific fertilizer from an organization's asset list." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/FertilizerEmbed" + responses: + "200": + description: "A product matching the requested Erid" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Fertilizer_Fertilizers" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + id: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + name: "Corn Mix LS" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "WinField United" + epaRegistration: "a12e9i84" + registration: "a12e9i84" + createdTime: "2025-09-15T11:15:38.863123Z" + materialClassification: "DRY" + modifiedTime: "2018-04-26T15:13:32.890Z" + referenceId: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + referenceGuid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + carrier: false + carrierId: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://apiqa.tal.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + availableRegistrations: + - "a12e9i84, 0000264-00783-AA-0067760" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + childProducts: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/3ae537ba-72ae-4446-98ca-882c54eb8fe1" + id: "3ae537ba-72ae-4446-98ca-882c54eb8fe1" + name: "cornMixLS~1" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "1.4GROUP" + createdTime: "2025-09-15T09:28:08.079Z" + modifiedTime: "2025-09-23T11:25:38.471Z" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + cleanupActionDate: "2025-09-23T11:25:38.521Z" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + childProducts: [] + "403": + description: "The user does not have sufficient privileges to access products in this org" + "404": + description: "There is no product matching the specified Erid" + put: + tags: + - "Fertilizer" + summary: "Update a single fertilizer" + security: + - OAuth2: + - "eq2" + description: "Allows the fertilizer custom to be renamed, made active/archived, or flagged as a carrier." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + requestBody: + description: "The updated fertilizer object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutFertilizer" + examples: + No Header: + value: + "@type": "Fertilizer" + name: "Tide Propiconazole 41.8EC" + companyName: "Tide International USA, Inc." + type: "MANURE" + materialClassification: "DRY" + registration: "a12e9i84" + restrictedUse: false + category: "FERTILIZER" + carrier: false + archived: false + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + responses: + "200": + description: "The update was completed successfully" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "An invalid type or material classification was specified" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user does not have sufficient privileges to update products in this org" + "404": + description: "There is no product matching the specified Erid" + /organizations/{organizationId}/productCompanies: + get: + parameters: + - $ref: "#/components/parameters/OrganizationID" + tags: + - "Products Companies" + summary: "Retrieve product companies for an org." + security: + - OAuth2: + - "eq1" + description: "A unified list of custom and reference product companies in your organization." + responses: + "200": + description: "An collection of Companies" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "array" + items: + $ref: "#/components/schemas/ProductCompany" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/productCompanies?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/productCompanies?itemLimit=10&pageOffset=10" + total: 1439 + values: + - "@type": "ProductCompany" + companyName: "Mosaic" + - "@type": "ProductCompany" + companyName: "Howard Fertilizer" + - "@type": "ProductCompany" + companyName: "Citizens LLC" + - "@type": "ProductCompany" + companyName: "Diamond K" + - "@type": "ProductCompany" + companyName: "The JC Smith Co" + - "@type": "ProductCompany" + companyName: "BH Hybrids" + - "@type": "ProductCompany" + companyName: "Garlic Research Labs" + - "@type": "ProductCompany" + companyName: "Atlantic - Pacific Agricultural Co., Inc." + - "@type": "ProductCompany" + companyName: "Crites Seeds Inc" + - "@type": "ProductCompany" + companyName: "Quality Borate Company" + "403": + description: "The user has not been provided access to the products for this org." + "404": + description: "The specified organization does not exist." + /organizations/{organizationId}/tankMixes: + get: + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/TankMixEmbed" + - $ref: "#/components/parameters/RecordFilter" + tags: + - "Tank Mixes" + summary: "Retrieve tank mixes for an org" + description: "This endpoint will retrieve tank mixes for an org." + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A collection of tank mixes" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/TankMixCollection" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "0585cd6d-898a-4298-ac09-a61db88d9e7d" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 90 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + id: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + name: "28-0-0 UAN" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "---" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-11-07T06:47:38.220Z" + carrierId: "274bbd7b-24ae-11ee-9389-123df1de64f7" + referenceId: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + referenceGuid: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + notes: "" + archived: false + createdTime: "2024-11-07T06:47:39.246Z" + modifiedTime: "2024-11-07T06:47:39.246Z" + materialClassification: "LIQUID" + targetCrops: + - "ALFALFA" + - "CORN_WET" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d" + - "@type": "TankMix" + name: "214_tankmix" + orgUniqueId: "2a9a49ff-fd46-4a1f-a83d-7ce27f9c831e" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + id: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + name: "28-0-0 UAN" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "---" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-11-07T06:47:38.220Z" + carrierId: "274bbd7b-24ae-11ee-9389-123df1de64f7" + referenceId: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + referenceGuid: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 0 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + notes: "" + archived: false + createdTime: "2024-11-07T06:48:29.403Z" + materialClassification: "LIQUID" + targetCrops: + - "ALMONDS" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/2a9a49ff-fd46-4a1f-a83d-7ce27f9c831e" + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Tank Mixes" + summary: "Create a tank mix" + description: "Add a tank mix to the asset list of an organization. Any chemicals or fertilizers in the tank mix must exist in the organization before the tank mix is persisted. The name of the tank mix must be unique in your organization. Additionally, POST can be used for supporting offline creation of tank mixes from e.g. a mobile app, by sending a payload with an `orgUniqueErid` generated by the client. If an `orgUniqueErid` is present in the payload, the service checks the database for that `orgUniqueErid`. In case no record is found, a new one is created with that `orgUniqueErid` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `orgUniqueErid` already exists." + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/TankMix" + examples: + No Header: + value: + "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "37eeb905-634f-43e4-9cca-dcc0f555f60e" + notes: "Mix in the carrier last" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 4.465466816647919 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateMass" + unit: "kg1ha-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 2 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0162de38-b270-472b-b20a-956900a6b8bf" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/01cfb82d-3618-4bf5-99eb-956900a6ec41" + sourceNode: "468fcde7-5d14-4bee-bedd-1a234234234" + archived: false + materialClassification: "LIQUID" + targetCrops: + - "CORN_WET" + - "ALFALFA" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/tankMixes/37eeb905-634f-43e4-9cca-dcc0f555f60e" + parameters: + - $ref: "#/components/parameters/OrganizationID" + security: + - OAuth2: + - "eq2" + responses: + "201": + description: "Create Tank mix" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/11139377-60ab-451f-931e-1d0569f343f1" + "400": + description: "Missing a required field, or an invalid value is included in a field." + "403": + description: "The user is not allowed to manage products for this org" + "404": + description: "The specified organization does not exist" + "409": + description: "A tank mix already exists in this org with the requested orgUniqueErid" + /organizations/{organizationId}/tankMixes/{id}: + get: + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/Embed2_TankMix" + tags: + - "Tank Mixes" + summary: "View a specific tank mix" + description: "This endpoint will retrieve a specific tank mix." + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A tank mix object" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/TankMixCollection" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + - "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "0585cd6d-898a-4298-ac09-a61db88d9e7d" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 90 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + id: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + name: "28-0-0 UAN" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "---" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-11-07T06:47:38.220Z" + carrierId: "274bbd7b-24ae-11ee-9389-123df1de64f7" + referenceId: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + referenceGuid: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + notes: "" + archived: false + createdTime: "2024-11-07T06:47:39.246Z" + modifiedTime: "2024-11-07T06:47:39.246Z" + materialClassification: "LIQUID" + targetCrops: + - "ALFALFA" + - "CORN_WET" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d" + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist, or does not contain the requested tank mix" + put: + tags: + - "Tank Mixes" + summary: "Update a tank mix" + description: "This endpoint allows to update the metadata and the composition of a tank mix." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/Id" + security: + - OAuth2: + - "eq2" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/TankMix" + examples: + No Header: + value: + "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "37eeb905-634f-43e4-9cca-dcc0f555f60e" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 4.465466816647919 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateMass" + unit: "kg1ha-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 2 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0162de38-b270-472b-b20a-956900a6b8bf" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/01cfb82d-3618-4bf5-99eb-956900a6ec41" + sourceNode: "468fcde7-5d14-4bee-bedd-1a234234234" + archived: false + materialClassification: "LIQUID" + targetCrops: + - "ALFALFA" + - "CORN_WET" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/tankMixes/37eeb905-634f-43e4-9cca-dcc0f555f60e" + responses: + "200": + description: "The update was completed successfull" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "Missing a required field, or an invalid value is included in a field." + "403": + description: "The user is not allowed to manage products for this org" + "404": + description: "The specified tank mix does not exist in this organization" + /organizations/{organizationId}/varieties: + get: + tags: + - "Varieties" + summary: "View varieties for an org" + description: "This endpoint will retrieve a collection of varieties for the specified org." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ArchiveStatus" + - $ref: "#/components/parameters/VarietyEmbed" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A collection of your org varieties. If any of the supported embeds are used, the associated data will be present as a field in the variety." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/VarietyCollection" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "Variety" + id: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + name: "1299" + category: "VARIETY" + cropName: "Cornell" + companyName: "Curry Seed" + createdTime: "2024-12-04T07:52:51.267Z" + modifiedTime: "2024-12-06T07:52:51.267Z" + referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + archived: false + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + childProducts: + - "@type": "Variety" + id: "18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc" + name: "corn123" + companyName: "1.4GROUP" + cropName: "SOYBEANS" + archived: false + category: "VARIETY" + createdTime: "2025-03-21T21:12:53.865Z" + modifiedTime: "2025-04-06T15:12:52.910Z" + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + cleanupActionDate: "2025-09-22T11:24:43.855Z" + documentsList: [] + childProducts: [] + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff" + - "@type": "Variety" + id: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" + name: "2C788A SXRA COR" + category: "VARIETY" + cropName: "CORN_WET" + companyName: "MYCOGEN SEEDS" + createdTime: "2024-12-04T07:52:51.267Z" + referenceGuid: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + archived: false + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "4cb1e8c0-e801-4f19-b674-6362246be920" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/c3a58145-acfc-4b73-bc1d-0d442697e053" + - "@type": "Variety" + id: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa" + name: "33H83" + category: "VARIETY" + cropName: "CORN_WET" + companyName: "Pioneer" + createdTime: "2024-12-04T07:52:51.267Z" + referenceGuid: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + archived: false + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/b006726b-38a0-44a6-b723-a966c68170b6" + "403": + description: "The user has not been provided access to the varieties for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Varieties" + summary: "Add a variety" + description: "This endpoint will add a custom variety into the organization. Its name+cropName must be unique within your organization. Its crop name must be a supported crop name (see /cropTypes). There are a number of crop names that are deprecated in the system. If the crop name is set to one of these, then it will be mapped to its corresponding valid crop name. Additionally, POST can be used for supporting offline creation of varieties from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + parameters: + - $ref: "#/components/parameters/OrganizationID" + security: + - OAuth2: + - "eq2" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostVariety" + examples: + No Header: + value: + name: "2C788A SXRA COR" + companyName: "MYCOGEN SEEDS" + cropName: "CORN_WET" + category: "VARIETY" + archived: false + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + responses: + "201": + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created Location: https://sandboxapi.deere.com/platform/organizations/654321/varieties/8e1e0920-1265-4066-8067-8ce2ce5012b2" + "400": + description: "Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user has not been provided write access to the variety list for the org" + "404": + description: "The specified organization does not exist" + "409": + description: "A product already exists in this org with the specified reference Erid" + /organizations/{organizationId}/varieties/{erid}: + get: + summary: "View a specific variety" + description: "This endpoint will return the variety with the specified erid." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/VarietyEmbed" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A variety object" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Variety" + examples: + No Header: + description: "200 OK Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "Variety" + id: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + name: "1299" + cropName: "Cornell" + companyName: "Curry Seed" + archived: false + category: "VARIETY" + referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2017-03-22T21:12:53.870Z" + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + childProducts: + - "@type": "Variety" + id: "18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc" + name: "corn123" + companyName: "1.4GROUP" + cropName: "SOYBEANS" + archived: false + category: "VARIETY" + createdTime: "2025-03-21T21:12:53.865Z" + modifiedTime: "2025-04-06T15:12:52.910Z" + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + cleanupActionDate: "2025-09-22T11:24:43.855Z" + documentsList: [] + childProducts: [] + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff" + "403": + description: "The user does not have sufficient privileges to access varieties in this org" + "404": + description: "There is no variety matching the specified Erid" + put: + summary: "Update a single variety" + description: "This endpoint allows the custom variety to be renamed, made active/archived, or associated to a different manufacturer or crop type." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + security: + - OAuth2: + - "eq2" + requestBody: + description: "The updated variety object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutVariety" + examples: + No Header: + value: + name: "1299" + companyName: "Curry Seed" + cropName: "SOYBEANS" + archived: true + createdTime: "2019-03-28T14:59:57.000Z" + modifiedTime: "2019-03-27T14:59:57.000Z" + responses: + "204": + description: "The update was completed successfully" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content The update was completed successfully." + "400": + description: "Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user does not have sufficient privileges to update varieties in this org" + "404": + description: "There is no variety matching the specified Erid" + /varieties: + get: + tags: + - "Reference Varieties" + summary: "Search reference catalog varieties" + security: + - OAuth2: + - "eq1" + description: "This endpoint searches the reference catalog for varieties that match the given search criteria. This data can be used in a subsequent request to create a variety in an organization. Results are limited to 100 items." + parameters: + - name: "searchString" + in: "query" + description: "Performs a fuzzy search on variety and manufacturer name. The search string must be at least 3 characters long." + schema: + type: "string" + example: "venture" + x-required-boolean: true + - name: "cropName" + in: "query" + description: "Filters the results by crop id (see the /cropTypes API)." + schema: + type: "string" + example: "SOYBEANS" + - name: "productName" + in: "query" + description: "Specifies the name of the variety from the global reference list." + schema: + type: "string" + example: "SH 5614 LL/STS" + x-required-boolean: true + - name: "brandName" + in: "query" + description: "Specifies the product manufacturer name of the variety based on the region being used." + schema: + type: "string" + example: "Southern Harvest" + x-required-boolean: true + - name: "sourceSystemProductId" + in: "query" + description: "Specifies the source system product id of the variety based on the country of use." + schema: + type: "string" + example: "79186" + - name: "countryCode" + in: "query" + description: "Specifies the region the variety data belongs to. Some data may not be available in certain regions and data will not be included in the response." + schema: + type: "string" + example: "USA" + responses: + "200": + description: "A collection of reference varieties matching the specified search criteria." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceVarietyCollection" + examples: + Headers: + description: "200 OK" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "ReferenceVariety" + id: "1f8c12b4-126f-11ec-82a8-0242ac130003" + referenceId: "1f8c12b4-126f-11ec-82a8-0242ac130003" + category: "VARIETY" + name: "S73-Z5 - 50lb bag" + companyName: "NK" + cropName: "SOYBEANS" + countryCode: "USA" + sourceSystem: "3" + sourceSystemProductId: "905P24925" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + - "@type": "ReferenceVariety" + id: "75138754-6381-49c7-be9e-9e08a847075a" + referenceId: "75138754-6381-49c7-be9e-9e08a847075a" + category: "VARIETY" + name: "Cornelius 155A" + companyName: "Cornelius Seed" + cropName: "ALFALFA" + countryCode: "USA" + sourceSystem: "3" + sourceSystemProductId: 105332 + createdTime: "2023-09-02T05:10:33.415Z" + modifiedTime: "2024-11-20T02:04:39.994Z" + "403": + description: "The user does not have access to manage products." + "404": + description: "No variety found with this country code." + /varieties/{erid}: + get: + tags: + - "Reference Varieties" + summary: "Get a single reference variety." + security: + - OAuth2: + - "eq1" + description: "Single variety from industry data sources, such as CDMS." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "A single variety matching the specified erid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceVariety" + examples: + Headers: + description: "200 OK" + value: + "@type": "ReferenceVariety" + id: "1f8c12b4-126f-11ec-82a8-0242ac130003" + referenceId: "1f8c12b4-126f-11ec-82a8-0242ac130003" + category: "VARIETY" + name: "S73-Z5 - 50lb bag" + companyName: "NK" + cropName: "SOYBEANS" + countryCode: "USA" + sourceSystem: "3" + sourceSystemProductId: "905P24925" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + "403": + description: "The user does not have access to manage products." + "404": + description: "No variety found matching this erid." + /varieties/{erid}/associateToOrg/{organizationId}: + post: + tags: + - "Reference Varieties" + summary: "Adds a single reference variety to organization" + security: + - OAuth2: + - "eq2" + description: "This endpoint will associate a reference variety to your organization from the global reference list. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden." + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceProductPointerRequest" + examples: + No Header: + value: + countryCode: "USA" + overrides: + - key: "archived" + value: true + responses: + "200": + description: "Successful association of reference variety to org." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "array" + items: + $ref: "#/components/schemas/ReferenceProductOverrideStatus" + examples: + Headers: + description: "201 Created Created successfully." + value: + - key: "archived" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: + application/json: + schema: + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to products for organization" + "404": + description: "Organization does not exist." + "409": + description: "A product already exists in this org with the specified erid." + /varieties/{erid}/documents: + get: + tags: + - "Reference Varieties" + summary: "Reference list of documents for an associated seed variety." + security: + - OAuth2: + - "eq1" + description: "List of all the documents for a variety from industry data sources, such as CDMS." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "A collection of documents for the specified seed variety." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DocumentCollection" + examples: + Headers: + description: "200 OK" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "Document" + erid: "1f8c12b4-126f-11ec-82a8-0242ac130003" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + docType: "24(c) Registration" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + "403": + description: "The user does not have access to manage products." + /varieties/{erid}/setOverridesForOrg/{organizationId}: + patch: + tags: + - "Reference Varieties" + summary: "Sets organizational attributes such as isCarrier, archived, registration, etc." + security: + - OAuth2: + - "eq2" + description: "This endpoint will set attribute overrides while importing a reference variety to your organization. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden." + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/CommonProductPointerRequest" + examples: + No Header: + value: + overrides: + - key: "archived" + value: true + responses: + "200": + description: "Successful update of overrides of reference variety associated to your org." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "array" + items: + $ref: "#/components/schemas/ReferenceProductOverrideStatus" + examples: + Headers: + description: "200 OK" + value: + - key: "archived" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: + application/json: + schema: + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to reference product associated to organization" + "404": + description: "Organization does not exist" +components: + parameters: + AcceptLanguageRequestHeader: + in: "header" + name: "Accept-Language" + description: "Translates the name to the desired locale if supported. Follows RFC-3282 specifications (https://datatracker.ietf.org/doc/html/rfc3282)." + x-required-boolean: false + schema: + type: "string" + example: "en-us, en" + AcceptRequestHeader: + in: "header" + name: "Accept" + description: "Determines the response schema." + x-required-boolean: false + schema: + type: "string" + enum: + - "application/json" + - "application/vnd.deere.axiom.v3+json" + ArchiveStatus: + in: "query" + name: "status" + description: "Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties." + x-required-boolean: false + schema: + type: "string" + enum: + - "AVAILABLE" + - "ARCHIVED" + - "ALL" + example: "AVAILABLE" + ChemicalEmbed: + in: "query" + name: "embed" + description: "An embeddable list of properties which are optional by default." + schema: + type: "array" + items: + type: "string" + enum: + - "activeIngredients" + - "availableRegistrations" + - "documents" + - "showMergedProducts" + ChemicalId: + name: "chemicalId" + in: "path" + description: "The chemical Id to find." + x-required-boolean: true + schema: + type: "string" + example: "c0dcb00a-6b6f-4508-9180-679addad23f8" + DryBlendEmbed: + in: "query" + name: "embed" + description: "The list of Rels, for which objects should be included in the response payload." + schema: + type: "array" + items: + type: "string" + enum: + - "product" + ERID: + in: "path" + name: "erid" + description: "A unique identifier for an entity formatted as a uuid." + x-required-boolean: true + example: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" + schema: + type: "string" + format: "uuid" + Embed: + name: "embed" + in: "query" + description: "Embeds extra information in the org varieties response" + schema: + type: "string" + example: "documents" + Embed2: + name: "embed" + in: "query" + description: "Embeds extra information in the variety response" + schema: + type: "string" + example: "documents" + Embed2_TankMix: + name: "embed" + in: "query" + description: "Embeds extra information in the tank mix response" + schema: + type: "string" + example: "chemical" + Embed_Chemicals: + name: "embed" + in: "query" + description: "Embeds extra information in the org chemical response" + schema: + type: "string" + example: "activeIngredients, documents" + Embed_Fertilizers: + name: "embed" + in: "query" + description: "Embeds extra information in the fertilizer response." + schema: + type: "string" + example: "activeIngredients, documents" + Embed_TankMix: + name: "embed" + in: "query" + description: "Embeds extra information in the org tank mixes response" + schema: + type: "string" + example: "chemical" + EntityTypeQueryParam: + in: "query" + name: "entityType" + description: "Filters the results by the provided entity type. Example: CHEMICAL" + x-required-boolean: false + schema: + type: "string" + enum: + - "CHEMICAL" + - "FERTILIZER" + FertilizerEmbed: + in: "query" + name: "embed" + description: "An embeddable list of properties which are optional by default." + schema: + type: "array" + items: + type: "string" + enum: + - "activeIngredients" + - "availableRegistrations" + - "documents" + - "showMergedProducts" + FertilizerId: + name: "fertilizerId" + in: "path" + description: "The fertilizer Id to find." + x-required-boolean: true + schema: + type: "string" + example: "c0dcb00a-6b6f-4508-9180-679addad23f8" + Id: + name: "id" + in: "path" + description: "TankMixes id." + x-required-boolean: true + schema: + type: "string" + example: "89220e2a-04af-4d03-82de-1ac9a4edfa4f" + OrgId: + name: "orgId" + in: "path" + description: "The organization owning the varieties." + x-required-boolean: true + schema: + type: "number" + example: 654321 + OrgId2: + name: "orgId" + in: "path" + description: "The organization owning the chemicals." + x-required-boolean: true + schema: + type: "number" + example: 123456 + OrgId2_Fertilizers: + name: "orgId" + in: "path" + description: "The owning organization of the product." + x-required-boolean: true + schema: + type: "number" + example: 123456 + OrgId_Chemicals: + name: "orgId" + in: "path" + description: "The organization owning the chemicals." + x-required-boolean: true + schema: + type: "number" + example: 123456 + OrgId_Fertilizers: + name: "orgId" + in: "path" + description: "The organization owning the fertilizers." + x-required-boolean: true + schema: + type: "number" + example: 123456 + OrgId_TankMix: + name: "orgId" + in: "path" + description: "The organization owning the tank mix." + x-required-boolean: true + schema: + type: "number" + example: 123456 + OrganizationID: + in: "path" + name: "organizationId" + description: "The identifier of the Organization." + x-required-boolean: true + schema: + type: "integer" + example: 6781 + format: "int64" + RecordFilter: + name: "recordFilter" + in: "query" + description: "Filter results based on status" + schema: + type: "string" + example: "active, archived, all" + TankMixEmbed: + in: "query" + name: "embed" + description: "The list of Rels, for which objects should be included in the response payload." + schema: + type: "array" + items: + type: "string" + enum: + - "chemical" + VarietyEmbed: + in: "query" + name: "embed" + description: "An embeddable list of properties which are optional by default." + schema: + type: "array" + items: + type: "string" + enum: + - "documents" + - "showMergedProducts" + VarietyId: + name: "varietyId" + in: "path" + description: "The variety Id to find." + x-required-boolean: true + schema: + type: "string" + example: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + VarietyId2: + name: "varietyId" + in: "path" + description: "The variety Id" + x-required-boolean: true + schema: + type: "string" + example: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" + X-deere-signature_Chemicals: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same GUID next time." + schema: + type: "string" + format: "uuid" + example: "9r839261-5e4b-4e1c-9201-8026f47109bb" + X-deere-signature_Fertilizers: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r839261-5e4b-4e1c-9201-8026f47109bb" + responses: + Created: + description: "Created" + schemas: + ActiveIngredient: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + ActiveIngredientEmbed: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + guid: + type: "string" + format: "uuid" + example: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + description: "The unique identifier for the active ingredient." + percent: + type: "number" + format: "double" + example: 3.14 + description: "The percentage value of the active ingredient.'" + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the Chemical/Fertilizer." + nullable: false + ActiveIngredientEmbed_DryBlends: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the chemical/fertilizer." + nullable: false + ActiveIngredientEmbed_Fertilizers: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the Chemical/Fertilizer." + nullable: false + ActiveIngredientEmbed_TankMix: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the chemical/fertilizer." + nullable: false + ActiveIngredientsCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_ActiveIngredients" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredient" + BaseResource: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link" + BaseResourceWithoutLink: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + BaseResource_Chemicals: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_Chemicals" + BaseResource_Companies: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_Companies" + BaseResource_Documents: + type: "object" + properties: + "@type": + x-required-boolean: true + type: "string" + example: "BaseResource" + id: + x-required-boolean: true + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_Documents" + BaseResource_DryBlends: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_DryBlends" + BaseResource_TankMix: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_TankMix" + Chemical: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_Chemicals" + - properties: + "@type": + example: "Chemical" + id: + description: "The primary identifier for the chemical that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + deprecated: true + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the chemical." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + referenceId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "product reference id" + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed" + description: "List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document_Chemicals" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + epaRegistration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + agencyRegistrations: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "Registration detail used for regulatory purposes." + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + childProducts: + type: "array" + items: + $ref: "#/components/schemas/ChildChemical" + description: "List of child products." + ChemicalCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Chemicals" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Chemical" + Chemical_DryBlends: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_DryBlends" + - properties: + "@type": + example: "Chemical" + id: + description: "The primary identifier for the chemical/fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the chemical/fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical/fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of the chemical/fertilizer." + restrictedUse: + type: "boolean" + default: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical/fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + default: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + default: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the chemical/fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the chemical/fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_DryBlends" + description: "List of active ingredients present in the chemical/fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used" + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documents: + type: "array" + items: + $ref: "#/components/schemas/Document_DryBlends" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + ChildChemical: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_Chemicals" + - properties: + "@type": + example: "Chemical" + id: + description: "The primary identifier for the chemical that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + deprecated: true + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the chemical." + companyName: + type: "string" + description: "The brand of the chemical." + nullable: false + example: "Monsanto" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed" + description: "List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document_Chemicals" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + epaRegistration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + agencyRegistrations: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "Registration detail used for regulatory purposes." + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + ChildFertilizer: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + example: "Fertilizer" + id: + description: "The primary identifier for the fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + nullable: false + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type of the fertilizer." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + agencyRegistrations: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "production registration number details" + epaRegistration: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + ChildVariety: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + example: "Variety" + id: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + nullable: false + description: "The primary identifier for the variety that is unique to your organization." + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." + nullable: false + category: + type: "string" + enum: + - "VARIETY" + example: "VARIETY" + cropName: + type: "string" + example: "SOYBEANS" + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." + nullable: false + companyName: + type: "string" + description: "The brand of the variety." + example: "NK" + nullable: false + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." + example: false + nullable: false + createdTime: + type: "string" + format: "date-time" + example: "2017-03-21T21:12:53.865Z" + description: "product created time" + modifiedTime: + type: "string" + format: "date-time" + example: "2018-04-06T15:12:52.910Z" + description: "product modified time" + readOnly: true + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label." + CollectionBase: + type: "object" + properties: + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link" + total: + type: "integer" + format: "int32" + example: 100 + CollectionBase_ActiveIngredients: + type: "object" + properties: + total: + type: "integer" + format: "int32" + example: 100 + links: + type: "array" + items: + $ref: "#/components/schemas/Link_ActiveIngredients" + CollectionBase_Chemicals: + type: "object" + properties: + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + - $ref: "#/components/schemas/Link_Chemicals" + total: + type: "integer" + format: "int32" + example: 100 + CollectionBase_DryBlends: + type: "object" + properties: + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_DryBlends" + total: + type: "integer" + format: "int32" + example: 100 + CollectionBase_Fertilizers: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + total: + type: "integer" + format: "int32" + example: 100 + CommonPostReferenceFertilizer: + type: "object" + properties: + overrides: + type: "array" + items: + type: "object" + properties: + key: + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "isCarrier" + - "archived" + - "registration" + value: + type: "string" + description: "Value for the override parameter" + example: true + CommonProductPointerRequest: + type: "object" + properties: + overrides: + nullable: true + type: "array" + items: + $ref: "#/components/schemas/OverrideKeyValuePair" + CommonReferenceChemical: + type: "object" + properties: + overrides: + type: "array" + items: + type: "object" + properties: + key: + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "isCarrier" + - "archived" + - "registration" + value: + type: "string" + description: "Value for the override parameter" + example: true + Created: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc.turer" + type: + type: "string" + description: "The type of chemical" + example: "HERBICIDE" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification: + type: "string" + description: "Material classification of a product." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + Created_Fertilizers: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc." + type: + type: "string" + description: "The type of fertilizer" + example: "FERTILIZER" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification: + type: "string" + description: "Material classification of a product." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + activeIngredients: + type: "array" + allOf: + - $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + Document: + type: "object" + allOf: + - properties: + "@type": + example: "Document" + x-required-boolean: true + erid: + type: "string" + description: "Unique id of the document" + example: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: + type: "string" + example: "24(c) Registration" + description: "Type of document for this product." + x-required-boolean: true + productErid: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product." + x-required-boolean: true + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + x-required-boolean: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + x-required-boolean: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productErid" + - "docType" + - "description" + - "fileName" + DocumentCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Document" + DocumentCollection_Chemicals: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Chemicals" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Document_Chemicals" + DocumentCollection_Fertilizers: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Fertilizers" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Document" + DocumentWithPdfFile: + type: "object" + allOf: + - $ref: "#/components/schemas/Document_Documents" + - properties: + pdfFile: + x-required-boolean: true + type: "string" + example: "H4sIAAAAAAAAAIy7BVhduxI2XNy1aLFNcYe9cXd3l01xd3eKuzsUd5fiBYq7u0OLe6G4f+05175z7n+/f60nzySTWZPJ5J1kW..." + description: "The pdf file of the document after compression (gzip) and encoding (base64)" + Document_Chemicals: + type: "object" + allOf: + - properties: + "@type": + example: "Document" + x-required-boolean: true + productErid: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product where document attached." + x-required-boolean: true + erid: + type: "string" + example: "2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7" + description: "The Unique id of the document." + x-required-boolean: true + docType: + type: "string" + example: "24(c) Registration" + description: "Type of document for this product." + x-required-boolean: true + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + x-required-boolean: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + x-required-boolean: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productErid" + - "docType" + - "description" + - "fileName" + Document_Documents: + type: "object" + allOf: + - properties: + "@type": + x-required-boolean: true + type: "string" + example: "Document" + description: "The type of the document." + erid: + type: "string" + format: "uuid" + example: "cff5ba0b-1768-48a3-b3ec-dd62aac1cff3" + description: "The unique identifier for the document." + productErid: + type: "string" + format: "uuid" + example: "7d9ec6a6-6b8f-4312-92c7-bc022b7f5351" + description: "The unique identifier for the product associated with the document." + fileName: + x-required-boolean: true + type: "string" + example: "ld8NF004.pdf" + description: "The name of the file." + docType: + x-required-boolean: true + type: "string" + example: "Specimen Label" + description: "The type of the document." + description: + x-required-boolean: true + type: "string" + example: "SAL 7/27/11" + description: "A description of the document." + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + Document_DryBlends: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_DryBlends" + - properties: + "@type": + example: "Document" + x-required-boolean: true + productId: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product." + x-required-boolean: true + erid: + type: "string" + example: "2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7" + description: "The Unique id of the document." + x-required-boolean: true + docType: + type: "string" + example: "24(c) Registration" + x-required-boolean: true + description: "Type of document for this product." + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + x-required-boolean: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + x-required-boolean: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productId" + - "docType" + - "description" + - "fileName" + Document_TankMix: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_TankMix" + - properties: + "@type": + example: "Document" + x-required-boolean: true + productId: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product where document attached." + x-required-boolean: true + erid: + type: "string" + example: "2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7" + description: "The Unique id of the document." + x-required-boolean: true + docType: + type: "string" + example: "24(c) Registration" + description: "Type of document for this product." + x-required-boolean: true + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + x-required-boolean: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + x-required-boolean: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productId" + - "docType" + - "description" + - "fileName" + DryBlend: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlend" + description: "The type of the dry blend." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8" + description: "The URI of the linked resource." + erid: + type: "string" + example: "af20cf1a-2def-47ce-9861-35f51afc1ad8" + description: "The unique identifier for the dry blend." + name: + type: "string" + example: "dryblend_alfa" + description: "The name of the dry blend." + solutionRate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 10 + description: "The solution rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateMass" + description: "The domain ID for the solution rate measurement." + unit: + type: "string" + example: "lb1ac-1" + description: "The unit of measure for the solution rate." + materialClassification: + type: "string" + example: "DRY" + description: "Material classification of the dry blend." + archived: + type: "boolean" + example: false + description: "Whether or not this dry blend is actively used." + notes: + type: "string" + example: "notes" + description: "Notes about the dry blend." + components: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlendComponent" + description: "The type of the dry blend component." + rate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 5 + description: "The rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateMass" + description: "The domain ID for the rate measurement." + unit: + type: "string" + example: "lb1ac-1" + description: "The unit of measure for the rate." + product: + type: "object" + properties: + "@type": + type: "string" + example: "Chemical" + description: "The type of the chemical/fertilizer." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The URI of the linked resource." + id: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The unique identifier for the chemical/fertilizer." + name: + type: "string" + example: "TELIA" + description: "The name of the chemical/fertilizer." + type: + type: "string" + example: "FUNGICIDE" + description: "The type of the chemical/fertilizer." + category: + type: "string" + example: "CHEMICAL" + description: "The category of the chemical/fertilizer." + companyName: + type: "string" + example: "BASF" + description: "The name of the company that manufactures the chemical/fertilizer." + epaRegistration: + type: "string" + example: "EXEMPT" + description: "The EPA registration status of the chemical/fertilizer." + registration: + type: "string" + example: "EXEMPT" + description: "The registration status of the chemical/fertilizer." + modifiedTime: + type: "string" + format: "date-time" + example: "2024-08-21T09:25:24.220763Z" + description: "The time when the chemical/fertilizer was last modified." + carrierId: + type: "string" + example: "58984d7a-126e-4d31-98e9-1ed65a582d91" + description: "The carrier ID of the chemical/fertilizer." + referenceId: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference ID of the chemical/fertilizer." + referenceGuid: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference GUID of the chemical/fertilizer." + carrier: + type: "boolean" + example: true + description: "Whether or not the chemical/fertilizer is a carrier." + archived: + type: "boolean" + example: false + description: "Whether or not the chemical/fertilizer is actively used." + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the chemical/fertilizer is restricted use." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + agencyRegistrations: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the agency registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the linked resource." + registrationId: + type: "string" + example: "EXEMPT" + description: "The registration ID of the agency registration." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + DryBlendCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_DryBlends" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/DryBlend" + DryBlendComponent: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlend Component" + rate: + $ref: "#/components/schemas/MeasurementAsDouble" + product: + $ref: "#/components/schemas/Chemical_DryBlends" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_DryBlends" + Errors: + type: "object" + format: "Errors/DataValidationException" + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + message: + type: "string" + description: "An english description of the error." + example: "The given crop type does not exist" + code: + type: "string" + example: "validation_constraint_crop_type_does_not_exist" + description: "A string constant representing the type of error." + field: + type: "string" + example: "targetCrops" + description: "The name of the property or parameter deemed invalid." + invalidValue: + type: "string" + example: "CORN_WET" + description: "The value that was supplied for this field in the request." + otherAttributes: + example: {} + type: "object" + Fertilizer: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_DryBlends" + - properties: + "@type": + example: "Fertilizer" + id: + description: "The primary identifier for the fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + nullable: false + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type of the fertilizer." + restrictedUse: + type: "boolean" + default: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + default: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + default: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_DryBlends" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + description: "List of available registrations for the countries this product is registered in." + documents: + type: "array" + items: + $ref: "#/components/schemas/Document_DryBlends" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + FertilizerCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Fertilizers" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Fertilizer_Fertilizers" + Fertilizer_Fertilizers: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + example: "Fertilizer" + id: + description: "The primary identifier for the fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + nullable: false + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type of the fertilizer." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + referenceId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "product reference id" + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + agencyRegistrations: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "production registration number details" + epaRegistration: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + childProducts: + type: "array" + items: + $ref: "#/components/schemas/ChildFertilizer" + description: "List of child products." + Link: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + uri: + type: "string" + format: "uri" + example: "api_route" + description: "The location of the resource" + Link_ActiveIngredients: + type: "object" + description: "Provides a reference to an associated object or list." + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + uri: + type: "string" + format: "uri" + example: "https://sandboxapi.deere.com/platform/organizations/876542/activeIngredients?itemLimit=10&pageOffset=0" + description: "The location of the resource" + Link_Chemicals: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/{api_route}" + description: "The URI of the route." + Link_Companies: + type: "object" + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + x-required-boolean: true + uri: + type: "string" + format: "uri" + example: "https://sandboxapi.deere.com/platform/organizations/876542/productCompanies?itemLimit=10&pageOffset=0" + description: "The location of the resource" + x-required-boolean: true + Link_Documents: + properties: + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the 'embed' value." + x-required-boolean: true + uri: + type: "string" + format: "uri" + example: "https://sandboxapi.deere.com/platform/" + description: "The location of the resource" + x-required-boolean: true + Link_DryBlends: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/{api_route}" + description: "The URI of the route." + Link_TankMix: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/{api_route}" + description: "The URI of the route." + MeasurementAsDouble: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + valueAsDouble: + type: "number" + format: "double" + example: 3.14 + unit: + type: "string" + description: "The unit of measure for this value." + example: "gal1ac-1" + vrDomainId: + type: "string" + description: "The corresponding domainErid from the EIC/Adapt representation system." + example: "vrSolutionRateLiquid" + OverrideKeyValuePair: + type: "object" + properties: + key: + nullable: false + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "archived" + value: + nullable: false + type: "object" + description: "Value for override parameter, can be string, number or boolean" + example: true + required: + - "key" + - "value" + PostChemical: + type: "object" + allOf: + - properties: + "@type": + example: "Chemical" + name: + type: "string" + example: "Round Up" + description: "The common name of the chemical." + x-required-boolean: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical." + example: "Monsanto" + x-required-boolean: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the chemical." + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + x-required-boolean: true + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "The type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + epaRegistration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + agencyRegistrations: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "Registration detail used for regulatory purposes." + PostDryBlend: + type: "object" + properties: + DryBlend: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlend" + description: "The type of the dry blend." + name: + type: "string" + example: "TestDryBlend" + x-required-boolean: true + description: "The name of the dry blend." + solutionRate: + type: "object" + x-required-boolean: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + x-required-boolean: true + format: "double" + example: 0 + description: "The value of the measurement as a double." + vrDomainId: + type: "string" + x-required-boolean: true + example: "vrSolutionRateMass" + description: "The domain ID for the measurement." + unit: + type: "string" + x-required-boolean: true + example: "lb1ac-1" + description: "The unit of measure for the value." + materialClassification: + type: "string" + x-required-boolean: true + example: "DRY" + description: "Material classification of the dry blend." + archived: + type: "boolean" + example: false + description: "Whether or not this dry blend is actively used." + notes: + type: "string" + example: "Mix in the carrier last" + description: "Notes about the dry blend." + components: + type: "array" + x-required-boolean: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlendComponent" + description: "The type of the dry blend component." + rate: + type: "object" + x-required-boolean: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + x-required-boolean: true + format: "double" + example: 100 + description: "The rate value as a double." + vrDomainId: + type: "string" + x-required-boolean: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + x-required-boolean: true + example: "gal1ac-1" + description: "The unit of measure for the rate." + links: + type: "array" + x-required-boolean: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + x-required-boolean: true + example: "chemical" + description: "The relationship of the link either fertilizer or chemical." + uri: + type: "string" + x-required-boolean: true + example: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac" + description: "The URI of the linked resource." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + PostFertilizer: + type: "object" + allOf: + - properties: + "@type": + example: "Fertilizer" + name: + type: "string" + example: "Manure" + description: "The common name of the fertilizer." + x-required-boolean: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + example: "Monsanto" + x-required-boolean: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + type: + type: "string" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type for the fertilizer." + x-required-boolean: true + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + epaRegistration: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + required: + - "name" + - "companyName" + - "type" + PostReferenceChemical: + allOf: + - type: "object" + properties: + countryCode: + type: "string" + description: "Country of the product to which it belongs" + example: "USA" + x-required-boolean: true + required: + - "countryCode" + - $ref: "#/components/schemas/CommonReferenceChemical" + PostReferenceFertilizer: + allOf: + - properties: + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + x-required-boolean: true + - $ref: "#/components/schemas/CommonPostReferenceFertilizer" + PostVariety: + type: "object" + allOf: + - properties: + "@type": + example: "Variety" + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." + x-required-boolean: true + cropName: + type: "string" + example: "SOYBEANS" + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." + x-required-boolean: true + companyName: + type: "string" + description: "The brand of the variety." + example: "NK" + x-required-boolean: true + category: + type: "string" + enum: + - "VARIETY" + example: "VARIETY" + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." + example: false + createdTime: + type: "string" + format: "date-time" + example: "2017-03-21T21:12:53.865Z" + description: "product created time" + modifiedTime: + type: "string" + format: "date-time" + example: "2018-04-06T15:12:52.910Z" + description: "product modified time" + required: + - "name" + - "cropName" + - "companyName" + ProductCompany: + type: "object" + allOf: + - properties: + companyName: + type: "string" + example: "Monsanto" + description: "The name of the input manufacturer for chemical, fertilizer or variety." + "@type": + example: "ProductCompany" + required: + - "@type" + - "id" + - "links" + - "companyName" + PutChemical: + type: "object" + required: + - "name" + - "companyName" + - "type" + allOf: + - properties: + "@type": + example: "Chemical" + name: + type: "string" + example: "Round Up" + description: "The common name of the chemical." + x-required-boolean: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical." + example: "Monsanto" + x-required-boolean: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + type: + type: "string" + nullable: false + example: "HERBICIDE" + x-required-boolean: true + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "The type for the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + epaRegistration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + createdTime: + type: "string" + format: "date-time" + example: "2017-03-21T21:12:53.865Z" + description: "product creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2018-04-06T15:12:52.910Z" + description: "product modification time" + readOnly: true + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed" + description: "List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + PutFertilizer: + type: "object" + allOf: + - properties: + "@type": + example: "Fertilizer" + name: + type: "string" + example: "Manure" + description: "The common name of the fertilizer." + x-required-boolean: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + example: "Monsanto" + x-required-boolean: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + type: + type: "string" + nullable: false + enum: + - "MANURE" + - "FERTILIZER" + description: "The type for the fertilizer." + x-required-boolean: true + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + epaRegistration: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + required: + - "name" + - "companyName" + - "type" + PutVariety: + type: "object" + allOf: + - properties: + "@type": + example: "Variety" + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." + x-required-boolean: true + cropName: + type: "string" + example: "SOYBEANS" + x-required-boolean: true + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API). **NOTE:** See /cropTypes for the list of available crop types that are supported." + companyName: + type: "string" + description: "The brand of the variety." + example: "NK" + x-required-boolean: true + category: + type: "string" + enum: + - "VARIETY" + example: "VARIETY" + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." + example: false + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product created time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modified time" + required: + - "name" + - "cropName" + - "companyName" + RecordMetadata: + type: "object" + description: "Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)" + properties: + userCreationTimestamp: + type: "string" + description: "Timestamp of entity creation" + readOnly: true + example: "2018-04-30T10:23:50.000Z" + userLastModifiedTimestamp: + type: "string" + description: "Timestamp of entity modification" + readOnly: true + example: "2018-05-01T08:11:23.000Z" + ReferenceChemical: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_Chemicals" + - properties: + "@type": + example: "ReferenceChemical" + id: + type: "string" + format: "uuid" + example: "8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The primary identifier of the reference chemical." + nullable: false + name: + type: "string" + example: "Round Up" + description: "The common name of the reference chemical." + nullable: false + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Monsanto" + nullable: false + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + nullable: false + referenceId: + type: "string" + example: "8fb34898-64f5-5a1e-a698-34ab348220a7" + format: "uuid" + description: "product reference id" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "The state of reference chemical." + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + countryCode: + type: "string" + example: "USA" + description: "Specifies the region the reference chemical data belongs to. Some data may not be available in certain regions and data will not be included in the response." + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of chemical." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + sourceSystem: + type: "string" + format: "integer" + description: "The source system for the reference chemical." + example: 3 + nullable: false + sourceSystemProductId: + type: "string" + description: "The source system identifier for the reference chemical." + example: "905P24925" + nullable: false + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + epaRegistration: + type: "string" + example: "a12e9i84" + description: "product registration id" + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + ReferenceChemicalCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Chemicals" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ReferenceChemical" + ReferenceFertilizer: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + type: "string" + example: "Fertilizer" + id: + type: "string" + example: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + description: "The primary identifier for the fertilizer." + name: + type: "string" + example: "Round Up" + description: "The common name of the reference fertilizer." + nullable: false + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Monsanto" + nullable: false + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + nullable: false + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the chemical." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + countryCode: + type: "string" + example: "USA" + description: "Specifies the region the reference fertilizer data belongs to. Some data may not be available in certain regions and data will not be included in the response." + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "Specifies the type of the reference fertilizer." + referenceId: + type: "string" + example: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + format: "uuid" + description: "product reference id" + epaRegistration: + type: "string" + example: "a12e9i84" + description: "production registration number details" + createdTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTime: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + sourceSystem: + type: "string" + format: "integer" + description: "The source system for the reference fertilizer." + example: 3 + nullable: false + sourceSystemProductId: type: "string" - format: "date" - example: "2017-03-22" - readOnly: true - nullable: true - required: - - "@type" - - "productErid" - - "docType" - - "description" - - "fileName" - DocumentCollection: + description: "The source system identifier for the reference fertilizer." + example: "905P24925" + nullable: false + ReferenceFertilizerCollection: type: "object" allOf: - - $ref: "#/components/schemas/CollectionBase" + - $ref: "#/components/schemas/CollectionBase_Fertilizers" - properties: values: type: "array" items: - $ref: "#/components/schemas/Document" - BaseResource: + $ref: "#/components/schemas/ReferenceFertilizer" + ReferenceProductOverrideStatus: type: "object" properties: - "@type": + key: + nullable: false type: "string" - example: "BaseResource" - id: - description: "Primary identifier for resource." + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "archived" + success: + nullable: false + type: "boolean" + description: "Whether or not the override was successfully applied" + example: true + errors: + $ref: "#/components/schemas/Errors" + ReferenceProductOverrideStatus_Chemicals: + type: "object" + properties: + key: + nullable: false type: "string" - format: "uuid" - example: "1f8c12b4-126f-11ec-82a8-0242ac130003" - links: - type: "array" - description: "Provides a reference to an associated object or list." - items: - $ref: "#/components/schemas/Link" + description: "Key for override parameter when setting overrides for a reference product" + example: "isCarrier" + enum: + - "isCarrier" + - "archived" + - "registration (chemicals and fertilizers only)" + success: + nullable: false + type: "boolean" + description: "Whether or not the override was successfully applied" + example: true + errors: + $ref: "#/components/schemas/Errors" + ReferenceProductOverrideStatus_Fertilizers: + type: "object" + properties: + key: + nullable: false + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "isCarrier" + enum: + - "isCarrier" + - "archived" + - "registration (chemicals and fertilizers only)" + success: + nullable: false + type: "boolean" + description: "Whether or not the override was successfully applied" + example: true + errors: + $ref: "#/components/schemas/Errors" + ReferenceProductPointerRequest: + allOf: + - properties: + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + x-required-boolean: true + - $ref: "#/components/schemas/CommonProductPointerRequest" ReferenceVariety: type: "object" allOf: @@ -847,34 +6398,6 @@ components: format: "date-time" example: "2019-03-27T14:59:57.000Z" description: "product modified time" - Link: - type: "object" - properties: - "@type": - type: "string" - example: "Link" - description: "The type of the link." - rel: - type: "string" - example: "self" - description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." - uri: - type: "string" - format: "uri" - example: "api_route" - description: "The location of the resource" - CollectionBase: - type: "object" - properties: - links: - type: "array" - description: "Provides a reference to an associated object or list." - items: - $ref: "#/components/schemas/Link" - total: - type: "integer" - format: "int32" - example: 100 ReferenceVarietyCollection: type: "object" allOf: @@ -884,199 +6407,681 @@ components: type: "array" items: $ref: "#/components/schemas/ReferenceVariety" - OverrideKeyValuePair: - type: "object" + TankMix: properties: - key: - nullable: false + "@type": type: "string" - description: "Key for override parameter when setting overrides for a reference product" - example: "archived" - enum: - - "archived" - value: - nullable: false + example: "TankMix" + description: "The type of the tank mix." + name: + type: "string" + x-required-boolean: true + example: "TankMix_with_All_Crop" + description: "The name of the tank mix." + notes: + type: "string" + example: "Mix in the carrier last" + description: "Notes about the Tank mix." + solutionRate: type: "object" - description: "Value for override parameter, can be string, number or boolean" - example: true - required: - - "key" - - "value" - CommonProductPointerRequest: - type: "object" - properties: - overrides: - nullable: true - type: "array" - items: - $ref: "#/components/schemas/OverrideKeyValuePair" - ReferenceProductPointerRequest: - allOf: - - properties: - countryCode: + x-required-boolean: true + properties: + "@type": type: "string" - example: "USA" - description: "Country of the product to which it belongs." + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" x-required-boolean: true - - $ref: "#/components/schemas/CommonProductPointerRequest" - VarietyCollection: - type: "object" - allOf: - - $ref: "#/components/schemas/CollectionBase" - - properties: - values: - type: "array" - items: - $ref: "#/components/schemas/Variety" - ReferenceProductOverrideStatus: - type: "object" - properties: - key: - nullable: false - type: "string" - description: "Key for override parameter when setting overrides for a reference product" - example: "archived" - enum: - - "archived" - success: - nullable: false - type: "boolean" - description: "Whether or not the override was successfully applied" - example: true - errors: - $ref: "#/components/schemas/Errors" - PutVariety: - type: "object" - allOf: - - properties: - "@type": - example: "Variety" - name: + format: "double" + example: 5 + description: "The value of the measurement as a double." + vrDomainId: type: "string" - example: "S73-Z5 - 50lb bag" - description: "The common name of the variety." x-required-boolean: true - cropName: + example: "vrSolutionRateLiquid" + description: "The domain ID for the measurement." + unit: type: "string" - example: "SOYBEANS" x-required-boolean: true - description: "The identifier of the crop type that this variety is associated with (see the Crop Types API). **NOTE:** See /cropTypes for the list of available crop types that are supported." - companyName: + example: "gal1ac-1" + description: "The unit of measure for the value." + volume: + type: "object" + x-required-boolean: true + properties: + "@type": type: "string" - description: "The brand of the variety." - example: "NK" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" x-required-boolean: true - category: + format: "double" + example: 1200 + description: "The volume value as a double." + vrDomainId: type: "string" - enum: - - "VARIETY" - example: "VARIETY" - archived: - type: "boolean" - description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." - example: false - createdTime: + x-required-boolean: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the volume measurement." + unit: type: "string" - format: "date-time" - example: "2019-03-27T14:59:57.000Z" - description: "product created time" - modifiedTime: + x-required-boolean: true + example: "gal" + description: "The unit of measure for the volume." + carrier: + x-required-boolean: true + type: "object" + properties: + "@type": type: "string" - format: "date-time" - example: "2019-03-27T14:59:57.000Z" - description: "product modified time" - required: - - "name" - - "cropName" - - "companyName" - VarietyIdUpdate: - properties: - name: - type: "string" - example: "RL8288HB" - description: "The common name of the variety." - companyName: - type: "string" - example: "AgVenture" - description: "The name of the input manufacturer." - cropName: - type: "string" - example: "CORN_WET" - description: "The identifier of the crop type that this variety is associated with." + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + x-required-boolean: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + x-required-boolean: true + example: 4.465466816647919 + description: "The rate value as a double." + vrDomainId: + type: "string" + x-required-boolean: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + x-required-boolean: true + example: "gal1ac-1" + description: "The unit of measure for the rate." + links: + type: "array" + x-required-boolean: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + x-required-boolean: true + example: "fertilizer" + description: "The relationship of the link." + uri: + type: "string" + x-required-boolean: true + example: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1" + description: "The URI of the linked resource." + components: + x-required-boolean: true + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + x-required-boolean: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + x-required-boolean: true + format: "double" + example: 3 + description: "The rate value as a double." + vrDomainId: + type: "string" + x-required-boolean: true + example: "vrSolutionRateMass" + description: "The domain ID for the rate measurement." + unit: + type: "string" + x-required-boolean: true + example: "kg1ha-1" + description: "The unit of measure for the rate." + links: + type: "array" + x-required-boolean: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + x-required-boolean: true + example: "fertilizer" + description: "The relationship of the link either fertilizer or chemical." + uri: + type: "string" + x-required-boolean: true + example: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b" + description: "The URI of the linked resource." archived: type: "boolean" example: false - description: "Whether or not this product is actively used. Defaults to false." - ChildVariety: - type: "object" - allOf: - - $ref: "#/components/schemas/BaseResource" - - properties: + description: "Whether or not this tank mix is actively used." + materialClassification: + type: "string" + example: "LIQUID" + x-required-boolean: true + description: "Material classification of the tank mix." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + TankMixCollection: + properties: + x-deere-signature: + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "3b5392615e4b4e1c92013026f47109bb" + "@type": + type: "string" + example: "TankMix" + description: "The type of the tank mix." + name: + type: "string" + example: "TankMix_with_All_Crop" + description: "The name of the tank mix." + orgUniqueId: + type: "string" + example: "0585cd6d-898a-4298-ac09-a61db88d9e7d" + description: "The unique identifier for the organization." + solutionRate: + type: "object" + properties: "@type": - example: "Variety" - id: - type: "string" - example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" - format: "uuid" - nullable: false - description: "The primary identifier for the variety that is unique to your organization." - name: - type: "string" - example: "S73-Z5 - 50lb bag" - description: "The common name of the variety." - nullable: false - category: - type: "string" - enum: - - "VARIETY" - example: "VARIETY" - cropName: - type: "string" - example: "SOYBEANS" - description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." - nullable: false - companyName: type: "string" - description: "The brand of the variety." - example: "NK" - nullable: false - archived: - type: "boolean" - description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." - example: false - nullable: false - createdTime: + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 100 + description: "The value of the measurement as a double." + vrDomainId: type: "string" - format: "date-time" - example: "2017-03-21T21:12:53.865Z" - description: "product created time" - modifiedTime: + example: "vrSolutionRateLiquid" + description: "The domain ID for the measurement." + unit: type: "string" - format: "date-time" - example: "2018-04-06T15:12:52.910Z" - description: "product modified time" - readOnly: true - countryCode: + example: "gal1ac-1" + description: "The unit of measure for the value." + volume: + type: "object" + properties: + "@type": type: "string" - example: "USA" - description: "Country of the product to which it belongs" - parentErid: + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 1200 + description: "The volume value as a double." + vrDomainId: type: "string" - example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" - description: "Parent id of the child in which the product is merged" - cleanupStatus: + example: "vrSolutionRateLiquid" + description: "The domain ID for the volume measurement." + unit: type: "string" - example: "MERGED" - description: "Showing the status of cleanup." - cleanupActionDate: + example: "gal" + description: "The unit of measure for the volume." + carrier: + type: "object" + properties: + "@type": type: "string" - example: "2025-09-22T11:24:43.855Z" - description: "Clean up action time" - documentsList: + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 90 + description: "The rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + example: "gal1ac-1" + description: "The unit of measure for the rate." + chemical: + type: "object" + properties: + "@type": + type: "string" + example: "Fertilizer" + description: "The type of the chemical/fertilizer." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The URI of the linked resource." + id: + type: "string" + example: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The identifier for the chemical/fertilizer." + name: + type: "string" + example: "28-0-0 UAN" + description: "The name of the chemical/fertilizer." + type: + type: "string" + example: "FERTILIZER" + description: "The type of the chemical/fertilizer." + category: + type: "string" + example: "FERTILIZER" + description: "The category of the chemical/fertilizer." + companyName: + type: "string" + example: "BASF" + description: "The name of the company." + epaRegistration: + type: "string" + example: "EXEMPT" + description: "The EPA registration status." + registration: + type: "string" + example: "EXEMPT" + description: "The registration status." + materialClassification: + type: "string" + example: "LIQUID" + description: "The material classification." + createdTime: + type: "string" + format: "date-time" + example: "2024-11-07T06:47:38.220Z" + description: "The time when the chemical/fertilizer was created." + carrierId: + type: "string" + example: "274bbd7b-24ae-11ee-9389-123df1de64f7" + description: "The carrier ID." + referenceId: + type: "string" + example: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The reference ID." + referenceGuid: + type: "string" + example: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The reference GUID." + carrier: + type: "boolean" + example: true + description: "Whether the chemical/fertilizer is a carrier." + archived: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is archived." + restrictedUse: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is restricted use." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + agencyRegistrations: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the agency registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the linked resource." + registrationId: + type: "string" + example: "EXEMPT" + description: "The registration ID." + links: type: "array" items: - $ref: "#/components/schemas/Document" - description: "List of documents for the variety. For example, Tech Sheet, SDS Label." + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "fertilizer" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The URI of the linked resource." + components: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 10 + description: "The rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + example: "gal1ac-1" + description: "The unit of measure for the rate." + chemical: + type: "object" + properties: + "@type": + type: "string" + example: "Chemical" + description: "The type of the chemical/fertilizer." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The URI of the linked resource." + id: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The identifier for the chemical/fertilizer." + name: + type: "string" + example: "TELIA" + description: "The name of the chemical/fertilizer." + type: + type: "string" + example: "FUNGICIDE" + description: "The type of the chemical/fertilizer." + category: + type: "string" + example: "CHEMICAL" + description: "The category of the chemical/fertilizer." + companyName: + type: "string" + example: "BASF" + description: "The name of the company." + epaRegistration: + type: "string" + example: "EXEMPT" + description: "The EPA registration status." + registration: + type: "string" + example: "EXEMPT" + description: "The registration status." + modifiedTime: + type: "string" + format: "date-time" + example: "2024-08-21T09:25:24.220763Z" + description: "The time when the chemical/fertilizer was modified." + carrierId: + type: "string" + example: "58984d7a-126e-4d31-98e9-1ed65a582d91" + description: "The carrier ID." + referenceId: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference ID." + referenceGuid: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference GUID." + carrier: + type: "boolean" + example: true + description: "Whether the chemical/fertilizer is a carrier." + archived: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is archived." + restrictedUse: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is restricted use." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + agencyRegistrations: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the agency registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the linked resource." + registrationId: + type: "string" + example: "EXEMPT" + description: "The registration ID." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "chemical" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The URI of the linked resource." + notes: + type: "string" + example: "this is tankmix notes" + description: "Notes about the tank mix." + archived: + type: "boolean" + example: false + description: "Whether or not this tank mix is actively used." + createdTime: + type: "string" + format: "date-time" + example: "2024-11-07T06:47:39.246Z" + description: "The time when the tank mix was created." + modifiedTime: + type: "string" + format: "date-time" + example: "2024-11-07T06:47:39.246Z" + description: "The time when the tank mix was modified." + materialClassification: + type: "string" + example: "LIQUID" + description: "Material classification of the tank mix." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d" + description: "The URI of the linked resource." + Updated: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc.turer" + type: + type: "string" + description: "The type of chemical" + example: "HERBICIDE" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification: + type: "string" + description: "The product form. This is required during updates (as it may currently be null), but cannot be changed once set." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + Updated_Fertilizers: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc." + type: + type: "string" + description: "The type of fertilizer" + example: "FERTILIZER" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification: + type: "string" + description: "The product form. This is required during updates (as it may currently be null), but cannot be changed once set." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + activeIngredients: + type: "array" + allOf: + - $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" Variety: type: "object" allOf: @@ -1162,89 +7167,15 @@ components: items: $ref: "#/components/schemas/ChildVariety" description: "List of child products." - Errors: - type: "object" - format: "Errors/DataValidationException" - properties: - "@type": - type: "string" - example: "Errors" - errors: - type: "array" - items: - type: "object" - format: "Error/ConstraintViolation" - properties: - "@type": - type: "string" - example: "Error" - guid: - type: "string" - format: "uuid" - example: "9b331708-10e8-4e15-8097-a9aed7455d6d" - message: - type: "string" - description: "An english description of the error." - example: "The given crop type does not exist" - code: - type: "string" - example: "validation_constraint_crop_type_does_not_exist" - description: "A string constant representing the type of error." - field: - type: "string" - example: "targetCrops" - description: "The name of the property or parameter deemed invalid." - invalidValue: - type: "string" - example: "CORN_WET" - description: "The value that was supplied for this field in the request." - otherAttributes: - example: {} - type: "object" - PostVariety: + VarietyCollection: type: "object" allOf: + - $ref: "#/components/schemas/CollectionBase" - properties: - "@type": - example: "Variety" - name: - type: "string" - example: "S73-Z5 - 50lb bag" - description: "The common name of the variety." - x-required-boolean: true - cropName: - type: "string" - example: "SOYBEANS" - description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." - x-required-boolean: true - companyName: - type: "string" - description: "The brand of the variety." - example: "NK" - x-required-boolean: true - category: - type: "string" - enum: - - "VARIETY" - example: "VARIETY" - archived: - type: "boolean" - description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." - example: false - createdTime: - type: "string" - format: "date-time" - example: "2017-03-21T21:12:53.865Z" - description: "product created time" - modifiedTime: - type: "string" - format: "date-time" - example: "2018-04-06T15:12:52.910Z" - description: "product modified time" - required: - - "name" - - "cropName" - - "companyName" + values: + type: "array" + items: + $ref: "#/components/schemas/Variety" VarietyCreate: properties: name: @@ -1267,6 +7198,80 @@ components: type: "string" description: "The identifier of the associated reference variety, if applicable. This is optional, but helps to capture product lineage and improve consistency across organizations." example: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" - responses: - Created: - description: "Created" + VarietyIdUpdate: + properties: + name: + type: "string" + example: "RL8288HB" + description: "The common name of the variety." + companyName: + type: "string" + example: "AgVenture" + description: "The name of the input manufacturer." + cropName: + type: "string" + example: "CORN_WET" + description: "The identifier of the crop type that this variety is associated with." + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used. Defaults to false." + agencyRegistrations: + type: "array" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the agency." + registrationId: + type: "string" + example: "a12e9i84" + description: "The registration ID for the agency." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag2: "ag2" + ag3: "ag3" + OAuth2_Companies: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" +x-source-documents: + - endPointName: "varieties" + id: 9 + - endPointName: "active-ingredients" + id: 15 + - endPointName: "chemicals" + id: 10 + - endPointName: "companies" + id: 14 + - endPointName: "documents" + id: 16 + - endPointName: "dry-blends" + id: 13 + - endPointName: "fertilizers" + id: 11 + - endPointName: "tank-mix" + id: 12 diff --git a/specs/fixed/webhook.yaml b/specs/fixed/webhook.yaml index 4f0d55b..a517fe8 100644 --- a/specs/fixed/webhook.yaml +++ b/specs/fixed/webhook.yaml @@ -16,6 +16,40 @@ servers: - "sandboxapi" - "partnerapi" paths: + /eventSubscriptionDelivery: + patch: + summary: "Update Event Subscription Delivery" + description: "This resource will update an event subscription delivery" + operationId: "updateDelivery" + requestBody: + x-required-boolean: true + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/SubscriptionUpdateResponse" + examples: + No Header: + value: + authorizationHeaderValue: "Bearer 123abc" + concurrentDeliveries: 5 + maxBatchSize: 5 + status: "Active" + responses: + "200": + $ref: "#/components/responses/UpdatedResponse_EventSubscriptionDelivery" + "400": + $ref: "#/components/responses/BadRequestResponse_EventSubscriptionDelivery" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + get: + description: "This resource will return your event subscription delivery status" + summary: "Get Event Subscription Delivery" + operationId: "getDelivery" + responses: + "200": + $ref: "#/components/responses/DeliveryResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" /eventSubscriptions: post: summary: "Create an Event Subscription" @@ -131,15 +165,15 @@ paths: $ref: "#/components/responses/InputValueIsInvalidResponse" components: parameters: - Id: - in: "path" - name: "id" - description: "Event Subscription ID as a GUID." - x-required-boolean: true + DisplayName: + in: "request" + name: "displayName" + description: "Human-readable name to easily identify the event subscription." + x-required-boolean: false schema: type: "string" default: "N/A" - example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + example: "My Data Subscription" EventTypeId: in: "request" name: "eventTypeId" @@ -158,15 +192,22 @@ components: type: "array" default: "N/A" example: "See sample request below" - TargetEndpoint: - in: "request" - name: "targetEndpoint" - description: "The postback endpoint that receives the event(s)." + HTTPTargetEndpointAuthorizationHeader: + name: "Authorization" + in: "header" + description: "If set via the eventSubscriptionDelivery endpoint, we will include an Authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb." + x-required-boolean: false + schema: + $ref: "#/components/schemas/AuthorizationHeader" + Id: + in: "path" + name: "id" + description: "Event Subscription ID as a GUID." x-required-boolean: true schema: - type: "---" + type: "string" default: "N/A" - example: "See sample request below" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" Status: in: "request" name: "status" @@ -176,15 +217,15 @@ components: type: "string" default: "Active" example: "Active" - DisplayName: + TargetEndpoint: in: "request" - name: "displayName" - description: "Human-readable name to easily identify the event subscription." - x-required-boolean: false + name: "targetEndpoint" + description: "The postback endpoint that receives the event(s)." + x-required-boolean: true schema: - type: "string" + type: "---" default: "N/A" - example: "My Data Subscription" + example: "See sample request below" Token: in: "request" name: "token" @@ -194,22 +235,7 @@ components: type: "string" default: "N/A" example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'" - HTTPTargetEndpointAuthorizationHeader: - name: "Authorization" - in: "header" - description: "If set via the eventSubscriptionDelivery endpoint, we will include an Authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb." - x-required-boolean: false - schema: - $ref: "#/components/schemas/AuthorizationHeader" requestBodies: - SubscriptionRequest: - x-required-boolean: true - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: "#/components/schemas/SubscriptionRequestContent" - SubscriptionUpdateRequest: - $ref: "#/components/schemas/SubscriptionResponseContent" DeliveryUpdateRequest: x-required-boolean: true content: @@ -222,14 +248,36 @@ components: application/json: schema: $ref: "#/components/schemas/HTTPTargetEndpointEventsContent" + SubscriptionRequest: + x-required-boolean: true + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/SubscriptionRequestContent" + SubscriptionUpdateRequest: + $ref: "#/components/schemas/SubscriptionResponseContent" responses: - SubscriptionResponse: - description: "Subscription" + BadRequestResponse: + description: "Bad Request" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + BadRequestResponse_EventSubscriptionDelivery: + description: "Bad Request" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors_EventSubscriptionDelivery" + CreatedSubscription: + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: + type: "object" properties: links: + type: "array" items: $ref: "#/components/schemas/CreatedSubscriptionLinks" values: @@ -247,6 +295,13 @@ components: - key: "fieldOperationType" values: - "seeding" + - key: "cropSeason" + values: + - "2017" + - "2018" + - key: "fieldId" + values: + - "12345" targetEndpoint: targetType: "https" uri: "https://website.com/api/receiveEvents" @@ -255,10 +310,41 @@ components: clientKey: "REDACTED" token: "REDACTED" links: - - rel: "user" - uri: "https://sandboxapi.deere.com/platform/users/subscribedUser" - rel: "self" uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" + DeletedResponse: + description: "Deleted" + content: + application/vnd.deere.axiom.v3+json: + schema: + description: "A deleted response" + DeliveryResponse: + description: "Delivery" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/SubscriptionUpdateResponseGet" + links: + items: + $ref: "#/components/schemas/SubscriptionDeliveryLink" + examples: + No Header: + value: + authorizationHeaderValue: "Bearer 123abc" + clientKey: "REDACTED" + status: "Active" + concurrentDeliveries: 5 + maxBatchSize: 10 + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptionDelivery" + DoesNotHaveAccessResponse: + description: "Does not have access" + InputValueIsInvalidResponse: + description: "Not found" SubscriptionCollectionResponse: description: "Subscriptions" content: @@ -304,15 +390,13 @@ components: uri: "https://sandboxapi.deere.com/platform/users/subscribedUser" - rel: "self" uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" - CreatedSubscription: - description: "Created" + SubscriptionResponse: + description: "Subscription" content: application/vnd.deere.axiom.v3+json: schema: - type: "object" properties: links: - type: "array" items: $ref: "#/components/schemas/CreatedSubscriptionLinks" values: @@ -330,13 +414,6 @@ components: - key: "fieldOperationType" values: - "seeding" - - key: "cropSeason" - values: - - "2017" - - "2018" - - key: "fieldId" - values: - - "12345" targetEndpoint: targetType: "https" uri: "https://website.com/api/receiveEvents" @@ -345,14 +422,10 @@ components: clientKey: "REDACTED" token: "REDACTED" links: + - rel: "user" + uri: "https://sandboxapi.deere.com/platform/users/subscribedUser" - rel: "self" uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" - DeletedResponse: - description: "Deleted" - content: - application/vnd.deere.axiom.v3+json: - schema: - description: "A deleted response" UpdatedResponse: description: "Subscription" content: @@ -367,86 +440,27 @@ components: examples: Headers: description: "204 No Content" - InputValueIsInvalidResponse: - description: "Not found" - DoesNotHaveAccessResponse: - description: "Does not have access" - BadRequestResponse: - description: "Bad Request" + UpdatedResponse_EventSubscriptionDelivery: + description: "Update Subscriptions delivery" content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/Errors" + properties: + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + examples: + Headers: + description: "204 No Content" schemas: - HTTPTargetEndpointEventsContent: - description: "A list of events" - type: "array" - items: - $ref: "#/components/schemas/HTTPTargetEndpointEventContent" - HTTPTargetEndpointEventContent: - description: "An event" - type: "object" - properties: - clientKey: - type: "string" - description: "The client key that made the subscription" - example: "johndeere-abcdef" - eventTypeId: - type: "string" - example: "fieldOperation" - targetResource: - type: "string" - format: "url" - example: "https://sandboxapi.deere.com/platform/fieldOperations/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" - token: - type: "string" - pattern: "^[A-Za-z0-9+/=]{0,256}$" - description: "a string that will be sent with each delivery to validate the sender. Accepts the base 64 character set." - example: "abc123ABC+/=" - metadata: - type: "array" - items: - $ref: "#/components/schemas/HTTPTargetEndpointEventMetadata" - links: - $ref: "#/components/schemas/Links" - required: - - "clientKey" - - "eventTypeId" - - "targetResource" - - "metadata" - - "links" - HTTPTargetEndpointEventMetadata: - type: "object" - description: "Generic key value pair" - properties: - key: - type: "string" - example: "orgId" - value: - type: "string" - example: 12345 - Links: - type: "array" - items: - $ref: "#/components/schemas/Link" - readOnly: true - Link: - description: "Link to another resource" - type: "object" - required: - - "rel" - - "uri" - properties: - rel: - type: "string" - example: "self" - uri: - type: "string" - example: "https://sandboxapi.deere.com/platform/users/USER" - Errors: - type: "array" - items: - $ref: "#/components/schemas/Error" + AuthorizationHeader: + type: "string" + maxLength: 4096 + nullable: true + example: "Bearer" + description: "If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb." CreatedSubscriptionLinks: properties: user: @@ -495,14 +509,45 @@ components: description: "Links to other resources." example: "See the sample response below" type: "array" - Error: + DeliveryContent: type: "object" + description: "Delivery" properties: - guid: + clientKey: type: "string" - format: "guid" - example: "11111111-2222-3333-4444-555555555555" - message: + example: "johndeere-abcdef" + readOnly: true + status: + $ref: "#/components/schemas/DeliveryStatus" + authorizationHeaderValue: + $ref: "#/components/schemas/AuthorizationHeader" + concurrentDeliveries: + type: "integer" + example: 5 + format: "int32" + minimum: 1 + maximum: 10 + maxBatchSize: + type: "integer" + example: 5 + format: "int32" + minimum: 1 + maximum: 256 + links: + $ref: "#/components/schemas/Links" + DeliveryStatus: + type: "string" + enum: + - "Active" + - "Paused" + Error: + type: "object" + properties: + guid: + type: "string" + format: "guid" + example: "11111111-2222-3333-4444-555555555555" + message: type: "string" description: "An english description of the error" example: "was invalid because" @@ -518,34 +563,45 @@ components: type: "string" description: "The value that was supplied for this field in the request" example: "Bad value" - SubscriptionRequestContent: - description: "A subscription request" + Error_EventSubscriptionDelivery: type: "object" properties: - eventTypeId: - $ref: "#/components/schemas/EventTypeId" - filters: - type: "array" - items: - $ref: "#/components/schemas/Filter" - targetEndpoint: - $ref: "#/components/schemas/HttpsSubscription" - status: + message: type: "string" - enum: - - "Active" - default: "Active" - displayName: + description: "An english description of the error" + example: "was invalid because" + code: type: "string" - example: "mySubscribedEndPoint" - token: + description: "A string constant representing the type of error" + example: 400 + field: type: "string" - pattern: "^[A-Za-z0-9+/=]{0,256}$" - description: "a string that well be sent with each delivery to validate the sender. Accepts the base 64 character set." - example: "abc123ABC+/=" - required: - - "eventTypeId" - - "targetEndpoint" + description: "The name of the property or parameter deemed invalid" + example: "Machine.serialNumber" + gud: + type: "string" + format: "uuid" + description: "A reference to this encounter of the error, for traceability and troubleshooting" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: null + readOnly: true + Errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + Errors_EventSubscriptionDelivery: + type: "array" + items: + $ref: "#/components/schemas/Error_EventSubscriptionDelivery" + readOnly: true + EventTypeId: + type: "string" + description: "See [Event Types](https://developer-portal.deere.com/#/myjohndeere/data-subscription-service/event-types) for valid event names" + readOnly: true + example: "exampleEvent" Filter: type: "object" description: "Consists of a key and list of values used to filter events based on metadata." @@ -561,37 +617,123 @@ components: required: - "key" - "values" + HTTPTargetEndpointEventContent: + description: "An event" + type: "object" + properties: + clientKey: + type: "string" + description: "The client key that made the subscription" + example: "johndeere-abcdef" + eventTypeId: + type: "string" + example: "fieldOperation" + targetResource: + type: "string" + format: "url" + example: "https://sandboxapi.deere.com/platform/fieldOperations/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" + token: + type: "string" + pattern: "^[A-Za-z0-9+/=]{0,256}$" + description: "a string that will be sent with each delivery to validate the sender. Accepts the base 64 character set." + example: "abc123ABC+/=" + metadata: + type: "array" + items: + $ref: "#/components/schemas/HTTPTargetEndpointEventMetadata" + links: + $ref: "#/components/schemas/Links" + required: + - "clientKey" + - "eventTypeId" + - "targetResource" + - "metadata" + - "links" + HTTPTargetEndpointEventMetadata: + type: "object" + description: "Generic key value pair" + properties: + key: + type: "string" + example: "orgId" + value: + type: "string" + example: 12345 + HTTPTargetEndpointEventsContent: + description: "A list of events" + type: "array" + items: + $ref: "#/components/schemas/HTTPTargetEndpointEventContent" + HttpsSubscription: + description: "A HTTPS subscription" + type: "object" + required: + - "targetType" + - "uri" + properties: + targetType: + type: "string" + example: "https" + uri: + type: "string" + example: "https//example.com/callme" + Link: + description: "Link to another resource" + type: "object" + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + example: "self" + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/users/USER" + Links: + type: "array" + items: + $ref: "#/components/schemas/Link" + readOnly: true SubscriptionCollectionResponseContent: type: "object" properties: self: description: "The link of the request." example: "https://sandboxapi.deere.com/platform/eventSubscriptions" - SubscriptionResponseContentPut: - description: "A subscription response" + SubscriptionDeliveryLink: + properties: + self: + description: "The link to the event subscription's delivery status." + example: "https://sandboxapi.deere.com/platform/eventSubscriptionDelivery" + SubscriptionRequestContent: + description: "A subscription request" type: "object" properties: + eventTypeId: + $ref: "#/components/schemas/EventTypeId" + filters: + type: "array" + items: + $ref: "#/components/schemas/Filter" targetEndpoint: - example: "See the sample response below" - type: "---" - description: "The postback endpoint that receives the event(s)." + $ref: "#/components/schemas/HttpsSubscription" status: type: "string" - example: "Active" - description: "The status of the event subscription." + enum: + - "Active" + default: "Active" displayName: type: "string" - example: "My Data Subscription" - description: "Human-readable name to easily identify the event subscription." - clientKey: - type: "string" - example: "REDACTED" - description: "The client key used to create the subscription." + example: "mySubscribedEndPoint" token: type: "string" pattern: "^[A-Za-z0-9+/=]{0,256}$" - description: "A string that was sent with each delivery to validate the sender." - example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'" + description: "a string that well be sent with each delivery to validate the sender. Accepts the base 64 character set." + example: "abc123ABC+/=" + required: + - "eventTypeId" + - "targetEndpoint" SubscriptionResponseContent: description: "A subscription response" type: "object" @@ -612,58 +754,61 @@ components: type: "string" description: "A string that was sent with each delivery to validate the sender." example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$' Editable: Yes" - HttpsSubscription: - description: "A HTTPS subscription" + SubscriptionResponseContentPut: + description: "A subscription response" type: "object" - required: - - "targetType" - - "uri" properties: - targetType: + targetEndpoint: + example: "See the sample response below" + type: "---" + description: "The postback endpoint that receives the event(s)." + status: type: "string" - example: "https" - uri: + example: "Active" + description: "The status of the event subscription." + displayName: type: "string" - example: "https//example.com/callme" - EventTypeId: - type: "string" - description: "See [Event Types](https://developer-portal.deere.com/#/myjohndeere/data-subscription-service/event-types) for valid event names" - readOnly: true - example: "exampleEvent" - DeliveryContent: - type: "object" - description: "Delivery" + example: "My Data Subscription" + description: "Human-readable name to easily identify the event subscription." + clientKey: + type: "string" + example: "REDACTED" + description: "The client key used to create the subscription." + token: + type: "string" + pattern: "^[A-Za-z0-9+/=]{0,256}$" + description: "A string that was sent with each delivery to validate the sender." + example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'" + SubscriptionUpdateResponse: properties: + concurrentDeliveries: + type: "number" + description: "Concurrency of the event subscription delivery (default: 1, min: 1, max: 10)." + example: "5 Editable: Yes" clientKey: type: "string" - example: "johndeere-abcdef" - readOnly: true - status: - $ref: "#/components/schemas/DeliveryStatus" - authorizationHeaderValue: - $ref: "#/components/schemas/AuthorizationHeader" + description: "The client key used to create the subscription." + example: "johndeere-1234567898765432123456789876543212345678 Editable: No" + links: + type: "array" + example: "See the sample request below Editable: No" + description: "Links to other resources." + SubscriptionUpdateResponseGet: + properties: concurrentDeliveries: - type: "integer" + type: "number" + description: "Concurrency of the event subscription delivery (default: 1, min: 1, max: 10)." example: 5 - format: "int32" - minimum: 1 - maximum: 10 - maxBatchSize: - type: "integer" - example: 5 - format: "int32" - minimum: 1 - maximum: 256 + clientKey: + type: "string" + description: "The client key used to create the subscription." + example: "REDACTED" links: - $ref: "#/components/schemas/Links" - DeliveryStatus: - type: "string" - enum: - - "Active" - - "Paused" - AuthorizationHeader: - type: "string" - maxLength: 4096 - nullable: true - example: "Bearer" - description: "If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb." + type: "array" + example: "See the sample request below" + description: "Links to other resources." +x-source-documents: + - endPointName: "event-subscription" + id: 103 + - endPointName: "event-subscription-delivery" + id: 104 diff --git a/specs/raw/aemp.yaml b/specs/raw/aemp.yaml index e7cef99..79a3e45 100644 --- a/specs/raw/aemp.yaml +++ b/specs/raw/aemp.yaml @@ -1,75 +1,67 @@ -openapi: 3.0.2 +openapi: "3.0.2" info: - description: The JDLink™ Machine Data API retrieves machine data according to the ISO standard (15143-3).Before you access the JDLink™ Machine Data API, you must have set up a username, password,and organization for you through MyJohnDeere or JDLink™. Ask your John Deere Dealer or submit a support ticket if you require assistance. - title: Fleet endpoints - version: 1.0.0 - + description: "The JDLink™ Machine Data API retrieves machine data according to the ISO standard (15143-3).Before you access the JDLink™ Machine Data API, you must have set up a username, password,and organization for you through MyJohnDeere or JDLink™. Ask your John Deere Dealer or submit a support ticket if you require assistance." + title: "Fleet endpoints" + version: "1.0.0" servers: - - url: 'https://sandboxaemp.deere.com/Fleet/{pageNumber} (sandbox)
GET https://partneraemp.deere.com/Fleet/{pageNumber} (live)' - description: url - + - url: "https://sandboxaemp.deere.com/Fleet/{pageNumber} (sandbox)
GET https://partneraemp.deere.com/Fleet/{pageNumber} (live)" + description: "url" paths: /Fleet/{pageNumber}: get: - description: 'Retrieve a snapshot view of an equipment owner’s fleet. The API response is paginated with a page size of 100. If the response is large, it will be chunked into multiple pages. Please follow the "next" link within the response to retrieve all the fleets. -

- Note: The API response is cached on our servers for an hour. Hence, polling frequency of at least one hour is recommended. -
- Note: Not all vehicles will supply all data points.' - summary: 'Get Fleet List' + description: "Retrieve a snapshot view of an equipment owner’s fleet. The API response is paginated with a page size of 100. If the response is large, it will be chunked into multiple pages. Please follow the \"next\" link within the response to retrieve all the fleets.

Note: The API response is cached on our servers for an hour. Hence, polling frequency of at least one hour is recommended.
Note: Not all vehicles will supply all data points." + summary: "Get Fleet List" parameters: - - $ref: '#/components/parameters/PageNumber' + - $ref: "#/components/parameters/PageNumber" responses: - 200: - $ref: '#/components/responses/FleetResponse' - + "200": + $ref: "#/components/responses/FleetResponse" components: parameters: PageNumber: - name: pageNumber - description: Navigation to a page. Links to the current, previous, next and last pages will be provided for easy navigation - in: path + name: "pageNumber" + description: "Navigation to a page. Links to the current, previous, next and last pages will be provided for easy navigation" + in: "path" required: true schema: - example: '1' - default: '100 records per page.' - type: string + example: "1" + default: "100 records per page." + type: "string" responses: FleetResponse: - description: View One Page in a Machine List + description: "View One Page in a Machine List" content: application/xml: schema: properties: values: items: - $ref: '#/components/schemas/FleetValue' + $ref: "#/components/schemas/FleetValue" examples: XML: - description: '200 OK' + description: "200 OK" value: Fleet: Links: - Link: - - rel: self - href: https://sandboxapi.deere.com/aemp/Fleet/1 + - rel: "self" + href: "https://sandboxapi.deere.com/aemp/Fleet/1" - Link: - - rel: last - href: https://sandboxapi.deere.com/aemp/Fleet/4 + - rel: "last" + href: "https://sandboxapi.deere.com/aemp/Fleet/4" - Link: - - rel: next - href: https://sandboxapi.com/aemp/Fleet/2 + - rel: "next" + href: "https://sandboxapi.com/aemp/Fleet/2" - Link: - - rel: connections - href: >- - https://connections.deere.com/connections/deere-sld8shg8ee0o8ns8nhdh88hn/select-organizations + - rel: "connections" + href: "https://connections.deere.com/connections/deere-sld8shg8ee0o8ns8nhdh88hn/select-organizations" Equipment: EquipmentHeader: - OEMName: JOHN DEERE - Model: 260E - EquipmentID: 1DW260EXJEF001076 - SerialNumber: 1DW260EXJEF001076 - PIN: 1DW260EXJEF001076 + OEMName: "JOHN DEERE" + Model: "260E" + EquipmentID: "1DW260EXJEF001076" + SerialNumber: "1DW260EXJEF001076" + PIN: "1DW260EXJEF001076" Location: Latitude: 42.573861 Longitude: -90.709778 @@ -80,166 +72,166 @@ components: CumulativeOperatingHours: Hour: 428.7 CumulativePayloadTotals: - PayloadUnits: Kilograms + PayloadUnits: "Kilograms" Payload: 499900 Distance: - OdometerUnits: kilometre + OdometerUnits: "kilometre" Odometer: 18871.799 DEFRemaining: Percent: 34.4 FuelRemaining: Percent: 48.8 FuelUsed: - FuelUnits: litre + FuelUnits: "litre" FuelConsumed: 63119 schemas: FleetValue: properties: equipmentHeader: - type: object - example: '---' - description: 'See sample response below. This field includes: OEMName, Model, EquipmentID, SerialNumber, & PIN.' + type: "object" + example: "---" + description: "See sample response below. This field includes: OEMName, Model, EquipmentID, SerialNumber, & PIN." OEMName: - type: string - description: Name of equipment manufacturer. - example: 'JOHN DEERE' + type: "string" + description: "Name of equipment manufacturer." + example: "JOHN DEERE" Model: - type: string - example: '260E' - description: 'Model number.' + type: "string" + example: "260E" + description: "Model number." EquipmentID: - type: string - example: '1DW260EXJEF001076' - description: 'User assigned ID.' + type: "string" + example: "1DW260EXJEF001076" + description: "User assigned ID." SerialNumber: - type: string - example: '1DW260EXJEF001076' - description: 'Serial number.' + type: "string" + example: "1DW260EXJEF001076" + description: "Serial number." Pin: - type: string - example: '1DW260EXJEF001076' - description: 'Assigned PIN.' + type: "string" + example: "1DW260EXJEF001076" + description: "Assigned PIN." Location: - type: object - description: 'See below. The Location object includes: datetime, latitude, & longitude.' - example: '---' + type: "object" + description: "See below. The Location object includes: datetime, latitude, & longitude." + example: "---" Location-datetime: - type: dateTime - example: '2017-03-22T18:35:45.000Z' - description: The last time Location was updated. + type: "dateTime" + example: "2017-03-22T18:35:45.000Z" + description: "The last time Location was updated." Latitude: - type: double - example: '42.573861' - description: Latitude of the machine. + type: "double" + example: "42.573861" + description: "Latitude of the machine." Longitude: - type: double - example: '-90.709778' - description: Longitude of the machine. + type: "double" + example: "-90.709778" + description: "Longitude of the machine." CumulativeIdleHours: - type: object - example: '---' - description: 'See below. The CumulativeIdleHours object includes datetime, & Hour.' + type: "object" + example: "---" + description: "See below. The CumulativeIdleHours object includes datetime, & Hour." CumulativeIdleHours-datetime: - type: dateTime - example: '2017-03-22T18:35:45.000Z' - description: The last time CumulativeIdleHours was updated. + type: "dateTime" + example: "2017-03-22T18:35:45.000Z" + description: "The last time CumulativeIdleHours was updated." CumulativeIdleHours-Hour: - type: double - description: Count of total idle hours at the given date time. - example: '180.60' + type: "double" + description: "Count of total idle hours at the given date time." + example: "180.60" CumulativeLoadCount: - type: object - example: '---' - description: 'See below. The CumulativeLoadCount object includes datetime, & Load.' + type: "object" + example: "---" + description: "See below. The CumulativeLoadCount object includes datetime, & Load." CumulativeLoadCount-datetime: - type: dateTime - description: The last time CumulativeLoadCount was updated. - example: '2017-03-22T18:35:45.000Z' + type: "dateTime" + description: "The last time CumulativeLoadCount was updated." + example: "2017-03-22T18:35:45.000Z" CumulativeLoadCount-Count: - type: integer - description: Total count of loads. - example: '496' + type: "integer" + description: "Total count of loads." + example: "496" CumulativeOperatingHours: - type: object - example: '---' - description: 'See below. The CumulativeOperatingHours object includes datetime, & Hour.' + type: "object" + example: "---" + description: "See below. The CumulativeOperatingHours object includes datetime, & Hour." CumulativeOperatingHours-datetime: - type: dateTime - description: The last time CumulativeOperatingHours was updated. - example: '2017-03-24T09:01:00.000Z' + type: "dateTime" + description: "The last time CumulativeOperatingHours was updated." + example: "2017-03-24T09:01:00.000Z" CumulativeOperatingHours-Hour: - type: double - example: '428.70' - description: Count of total operating hours at the given date time. + type: "double" + example: "428.70" + description: "Count of total operating hours at the given date time." CumulativePayloadTotals: - type: object - example: '---' - description: 'See below. The CumulativePayloadTotals object includes datetime, PayloadUnits, & Payload.' + type: "object" + example: "---" + description: "See below. The CumulativePayloadTotals object includes datetime, PayloadUnits, & Payload." CumulativePayloadTotals-datetime: - type: dateTime - description: The last time CumulativePayloadTotals was updated. - example: '2017-03-22T18:35:45.000Z' + type: "dateTime" + description: "The last time CumulativePayloadTotals was updated." + example: "2017-03-22T18:35:45.000Z" PayloadUnits: - type: string - example: 'Kilograms' - description: Unit of measure for the total. + type: "string" + example: "Kilograms" + description: "Unit of measure for the total." Payload: - type: integer - example: '499900' - description: Total cumulative payload weight. + type: "integer" + example: "499900" + description: "Total cumulative payload weight." Distance: - type: object - example: '---' - description: 'See below. The Distance object includes datetime, OdometerUnits, & Odometer.' + type: "object" + example: "---" + description: "See below. The Distance object includes datetime, OdometerUnits, & Odometer." Distance-datetime: - type: dateTime - example: '2017-03-22T18:35:45.000Z' - description: The last time Distance was updated. + type: "dateTime" + example: "2017-03-22T18:35:45.000Z" + description: "The last time Distance was updated." OdometerUnits: - type: string - example: 'kilometre' - description: Unit of measure for the total distance. + type: "string" + example: "kilometre" + description: "Unit of measure for the total distance." Odometer: - type: double - example: '18871.799' - description: Total distance from Odometer. + type: "double" + example: "18871.799" + description: "Total distance from Odometer." DEFRemaining: - type: object - example: '---' - description: 'See below. The DEFRemaining object includes datetime, & Percent.' + type: "object" + example: "---" + description: "See below. The DEFRemaining object includes datetime, & Percent." DEFRemaining-datetime: - type: dateTime - description: The last time DEFRemaining was updated. - example: '2017-03-22T18:35:45.000Z' + type: "dateTime" + description: "The last time DEFRemaining was updated." + example: "2017-03-22T18:35:45.000Z" DEFRemaining-Percent: - type: double - example: '34.40' - description: Percentage of the tank with DEF remaining. + type: "double" + example: "34.40" + description: "Percentage of the tank with DEF remaining." FuelRemaining: - type: object - example: '---' - description: 'See below. The FuelRemaining object includes datetime, & Percent.' + type: "object" + example: "---" + description: "See below. The FuelRemaining object includes datetime, & Percent." FuelRemaining-datetime: - type: dateTime - example: '2017-03-22T18:35:45.000Z' - description: The last time FuelRemaining was updated. + type: "dateTime" + example: "2017-03-22T18:35:45.000Z" + description: "The last time FuelRemaining was updated." FuelRemaining-Percent: - type: double - description: Percentage of tank with fuel. - example: '48.80' + type: "double" + description: "Percentage of tank with fuel." + example: "48.80" FuelUsed: - type: object - example: '---' - description: 'See below. The FuelUsed object includes datetime, FuelUnits & FuelConsumed.' + type: "object" + example: "---" + description: "See below. The FuelUsed object includes datetime, FuelUnits & FuelConsumed." FuelUsed-datetime: - type: dateTime - example: '2017-03-22T18:35:45.000Z' - description: The last time FuelUsed was updated. + type: "dateTime" + example: "2017-03-22T18:35:45.000Z" + description: "The last time FuelUsed was updated." FuelUnits: - type: string - example: 'litre' - description: FuelUnits in litre. + type: "string" + example: "litre" + description: "FuelUnits in litre." FuelConsumed: - type: double - example: '63119' - description: Total fuel consumed. + type: "double" + example: "63119" + description: "Total fuel consumed." diff --git a/specs/raw/assets.yaml b/specs/raw/assets.yaml index bbd028f..4007832 100644 --- a/specs/raw/assets.yaml +++ b/specs/raw/assets.yaml @@ -1,20 +1,19 @@ -openapi: 3.0.1 +openapi: "3.0.1" info: - title: Contributed Assets API - description: | - A collection of APIs to contribute Assets and Asset data to MyJohnDeere. Learn more at [developer.deere.com](https://developer.deere.com) - version: 1.0.0 + title: "Contributed Assets API" + description: "A collection of APIs to contribute Assets and Asset data to MyJohnDeere. Learn more at [developer.deere.com](https://developer.deere.com)\n" + version: "1.0.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" tags: - name: "Asset" description: "A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements" @@ -23,1105 +22,1048 @@ tags: - name: "Asset Location" description: "A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes" paths: - /organizations/{orgId}/assets: + /assetCatalog: get: + summary: "Get Asset Catalog List" + operationId: "getAssetCatalog" tags: - - Asset - summary: Get all assets - operationId: getOrgAssets - description: This endpoint will retrieve all assets for an organization. + - "Asset Catalog" + description: "This endpoint will retrieve the Asset Catalog List." security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Embed' - - $ref: '#/components/parameters/X-deere-sign' + - $ref: "#/components/parameters/x-deere-sign" headers: - - $ref: '#/components/parameters/x-deere-sign2' + - $ref: "#/components/parameters/x-deere-sign2" responses: - 200: - $ref: '#/components/responses/GetOrgId' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 406: - $ref: '#/components/responses/406' - 429: - $ref: '#/components/responses/429' - post: - tags: - - Asset - summary: Create a new asset - operationId: postAsset - description: This endpoint will create a new asset. - note: 'Please Note: Refer to the GET /assetCatalog API sample response for all the possible combinations of asset category, type and subtype.' - security: - - OAuth2: [ eq2 ] - parameters: - - $ref: '#/components/parameters/OrgId' - requestBody: - description: Asset to be created. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/CreatePostValues' - examples: - No Header: - value: - title: AgThing Water Sensor - assetCategory: DEVICE - assetType: SENSOR - assetSubType: OTHER - required: true - contentType: - description: The request body used to create or update a client - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - responses: - 201: - $ref: '#/components/responses/CreatePost' - 400: - $ref: '#/components/responses/400' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 415: - $ref: '#/components/responses/415' - 429: - $ref: '#/components/responses/429' + "200": + description: "The Asset Catalog containaing all valid entries." + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/AssetCatalogGet" + examples: + No Header: + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/assetCatalog" + total: 2 + values: + - "@type": "ContributedCatalogItem" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "ENVIRONMENTAL" + links: [] + - "@type": "ContributedCatalogItem" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + links: [] /assets/{assetId}: get: tags: - - Asset - summary: Get a specific asset - operationId: getAsset - description: This endpoint will retrieve a specific asset by its unique ID. + - "Asset" + summary: "Get a specific asset" + operationId: "getAsset" + description: "This endpoint will retrieve a specific asset by its unique ID." security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" parameters: - - $ref: '#/components/parameters/AssetId' - - $ref: '#/components/parameters/Embed' + - $ref: "#/components/parameters/AssetId" + - $ref: "#/components/parameters/Embed" responses: - 200: - $ref: '#/components/responses/AssetGet' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 429: - $ref: '#/components/responses/429' + "200": + $ref: "#/components/responses/AssetGet" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "429": + $ref: "#/components/responses/429" put: tags: - - Asset - summary: Update an asset - description: This endpoint will update the asset by its unique id. - note: 'Please Note: assetCategory, assetType, and assetSubType cannot be updated.' + - "Asset" + summary: "Update an asset" + description: "This endpoint will update the asset by its unique id." + note: "Please Note: assetCategory, assetType, and assetSubType cannot be updated." security: - - OAuth2: [ eq2 ] + - OAuth2: + - "eq2" parameters: - - $ref: '#/components/parameters/AssetId' + - $ref: "#/components/parameters/AssetId" requestBody: - description: Asset to be updated. + description: "Asset to be updated." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/CreatePostValues' + $ref: "#/components/schemas/CreatePostValues" examples: No Header: value: - title: AgThing Water Device V2 - assetCategory: DEVICE - assetType: SENSOR - assetSubType: OTHER + title: "AgThing Water Device V2" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" required: true contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" responses: - 204: - $ref: '#/components/responses/AssetPut' - 400: - $ref: '#/components/responses/400' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 415: - $ref: '#/components/responses/415' - 429: - $ref: '#/components/responses/429' + "204": + $ref: "#/components/responses/AssetPut" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "415": + $ref: "#/components/responses/415" + "429": + $ref: "#/components/responses/429" delete: tags: - - Asset - summary: Delete an Asset - description: This endpoint will delete an asset by its unique id. + - "Asset" + summary: "Delete an Asset" + description: "This endpoint will delete an asset by its unique id." security: - - OAuth2: [ eq2 ] + - OAuth2: + - "eq2" parameters: - - $ref: '#/components/parameters/AssetId' + - $ref: "#/components/parameters/AssetId" responses: - 204: - description: Success. + "204": + description: "Success." content: application/vnd.deere.axiom.v3+json: examples: No Header: - description: '204 No Content' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 429: - $ref: '#/components/responses/429' + description: "204 No Content" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "429": + $ref: "#/components/responses/429" /assets/{assetId}/locations: get: tags: - - Asset Location - summary: Get all locations for an asset - operationId: getAssetLocations + - "Asset Location" + summary: "Get all locations for an asset" + operationId: "getAssetLocations" security: - - OAuth2: [ eq1 ] - description: 'This endpoint will retrieve all locations for an asset. If you provide startDate and endDate then it will retrieve all the results of the given time range.' - note: 'Note: This API does not support eTags.' + - OAuth2: + - "eq1" + description: "This endpoint will retrieve all locations for an asset. If you provide startDate and endDate then it will retrieve all the results of the given time range." + note: "Note: This API does not support eTags." parameters: - - $ref: '#/components/parameters/AssetId2' - - $ref: '#/components/parameters/StartDate' - - $ref: '#/components/parameters/EndDate' - - $ref: '#/components/parameters/Count' - - $ref: '#/components/parameters/PageKey' - + - $ref: "#/components/parameters/AssetId2" + - $ref: "#/components/parameters/StartDate" + - $ref: "#/components/parameters/EndDate" + - $ref: "#/components/parameters/Count" + - $ref: "#/components/parameters/PageKey" responses: - 200: - $ref: '#/components/responses/AssetIdGet' - 400: - $ref: '#/components/responses/400' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 429: - $ref: '#/components/responses/429' - + "200": + $ref: "#/components/responses/AssetIdGet" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "429": + $ref: "#/components/responses/429" post: tags: - - Asset Location - summary: Create new asset location - operationId: postAssetLocations + - "Asset Location" + summary: "Create new asset location" + operationId: "postAssetLocations" security: - - OAuth2: [ eq2 ] - description: 'This endpoint will create a new Asset Location.

We provide Markdown support for measurementData name.

- Please Note: Only links are supported for a measurementData name.

Additionally, Asset Locations do not honor fractional seconds in their timestamps. So 2019-01-01T12:34:56.900Z and 2019-01-01T12:34:56Z are considered equivalent.' + - OAuth2: + - "eq2" + description: "This endpoint will create a new Asset Location.

We provide Markdown support for measurementData name.

Please Note: Only links are supported for a measurementData name.

Additionally, Asset Locations do not honor fractional seconds in their timestamps. So 2019-01-01T12:34:56.900Z and 2019-01-01T12:34:56Z are considered equivalent." parameters: - - $ref: '#/components/parameters/AssetId2' + - $ref: "#/components/parameters/AssetId2" requestBody: - description: Geolocations and MeasurementData to create. + description: "Geolocations and MeasurementData to create." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/AssetIdValuePost' + $ref: "#/components/schemas/AssetIdValuePost" examples: No Header: value: - - '@type': ContributedAssetLocation - timestamp: '2017-09-17T21:29:59.000Z' - geometry: >- - {"type": "Feature", "geometry": {"geometries": [{"coordinates": [-93.776179, - 40.967857], "type": "Point"}], "type": "GeometryCollection"}} + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-17T21:29:59.000Z" + geometry: "{\"type\": \"Feature\", \"geometry\": {\"geometries\": [{\"coordinates\": [-93.776179, 40.967857], \"type\": \"Point\"}], \"type\": \"GeometryCollection\"}}" measurementData: - - '@type': BasicMeasurement - name: name of measurement data with [a link](https://www.example.com) - value: V1.3 - unit: u1 - - '@type': BasicMeasurement - name: a measurement name - value: V2.3 - unit: u2 + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.3" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.3" + unit: "u2" required: true contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" responses: - 201: - $ref: '#/components/responses/201' - 400: - $ref: '#/components/responses/400' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 409: - $ref: '#/components/responses/409' - 413: - $ref: '#/components/responses/413' - 415: - $ref: '#/components/responses/415' - 429: - $ref: '#/components/responses/429' - /assetCatalog: + "201": + $ref: "#/components/responses/201" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "409": + $ref: "#/components/responses/409" + "413": + $ref: "#/components/responses/413" + "415": + $ref: "#/components/responses/415" + "429": + $ref: "#/components/responses/429" + /organizations/{orgId}/assets: get: - summary: Get Asset Catalog List - operationId: getAssetCatalog tags: - - Asset Catalog - description: This endpoint will retrieve the Asset Catalog List. + - "Asset" + summary: "Get all assets" + operationId: "getOrgAssets" + description: "This endpoint will retrieve all assets for an organization." security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" parameters: - - $ref: '#/components/parameters/x-deere-sign' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Embed" + - $ref: "#/components/parameters/X-deere-sign" headers: - - $ref: '#/components/parameters/x-deere-sign2' + - $ref: "#/components/parameters/x-deere-sign2" responses: - 200: - description: The Asset Catalog containaing all valid entries. - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - values: - items: - $ref: '#/components/schemas/AssetCatalogGet' - examples: - No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5b5392615e4b4e1c92013026f47109bb' - value: - links: - - rel: self - uri: https://sandboxapi.deere.com/platform/assetCatalog - total: 2 - values: - - '@type': ContributedCatalogItem - assetCategory: DEVICE - assetType: SENSOR - assetSubType: ENVIRONMENTAL - links: [ ] - - '@type': ContributedCatalogItem - assetCategory: DEVICE - assetType: SENSOR - assetSubType: OTHER - links: [ ] + "200": + $ref: "#/components/responses/GetOrgId" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "406": + $ref: "#/components/responses/406" + "429": + $ref: "#/components/responses/429" + post: + tags: + - "Asset" + summary: "Create a new asset" + operationId: "postAsset" + description: "This endpoint will create a new asset." + note: "Please Note: Refer to the GET /assetCatalog API sample response for all the possible combinations of asset category, type and subtype." + security: + - OAuth2: + - "eq2" + parameters: + - $ref: "#/components/parameters/OrgId" + requestBody: + description: "Asset to be created." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/CreatePostValues" + examples: + No Header: + value: + title: "AgThing Water Sensor" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + required: true + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + responses: + "201": + $ref: "#/components/responses/CreatePost" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "415": + $ref: "#/components/responses/415" + "429": + $ref: "#/components/responses/429" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - eq1: 'eq1' - eq2: 'eq2' - schemas: - AssetCatalogItem: - required: - - assetCategory - - assetSubType - - assetType - type: object - properties: - '@type': - type: string - example: ContributedCatalogItem - assetCategory: - $ref: '#/components/schemas/AssetCategory' - assetType: - $ref: '#/components/schemas/AssetType' - assetSubType: - $ref: '#/components/schemas/AssetSubType' - links: - type: array - items: + headers: + Location: + description: "URI to the created resource" + example: "https://sandboxapi.deere.com/platform/assets/7a300c61-a663-4c2b-9ec5-967a9c5b4776/locations" + schema: + type: "string" + format: "uri" + parameters: + AssetId: + name: "assetId" + in: "path" + description: "The ID of the asset" + required: true + schema: + type: "GUID" + format: "uuid" + example: "acd3fe92-308e-4d0b-b16f-90af96cc38d0" + AssetId2: + name: "assetId" + in: "path" + description: "The ID associated with the asset." + required: true + schema: + type: "string" + format: "uuid" + example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662" + Count: + name: "count" + in: "query" + description: "The number of results to include in the response. Must be a positive value greater than or equal to 1. Max 500. Default 500." + schema: + example: 250 + type: "string" + format: "string" + Embed: + name: "embed" + in: "query" + description: "Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included." + schema: + type: "string" + example: "lastKnownLocation" + EndDate: + name: "endDate" + in: "query" + description: "Retrieves results that occurred before (inclusive) a specified date. The format is in the ISO 8601 Standard.
Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time." + schema: + example: "2017-09-18T20:29:59.000Z" + type: "datetime" + format: "date-time" + OrgId: + name: "orgId" + in: "path" + description: "The ID of the organization" + required: true + schema: + example: 1234 + type: "string" + minimum: 1 + format: "int64" + PageKey: + name: "pageKey" + in: "query" + description: "A query param returned by the server in the nextPage link if there are more results for your query than were returned in the response." + schema: + type: "string" + format: "string" + example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662,1970-01-01T00:00:00Z" + StartDate: + name: "startDate" + in: "query" + required: false + description: "Retrieves results that occurred after (inclusive) a specified date. The format is in the ISO 8601 Standard.
Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time." + schema: + example: "2017-09-18T20:29:59.000Z" + type: "datetime" + format: "date-time" + X-deere-sign: + name: "x-deere-signature" + in: "header" + description: "See eTags for more information." + schema: + type: "string" + example: "927392615e4b4e1c12458026f47109bb" + x-deere-sign: + name: "x-deere-signature" + in: "header" + description: "See eTags for more information." + schema: + type: "string" + example: "abc392615e4b4e1c1245-8026f47109bb" + x-deere-sign2: + name: "x-deere-signature" + description: "See eTags for more information." + schema: + type: "string" + example: "5b5392615e4b4e1c92013026f47109bb" + responses: + "201": + description: "Request" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "201 Created
Location: https://sandboxapi.deere.com/platform/assets/beb295d0-48ec-47f9-9fce-0dd52107c662/locations" + "400": + description: "The request body was malformed or the given query parameters were invalid. For example, it was missing a required field or supplied a read-only value." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/400Errors" + "401": + description: "The user's OAuth credentials are not recognized by the server." + "403": + description: "The user does not have access to the requested resource." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "404": + description: "The specified resource was not found on the server." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "406": + description: "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request." + "409": + description: "The timestamp on the provided location conflicts with a previously provided location." + "413": + description: "The payload is too large. The max payload size is 100KB." + "415": + description: "The server refuses to accept the request because the payload format is in an unsupported format." + "429": + description: "The user has sent too many requests in a given amount of time." + AssetGet: + description: "The Asset." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" properties: - rel: - type: string - description: Links relavent to exploring the collection. - example: self - uri: - type: string - description: The URI to the related resource. - format: uri - example: 'https://sandboxapi.deere.com/platform/resources/61265' - MeasurementData: - required: - - name - - value - - unit - type: object - properties: - name: - description: representation for which to capture data sandardized via the [ADAPT Representation System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/RepresentationSystem.xml) - type: string - example: vrSoilTemperature - value: - description: measurement reading - type: string - example: "46.2" - unit: - description: unit of measure - the basis for any conversion sandardized via the [ADAPT Unit System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/UnitSystem.xml) - type: string - example: F - AssetCategory: - type: string - example: DEVICE - AssetType: - type: string - example: SENSOR - AssetSubType: - type: string - example: ENVIRONMENTAL + links: + items: + $ref: "#/components/schemas/AssetCollectionGetLink2" + values: + items: + $ref: "#/components/schemas/AssetGetValues" + examples: + No Header: + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "ContributedAsset" + title: "AgThing Water Device" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + lastModifiedDate: "2018-01-31T20:19:40.988Z" + id: "ASSET_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "locations" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" + AssetIdGet: + description: "The Asset Locations" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + values: + items: + $ref: "#/components/schemas/AssetIdValue" + examples: + No Header: + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json

Note: By default, all location data for the asset is returned." + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations?startDate=2017-09-18T20%3A29%3A59.000Z&endDate=2017-09-18T23%3A29%3A59.000Z" + total: 3 + values: + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-18T22:49:59.000Z" + geometry: + type: "Feature" + geometry: + geometries: + - coordinates: + - -93.776179 + - 40.967857 + type: "Point" + type: "GeometryCollection" + measurementData: + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.3" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.3" + unit: "u2" + links: [] + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-18T22:29:59.000Z" + geometry: + type: "Feature" + geometry: + geometries: + - coordinates: + - -93.776179 + - 40.967857 + type: "Point" + type: "GeometryCollection" + measurementData: + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.4" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.4" + unit: "u2" + links: [] + - "@type": "ContributedAssetLocation" + timestamp: "2017-09-18T21:29:59.000Z" + geometry: + type: "Feature" + geometry: + geometries: + - coordinates: + - -93.776179 + - 40.967857 + type: "Point" + type: "GeometryCollection" + measurementData: + - "@type": "BasicMeasurement" + name: "name of measurement data with [a link](https://www.example.com)" + value: "V1.5" + unit: "u1" + - "@type": "BasicMeasurement" + name: "a measurement name" + value: "V2.5" + unit: "u2" + links: [] + AssetLocation: + description: "The Asset Location." + content: + "*/*": + schema: + type: "array" + items: + $ref: "#/components/schemas/AssetLocation" + AssetPut: + description: "Success" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + examples: + Headers: + description: "204 No Content

Date: Tue, 31 May 2016 08:49:20 GMT
Content-Encoding: gzip
Server: Apache-Coyote/1.1 ADRUM_0: g:ec9c31ed-7102-4117-832e-f6986dc31665
X-Deere-Elapsed-Ms: 449
X-Frame-Options: SAMEORIGIN
ADRUM_1: i:3472
Content-Type: text/plain
ADRUM_2: e:129
ADRUM_3: d:467
Connection: Keep-Alive
Keep-Alive: timeout=5, max=98
Content-Length: 0
X-Deere-Handling-Server: ldxx90tc5" + CreatePost: + description: "Create" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + examples: + Headers: + description: "201 Created
Location: https://sandboxapi.deere.com/platform/assets/abx6f24c-2d91-40bd-70e6-0137e6ccbfb0" + Created: + description: "Created." + headers: + Location: + description: "https://sandboxapi.deere.com/platform/asset/1234" + schema: + type: "string" + GetOrgId: + description: "A collection of Assets" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/AssetCollectionGetLink" + values: + items: + $ref: "#/components/schemas/AssetCollectionGetValue" + examples: + No Header: + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/assets" + total: 1 + values: + - "@type": "ContributedAsset" + title: "AgThing Water Device" + assetCategory: "DEVICE" + assetType: "SENSOR" + assetSubType: "OTHER" + lastModifiedDate: "2018-01-31T20:36:16.727Z" + id: "ASSET_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "locations" + uri: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" + Success: + description: "Success." + schemas: 400Errors: properties: - '@type': - type: string - example: Errors + "@type": + type: "string" + example: "Errors" errors: - type: array + type: "array" items: properties: - '@type': - type: string - example: Error + "@type": + type: "string" + example: "Error" guid: - type: string - format: uuid - example: ed292512-1f3c-4285-83c3-1fb084423f9b + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" message: - type: string - example: This field is required. + type: "string" + example: "This field is required." code: - type: string - example: validation_constraint_required_field + type: "string" + example: "validation_constraint_required_field" field: - type: string - example: title + type: "string" + example: "title" otherAttributes: - type: object - GenericErrors: - properties: - '@type': - type: string - example: Errors - errors: - type: array - items: - properties: - '@type': - type: string - example: Error - guid: - type: string - format: uuid - example: ed292512-1f3c-4285-83c3-1fb084423f9b - message: - type: string - example: some error message - otherAttributes: - type: object - CollectionBase: - type: object - properties: - links: - type: array - items: - properties: - rel: - type: string - description: Links relavent to exploring the collection. - example: self - uri: - type: string - description: The URI to the related resource. - format: uri - example: 'https://sandboxapi.deere.com/platform/resources/61265' - total: - type: number - example: 1 - AssetCollection: - type: object + type: "object" + Asset: allOf: - - $ref: '#/components/schemas/CollectionBase' - - properties: - values: - type: array - items: - $ref: '#/components/schemas/Asset' - AssetLocationCollection: - type: object + - $ref: "#/components/schemas/UpdateAsset" + - type: "object" + properties: + lastModifiedDate: + type: "string" + description: "A timestamp of the date and time the last operation was performed on this item." + format: "date-time" + readOnly: true + lastKnownLocation: + $ref: "#/components/schemas/LastKnownLocation" + AssetCatalogCollection: + type: "object" allOf: - - $ref: '#/components/schemas/CollectionBase' + - $ref: "#/components/schemas/CollectionBase" - properties: values: - type: array + type: "array" items: - $ref: '#/components/schemas/AssetLocation' - AssetLocationBase: - required: - - timestamp - type: object + $ref: "#/components/schemas/AssetCatalogItem" + AssetCatalogGet: properties: - '@type': - type: string - example: ContributedAssetLocation - timestamp: - description: ISO 8601 Date and time in UTC the `measurementData` and/or `geometry` were recorded by the Asset - example: '2019-07-12T21:29:50.000Z' - type: string - format: date-time - geometry: - type: string - description: stringified [GeoJSON Point (RFC 7946)](https://tools.ietf.org/html/rfc7946#section-3.1.2) identifying the Asset geolocation - example: '{ "type": "Feature", "geometry": { "geometries": [ { "coordinates": - [ -94.5609911, 42.3428859 ], "type": "Point" } ], "type": "GeometryCollection" - } }' - measurementData: - type: array - items: - $ref: '#/components/schemas/MeasurementData' - AssetLocation: - allOf: - - $ref: '#/components/schemas/AssetLocationBase' - description: A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes. - Either `geometry` or `measurementData` is required and both are allowed. - LastKnownLocation: - allOf: - - $ref: '#/components/schemas/AssetLocationBase' - description: The Asset Location with the most recent `timestamp` - UpdateAsset: - allOf: - - type: object - properties: - id: - type: string - format: uuid - description: The ID of the Asset. Optional, but if included it must match the URL parameter for Asset Id. - example: b9d96332-93c7-44ae-ac86-eed8727f13c7 - - $ref: '#/components/schemas/CreateAsset' - CreateAsset: + assetCategory: + description: "Asset Category" + example: "DEVICE" + type: "string" + assetType: + description: "Asset Type" + example: "SENSOR" + type: "string" + assetSubType: + description: "Asset Sub Type" + example: "OTHER" + type: "string" + AssetCatalogItem: required: - - title - - assetCategory - - assetType - - assetSubType - - links - type: object - description: A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements + - "assetCategory" + - "assetSubType" + - "assetType" + type: "object" properties: - '@type': - type: string - example: ContributedAsset - title: - type: string - description: The name of the Asset. - example: McGill 7000 + "@type": + type: "string" + example: "ContributedCatalogItem" assetCategory: - $ref: '#/components/schemas/AssetCategory' + $ref: "#/components/schemas/AssetCategory" assetType: - $ref: '#/components/schemas/AssetType' + $ref: "#/components/schemas/AssetType" assetSubType: - $ref: '#/components/schemas/AssetSubType' - # links: - # type: array - # items: - # $ref: '#/components/schemas/ContributionDefinitionLink' - Asset: + $ref: "#/components/schemas/AssetSubType" + links: + type: "array" + items: + properties: + rel: + type: "string" + description: "Links relavent to exploring the collection." + example: "self" + uri: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://sandboxapi.deere.com/platform/resources/61265" + AssetCategory: + type: "string" + example: "DEVICE" + AssetCollection: + type: "object" allOf: - - $ref: '#/components/schemas/UpdateAsset' - - type: object - properties: - # links: - # type: array - # description: This is the list of related resources to an Asset, which should include - # `organization`, `contributionDefinition`, `locations`, and `lastKnownLocation` - # items: - # $ref: '#/components/schemas/ContributionDefinitionLink' - lastModifiedDate: - type: string - description: A timestamp of the date and time the last operation was performed on this item. - format: date-time - readOnly: true - lastKnownLocation: - $ref: '#/components/schemas/LastKnownLocation' + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Asset" AssetCollectionGetLink: properties: self: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID/assets - description: This Asset List Link. - # contributionDefinition: - # example: https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - # description: Contribution Definition Link. + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/assets" + description: "This Asset List Link." organization: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID - description: Organizations Link. + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." locations: - example: https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations - description: Link to get location data for the asset. + example: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" + description: "Link to get location data for the asset." AssetCollectionGetLink2: properties: - # contributionDefinition: - # example: https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - # description: Contribution Definition Link. organization: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID - description: Organizations Link. + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." locations: - example: https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations - description: Link to get location data for the asset. + example: "https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations" + description: "Link to get location data for the asset." AssetCollectionGetValue: properties: links: - description: Links to related resources in the Deere ecosystem. - example: See "Available Links" below - type: array + description: "Links to related resources in the Deere ecosystem." + example: "See \"Available Links\" below" + type: "array" total: - description: Count of Assets in response - example: '3' - type: number + description: "Count of Assets in response" + example: "3" + type: "number" values: - description: The primary resource listing. - example: '---' - type: Asset array + description: "The primary resource listing." + example: "---" + type: "Asset array" Asset Details: properties: id: - description: The ID of the asset. - example: ab2c95d0-48ec-47f9-9fce-9ff42107c662 - type: GUID + description: "The ID of the asset." + example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662" + type: "GUID" title: - description: The name of the asset. - example: Water sensor - type: string + description: "The name of the asset." + example: "Water sensor" + type: "string" assetCategory: - description: Asset Category - example: DEVICE - type: string + description: "Asset Category" + example: "DEVICE" + type: "string" assetType: - description: Asset Type - example: SENSOR - type: string + description: "Asset Type" + example: "SENSOR" + type: "string" assetSubType: - description: Asset Sub Type - example: OTHER - type: string + description: "Asset Sub Type" + example: "OTHER" + type: "string" lastModifiedDate: - description: A timestamp of the date and time the last operation was performed on this item. All timestamps follow the ISO 8601 standard format. - example: 2015-04-30T10:23:50.000Z - type: datetime + description: "A timestamp of the date and time the last operation was performed on this item. All timestamps follow the ISO 8601 standard format." + example: "2015-04-30T10:23:50.000Z" + type: "datetime" lastKnownLocation: - description: The Asset Location with the most recent timestamp. Included if embed is requested. - example: See sample response below - type: Location object - - CreatePostLink: - properties: - contributionDefinition: - description: Contribution Definition Link. - example: https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - CreatePostValues: - properties: - title: - description: The name of the asset. - example: Water Sensor - type: string - assetCategory: - description: Asset Category - example: DEVICE - type: string - assetType: - description: Asset Type - example: SENSOR - type: string - assetSubType: - description: Asset Sub Type - example: OTHER - type: string + description: "The Asset Location with the most recent timestamp. Included if embed is requested." + example: "See sample response below" + type: "Location object" AssetGetValues: properties: id: - description: The ID of the asset. - example: ab2c95d0-48ec-47f9-9fce-9ff42107c662 - type: GUID + description: "The ID of the asset." + example: "ab2c95d0-48ec-47f9-9fce-9ff42107c662" + type: "GUID" title: - description: The name of the asset. - example: Water sensor - type: string + description: "The name of the asset." + example: "Water sensor" + type: "string" assetCategory: - description: Asset Category - example: DEVICE - type: string + description: "Asset Category" + example: "DEVICE" + type: "string" assetType: - description: Asset Type - example: SENSOR - type: string + description: "Asset Type" + example: "SENSOR" + type: "string" assetSubType: - description: Asset Sub Type - example: OTHER - type: string + description: "Asset Sub Type" + example: "OTHER" + type: "string" lastModifiedDate: - description: All timestamps follow the ISO 8601 standard format. - example: 2015-04-30T10:23:50.000Z - type: datetime + description: "All timestamps follow the ISO 8601 standard format." + example: "2015-04-30T10:23:50.000Z" + type: "datetime" lastKnownLocation: - description: Location data about the asset. Included if embed is requested. - example: See sample response below - type: Location object + description: "Location data about the asset. Included if embed is requested." + example: "See sample response below" + type: "Location object" AssetIdValue: properties: timestamp: - description: All timestamps follow the ISO 8601 standard format. - type: datetime - example: '2015-04-30T10:23:50.000Z' + description: "All timestamps follow the ISO 8601 standard format." + type: "datetime" + example: "2015-04-30T10:23:50.000Z" geometry: - description: GeoJSON representation of the asset location. - example: See sample request below. + description: "GeoJSON representation of the asset location." + example: "See sample request below." measurementData: - type: 'Measurement Data array' - description: List of measurement data to be associated with the asset. - example: See sample request below + type: "Measurement Data array" + description: "List of measurement data to be associated with the asset." + example: "See sample request below" AssetIdValuePost: properties: timestamp: - description: All timestamps follow the ISO 8601 standard format. - type: datetime - example: '2015-04-30T10:23:50.000Z' + description: "All timestamps follow the ISO 8601 standard format." + type: "datetime" + example: "2015-04-30T10:23:50.000Z" geometry: - description: GeoJSON representation of the asset location. - type: string - example: See sample request below. + description: "GeoJSON representation of the asset location." + type: "string" + example: "See sample request below." measurementData: - type: 'Measurement Data array' - description: List of measurement data to be associated with the asset. - example: See sample request below - + type: "Measurement Data array" + description: "List of measurement data to be associated with the asset." + example: "See sample request below" + AssetLocation: + allOf: + - $ref: "#/components/schemas/AssetLocationBase" + description: "A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes. Either `geometry` or `measurementData` is required and both are allowed." + AssetLocationBase: + required: + - "timestamp" + type: "object" + properties: + "@type": + type: "string" + example: "ContributedAssetLocation" + timestamp: + description: "ISO 8601 Date and time in UTC the `measurementData` and/or `geometry` were recorded by the Asset" + example: "2019-07-12T21:29:50.000Z" + type: "string" + format: "date-time" + geometry: + type: "string" + description: "stringified [GeoJSON Point (RFC 7946)](https://tools.ietf.org/html/rfc7946#section-3.1.2) identifying the Asset geolocation" + example: "{ \"type\": \"Feature\", \"geometry\": { \"geometries\": [ { \"coordinates\": [ -94.5609911, 42.3428859 ], \"type\": \"Point\" } ], \"type\": \"GeometryCollection\" } }" + measurementData: + type: "array" + items: + $ref: "#/components/schemas/MeasurementData" + AssetLocationCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/AssetLocation" + AssetSubType: + type: "string" + example: "ENVIRONMENTAL" + AssetType: + type: "string" + example: "SENSOR" + CollectionBase: + type: "object" + properties: + links: + type: "array" + items: + properties: + rel: + type: "string" + description: "Links relavent to exploring the collection." + example: "self" + uri: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://sandboxapi.deere.com/platform/resources/61265" + total: + type: "number" + example: 1 ContributionDefinitionLink: - type: object + type: "object" properties: - '@type': - type: string - example: Link + "@type": + type: "string" + example: "Link" rel: - type: string - description: The relation of the object to the linked resource. - example: contributionDefinition + type: "string" + description: "The relation of the object to the linked resource." + example: "contributionDefinition" uri: - type: string - description: The URI to the related resource. - format: uri - example: https://sandboxapi.deere.com/platform/contributionDefinitions/34973a25-75c0-48a9-a414-7d61587b3e37 - AssetCatalogGet: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/34973a25-75c0-48a9-a414-7d61587b3e37" + CreateAsset: + required: + - "title" + - "assetCategory" + - "assetType" + - "assetSubType" + - "links" + type: "object" + description: "A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements" properties: + "@type": + type: "string" + example: "ContributedAsset" + title: + type: "string" + description: "The name of the Asset." + example: "McGill 7000" assetCategory: - description: Asset Category - example: DEVICE - type: string + $ref: "#/components/schemas/AssetCategory" assetType: - description: Asset Type - example: SENSOR - type: string + $ref: "#/components/schemas/AssetType" assetSubType: - description: Asset Sub Type - example: OTHER - type: string - - AssetCatalogCollection: - type: object - allOf: - - $ref: '#/components/schemas/CollectionBase' - - properties: - values: - type: array - items: - $ref: '#/components/schemas/AssetCatalogItem' - responses: - - GetOrgId: - description: A collection of Assets - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - properties: - links: - items: - $ref: '#/components/schemas/AssetCollectionGetLink' - values: - items: - $ref: '#/components/schemas/AssetCollectionGetValue' - examples: - No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5b5392615e4b4e1c92013026f47109bb' - value: - links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID/assets - total: 1 - values: - - '@type': ContributedAsset - title: AgThing Water Device - assetCategory: DEVICE - assetType: SENSOR - assetSubType: OTHER - lastModifiedDate: '2018-01-31T20:36:16.727Z' - id: ASSET_ID - links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/assets/ASSET_ID - # - '@type': Link - # rel: contributionDefinition - # uri: >- - # https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - - '@type': Link - rel: organization - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID - - '@type': Link - rel: locations - uri: https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations - CreatePost: - description: Create - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - examples: - Headers: - description: '201 Created
Location: https://sandboxapi.deere.com/platform/assets/abx6f24c-2d91-40bd-70e6-0137e6ccbfb0' - - AssetGet: - description: The Asset. - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - properties: - links: - items: - $ref: '#/components/schemas/AssetCollectionGetLink2' - values: - items: - $ref: '#/components/schemas/AssetGetValues' - examples: - No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json' - value: - '@type': ContributedAsset - title: AgThing Water Device - assetCategory: DEVICE - assetType: SENSOR - assetSubType: OTHER - lastModifiedDate: '2018-01-31T20:19:40.988Z' - id: ASSET_ID - links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/assets/ASSET_ID - # - '@type': Link - # rel: contributionDefinition - # uri: >- - # https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - - '@type': Link - rel: organization - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID - - '@type': Link - rel: locations - uri: https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations - AssetPut: - description: Success - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - examples: - Headers: - description: '204 No Content
-
- Date: Tue, 31 May 2016 08:49:20 GMT
- Content-Encoding: gzip
- Server: Apache-Coyote/1.1 - ADRUM_0: g:ec9c31ed-7102-4117-832e-f6986dc31665
- X-Deere-Elapsed-Ms: 449
- X-Frame-Options: SAMEORIGIN
- ADRUM_1: i:3472
- Content-Type: text/plain
- ADRUM_2: e:129
- ADRUM_3: d:467
- Connection: Keep-Alive
- Keep-Alive: timeout=5, max=98
- Content-Length: 0
- X-Deere-Handling-Server: ldxx90tc5' - - AssetIdGet: - description: The Asset Locations - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object + $ref: "#/components/schemas/AssetSubType" + CreatePostLink: + properties: + contributionDefinition: + description: "Contribution Definition Link." + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID" + CreatePostValues: + properties: + title: + description: "The name of the asset." + example: "Water Sensor" + type: "string" + assetCategory: + description: "Asset Category" + example: "DEVICE" + type: "string" + assetType: + description: "Asset Type" + example: "SENSOR" + type: "string" + assetSubType: + description: "Asset Sub Type" + example: "OTHER" + type: "string" + GenericErrors: + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: properties: - values: - items: - $ref: '#/components/schemas/AssetIdValue' - examples: - No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json

Note: By default, all location data for the asset is returned.' - value: - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/assets/ASSET_ID/locations?startDate=2017-09-18T20%3A29%3A59.000Z&endDate=2017-09-18T23%3A29%3A59.000Z - total: 3 - values: - - '@type': ContributedAssetLocation - timestamp: '2017-09-18T22:49:59.000Z' - geometry: - type: Feature - geometry: - geometries: - - coordinates: - - -93.776179 - - 40.967857 - type: Point - type: GeometryCollection - measurementData: - - '@type': BasicMeasurement - name: name of measurement data with [a link](https://www.example.com) - value: V1.3 - unit: u1 - - '@type': BasicMeasurement - name: a measurement name - value: V2.3 - unit: u2 - links: [ ] - - '@type': ContributedAssetLocation - timestamp: '2017-09-18T22:29:59.000Z' - geometry: - type: Feature - geometry: - geometries: - - coordinates: - - -93.776179 - - 40.967857 - type: Point - type: GeometryCollection - measurementData: - - '@type': BasicMeasurement - name: name of measurement data with [a link](https://www.example.com) - value: V1.4 - unit: u1 - - '@type': BasicMeasurement - name: a measurement name - value: V2.4 - unit: u2 - links: [ ] - - '@type': ContributedAssetLocation - timestamp: '2017-09-18T21:29:59.000Z' - geometry: - type: Feature - geometry: - geometries: - - coordinates: - - -93.776179 - - 40.967857 - type: Point - type: GeometryCollection - measurementData: - - '@type': BasicMeasurement - name: name of measurement data with [a link](https://www.example.com) - value: V1.5 - unit: u1 - - '@type': BasicMeasurement - name: a measurement name - value: V2.5 - unit: u2 - links: [ ] - - - 201: - description: 'Request' - content: - application/vnd.deere.axiom.v3+json: - examples: - Headers: - description: '201 Created
- Location: https://sandboxapi.deere.com/platform/assets/beb295d0-48ec-47f9-9fce-0dd52107c662/locations' - 400: - description: The request body was malformed or the given query parameters were invalid. For example, it was missing a required field or supplied a read-only value. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/400Errors' - 401: - description: The user's OAuth credentials are not recognized by the server. - 403: - description: The user does not have access to the requested resource. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/GenericErrors' - 404: - description: The specified resource was not found on the server. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/GenericErrors' - 406: - description: The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request. - 409: - description: The timestamp on the provided location conflicts with a previously provided location. - 413: - description: The payload is too large. The max payload size is 100KB. - 415: - description: The server refuses to accept the request because the payload format is in an unsupported format. - 429: - description: The user has sent too many requests in a given amount of time. - AssetLocation: - description: The Asset Location. - content: - '*/*': - schema: - type: array - items: - $ref: '#/components/schemas/AssetLocation' - Success: - description: Success. - Created: - description: Created. - headers: - Location: - description: https://sandboxapi.deere.com/platform/asset/1234 - schema: - type: string - headers: - Location: - description: URI to the created resource - example: https://sandboxapi.deere.com/platform/assets/7a300c61-a663-4c2b-9ec5-967a9c5b4776/locations - schema: - type: string - format: uri - parameters: - OrgId: - name: orgId - in: path - description: The ID of the organization - required: true - schema: - example: 1234 - type: string - minimum: 1 - format: int64 - Embed: - name: embed - in: query - description: Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included. - schema: - type: string - example: lastKnownLocation - X-deere-sign: - name: x-deere-signature - in: header - description: See eTags for more information. - schema: - type: string - example: 927392615e4b4e1c12458026f47109bb - x-deere-sign: - name: x-deere-signature - in: header - description: See eTags for more information. - schema: - type: string - example: abc392615e4b4e1c1245-8026f47109bb - x-deere-sign2: - name: x-deere-signature - description: See eTags for more information. - schema: - type: string - example: 5b5392615e4b4e1c92013026f47109bb - - AssetId: - name: assetId - in: path - description: The ID of the asset - required: true - schema: - type: GUID - format: uuid - example: acd3fe92-308e-4d0b-b16f-90af96cc38d0 - AssetId2: - name: assetId - in: path - description: The ID associated with the asset. - required: true - schema: - type: string - format: uuid - example: ab2c95d0-48ec-47f9-9fce-9ff42107c662 - StartDate: - name: startDate - in: query - required: false - description: 'Retrieves results that occurred after (inclusive) a specified date. The format is in the ISO 8601 Standard.
Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time.' - schema: - example: '2017-09-18T20:29:59.000Z' - type: datetime - format: date-time - EndDate: - name: endDate - in: query - description: 'Retrieves results that occurred before (inclusive) a specified date. The format is in the ISO 8601 Standard.
Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time.' - schema: - example: '2017-09-18T20:29:59.000Z' - type: datetime - format: date-time - PageKey: - name: pageKey - in: query - description: A query param returned by the server in the nextPage link if there are more results for your query than were returned in the response. - schema: - type: string - format: string - example: ab2c95d0-48ec-47f9-9fce-9ff42107c662,1970-01-01T00:00:00Z - Count: - name: count - in: query - description: The number of results to include in the response. Must be a positive value greater than or equal to 1. Max 500. Default 500. - schema: - example: 250 - type: string - format: string - + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" + message: + type: "string" + example: "some error message" + otherAttributes: + type: "object" + LastKnownLocation: + allOf: + - $ref: "#/components/schemas/AssetLocationBase" + description: "The Asset Location with the most recent `timestamp`" + MeasurementData: + required: + - "name" + - "value" + - "unit" + type: "object" + properties: + name: + description: "representation for which to capture data sandardized via the [ADAPT Representation System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/RepresentationSystem.xml)" + type: "string" + example: "vrSoilTemperature" + value: + description: "measurement reading" + type: "string" + example: "46.2" + unit: + description: "unit of measure - the basis for any conversion sandardized via the [ADAPT Unit System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/UnitSystem.xml)" + type: "string" + example: "F" + UpdateAsset: + allOf: + - type: "object" + properties: + id: + type: "string" + format: "uuid" + description: "The ID of the Asset. Optional, but if included it must match the URL parameter for Asset Id." + example: "b9d96332-93c7-44ae-ac86-eed8727f13c7" + - $ref: "#/components/schemas/CreateAsset" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" + eq2: "eq2" diff --git a/specs/raw/boundaries.yaml b/specs/raw/boundaries.yaml index b2f67da..0be4fb1 100644 --- a/specs/raw/boundaries.yaml +++ b/specs/raw/boundaries.yaml @@ -1,1503 +1,1459 @@ -openapi: 3.0.0 +openapi: "3.0.0" info: - title: Boundaries API - description: Provides boundary management within a field context. Management - capabilities include creating, retrieving, editing, and archiving boundaries. + title: "Boundaries API" + description: "Provides boundary management within a field context. Management capabilities include creating, retrieving, editing, and archiving boundaries." version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - partnerapi - - sandboxapi - - apicert - - partnerapicert - - apiqa.tal - - partnerapiqa - - sandboxapiqa - + - "api" + - "partnerapi" + - "sandboxapi" + - "apicert" + - "partnerapicert" + - "apiqa.tal" + - "partnerapiqa" + - "sandboxapiqa" paths: + /fieldOperations/{operationId}/boundary: + get: + summary: "Generate a Boundary from a FieldOperation" + description: "Given a field operation, this endpoint will generate and return a boundary that surrounds the area worked by that field operation. Any gaps in that field operation will be treated as interior rings. This endpoint returns the generated boundary, giving you the opportunity to change the boundary name, clean up any unwanted interiors, etc. before POST'ing the generated boundary back into Operations Center.

There are two cases where this API will return an HTTP 400 - Bad Request:

  • If the field already has an active boundary. In this case, please use the existing boundary - it is likely more accurate than a generated boundary.
  • If the field has been merged. In this case, a FieldOperation may only cover one part of the merged field, resulting in an inaccurate boundary.
" + headers: + - $ref: "#/components/parameters/Accept-UOM-System" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/responses/BoundariesResponse2" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" /organizations/{orgId}/boundaries: get: - summary: View Boundaries in an Org - description: 'View boundaries in an organization. -
    -
  • fields: View the field associated with these boundaries.
  • -
  • owningOrganizations: View the organization that owns the field.
  • -
' + summary: "View Boundaries in an Org" + description: "View boundaries in an organization.
  • fields: View the field associated with these boundaries.
  • owningOrganizations: View the organization that owns the field.
" parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Embed' - - $ref: '#/components/parameters/RecordFilter' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Embed" + - $ref: "#/components/parameters/RecordFilter" headers: - - $ref: '#/components/parameters/Accept-UOM-System' + - $ref: "#/components/parameters/Accept-UOM-System" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" responses: - 200: - $ref: '#/components/responses/BoundariesResponse' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' - + "200": + $ref: "#/components/responses/BoundariesResponse" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" /organizations/{orgId}/fields/{fieldId}/boundaries: get: - summary: View the Boundaries of a Field - description: 'View the boundaries of a specified field.' + summary: "View the Boundaries of a Field" + description: "View the boundaries of a specified field." parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Id' - - $ref: '#/components/parameters/Embed' - - $ref: '#/components/parameters/RecordFilter' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/Embed" + - $ref: "#/components/parameters/RecordFilter" headers: - - $ref: '#/components/parameters/Accept-UOM-System' + - $ref: "#/components/parameters/Accept-UOM-System" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" responses: - 200: - $ref: '#/components/responses/BoundariesResponse' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/BoundariesResponse" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" post: - summary: Create a Boundary - description: Create a boundary with a geometry collection for a field. + summary: "Create a Boundary" + description: "Create a boundary with a geometry collection for a field." parameters: - - $ref: '#/components/parameters/OrgId2' - - $ref: '#/components/parameters/FieldId' + - $ref: "#/components/parameters/OrgId2" + - $ref: "#/components/parameters/FieldId" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" responses: - 200: - $ref: '#/components/responses/Created' - 400: - $ref: '#/components/responses/BadRequest' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/Created" + "400": + $ref: "#/components/responses/BadRequest" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" requestBody: content: No Header: examples: No Header: - value: - '@type': Boundary - name: Boundary_Unique_Name - sourceType: External + "@type": "Boundary" + name: "Boundary_Unique_Name" + sourceType: "External" multipolygons: - - '@type': Polygon + - "@type": "Polygon" rings: - - '@type': Ring + - "@type": "Ring" points: - - '@type': Point + - "@type": "Point" lat: -17.011617912472012 lon: 73.90490448264597 - - '@type': Point + - "@type": "Point" lat: -17.323201320401324 lon: 74.16699984419307 - - '@type': Point + - "@type": "Point" lat: -17.634784728330636 lon: 74.2718379888119 - - '@type': Point + - "@type": "Point" lat: -17.16740961643667 lon: 74.00974262726481 - - '@type': Point + - "@type": "Point" lat: -16.959687344483797 lon: 73.85248541033656 - - '@type': Point + - "@type": "Point" lat: -17.011617912472012 lon: 73.90490448264597 - type: exterior + type: "exterior" passable: true active: false archived: false irrigated: false - signalType: dtiSignalTypeRTK - - /fieldOperations/{operationId}/boundary: - get: - summary: Generate a Boundary from a FieldOperation - description: "Given a field operation, this endpoint will generate and return a boundary that surrounds the area worked by that field operation. Any gaps in that field operation will be treated as interior rings. This endpoint returns the generated boundary, giving you the opportunity to change the boundary name, clean up any unwanted interiors, etc. before POST'ing the generated boundary back into Operations Center. -

There are two cases where this API will return an HTTP 400 - Bad Request:

-
    -
  • If the field already has an active boundary. In this case, please use the existing boundary - it is likely more accurate than a generated boundary.
  • -
  • If the field has been merged. In this case, a FieldOperation may only cover one part of the merged field, resulting in an inaccurate boundary.
  • -
" - headers: - - $ref: '#/components/parameters/Accept-UOM-System' - security: - - OAuth2: [ ag2 ] - responses: - 200: - $ref: '#/components/responses/BoundariesResponse2' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' - + signalType: "dtiSignalTypeRTK" /organizations/{orgId}/fields/{fieldId}/boundaries/{boundaryId}: get: - summary: Get a specific boundary - description: This endpoint will retrieve a specific boundary. + summary: "Get a specific boundary" + description: "This endpoint will retrieve a specific boundary." security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: '#/components/parameters/OrgId3' - - $ref: '#/components/parameters/FieldId2' - - $ref: '#/components/parameters/BoundaryId' + - $ref: "#/components/parameters/OrgId3" + - $ref: "#/components/parameters/FieldId2" + - $ref: "#/components/parameters/BoundaryId" responses: - 200: - $ref: '#/components/responses/BoundaryResponse' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' - + "200": + $ref: "#/components/responses/BoundaryResponse" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" put: - summary: Update a boundary - description: This endpoint will update a boundary. The shape of the object must include name, active, irrigated, sourceType, and multipolygons. All these fields can be updated, however a license is required to set sourceType to a value other than "External". If the boundary is set to active, it will mark all other boundaries in this field inactive. + summary: "Update a boundary" + description: "This endpoint will update a boundary. The shape of the object must include name, active, irrigated, sourceType, and multipolygons. All these fields can be updated, however a license is required to set sourceType to a value other than \"External\". If the boundary is set to active, it will mark all other boundaries in this field inactive." requestBody: - description: putRequest + description: "putRequest" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/requestBodies/PutRequest' + $ref: "#/components/requestBodies/PutRequest" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" parameters: - - $ref: '#/components/parameters/OrgId3' - - $ref: '#/components/parameters/FieldId2' - - $ref: '#/components/parameters/BoundaryId' + - $ref: "#/components/parameters/OrgId3" + - $ref: "#/components/parameters/FieldId2" + - $ref: "#/components/parameters/BoundaryId" responses: - 200: - $ref: '#/components/responses/Update' - 400: - $ref: '#/components/responses/BadRequest' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/Update" + "400": + $ref: "#/components/responses/BadRequest" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" delete: - summary: Delete a boundary - description: This endpoint will delete a boundary. + summary: "Delete a boundary" + description: "This endpoint will delete a boundary." security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" parameters: - - $ref: '#/components/parameters/OrgId3' - - $ref: '#/components/parameters/FieldId2' - - $ref: '#/components/parameters/BoundaryId' + - $ref: "#/components/parameters/OrgId3" + - $ref: "#/components/parameters/FieldId2" + - $ref: "#/components/parameters/BoundaryId" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" responses: - 200: - $ref: '#/components/responses/NoContent' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' - + "200": + $ref: "#/components/responses/NoContent" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag1: 'ag1' - ag2: 'ag2' - ag3: 'ag3' parameters: - OrgId: - name: orgId - in: path - description: Organization - required: true + Accept-UOM-System: + name: "Accept-UOM-System" + description: "Takes METRIC and ENGLISH. Converts measurements to the chosen system." + required: false + in: "METRIC" schema: - type: string - format: int64 - example: 1234 - OrgId3: - name: orgId - in: path - description: Organization - required: true + type: "string" + example: "METRIC" + AcceptUOMSystem: + name: "Accept-UOM-System" + in: "header" + description: "Takes METRIC and ENGLISH. Converts measurements to the chosen system." + required: false schema: - type: string - format: int64 - example: 654321 - Accept-UOM-System: - name: Accept-UOM-System - description: 'Takes METRIC and ENGLISH. Converts measurements to the chosen system.' + type: "string" + enum: + - "ENGLISH" + - "METRIC" + example: "METRIC" + Active: + name: "activeOnly" + in: "query" + description: "Allows filtering based on active boundaries" required: false - in: METRIC schema: - type: string - example: METRIC - OrgId2: - name: orgId - in: path - description: Organization ID + type: "boolean" + default: false + BoundaryId: + name: "boundaryId" + in: "path" + description: "Boundary Id" required: true schema: - type: string - format: int64 - example: 1234 + example: "e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" + type: "GUID" Embed: - name: embed - in: query - description: Populates response with data lineage information + name: "embed" + in: "query" + description: "Populates response with data lineage information" required: false schema: - type: string - example: showRecordMetadata - format: uuid - RecordFilter: - name: recordFilter - in: query - description: Filter results based on status; defaults to active + type: "string" + example: "showRecordMetadata" + format: "uuid" + FieldId: + name: "fieldId" + in: "path" + description: "Field GUID" + required: true schema: - type: string - example: active, archived, all - Id: - name: id - in: path - description: Field ID + type: "GUID" + example: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + FieldId2: + name: "fieldId" + in: "path" + description: "Field Id" required: true schema: - type: GUID - format: uuid - example: a7cb723f-6707-46fb-a9ff-4e734e3daf58 - FieldId: - name: fieldId - in: path - description: Field GUID + type: "GUID" + example: "e61b83f4-3a12-431e-8010-596f2466dc27" + Id: + name: "id" + in: "path" + description: "Field ID" required: true schema: - type: GUID - example: a7cb723f-6707-46fb-a9ff-4e734e3daf58 - FieldId2: - name: fieldId - in: path - description: Field Id + type: "GUID" + format: "uuid" + example: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + OrgId: + name: "orgId" + in: "path" + description: "Organization" required: true schema: - type: GUID - example: e61b83f4-3a12-431e-8010-596f2466dc27 - BoundaryId: - name: boundaryId - in: path - description: Boundary Id + type: "string" + format: "int64" + example: 1234 + OrgId2: + name: "orgId" + in: "path" + description: "Organization ID" required: true schema: - example: e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d - type: GUID - AcceptUOMSystem: - name: Accept-UOM-System - in: header - description: 'Takes METRIC and ENGLISH. Converts measurements to the chosen system.' - required: false + type: "string" + format: "int64" + example: 1234 + OrgId3: + name: "orgId" + in: "path" + description: "Organization" + required: true schema: - type: string - enum: - - "ENGLISH" - - "METRIC" - example: "METRIC" - Active: - name: activeOnly - in: query - description: Allows filtering based on active boundaries - required: false + type: "string" + format: "int64" + example: 654321 + RecordFilter: + name: "recordFilter" + in: "query" + description: "Filter results based on status; defaults to active" schema: - type: boolean - default: false - + type: "string" + example: "active, archived, all" requestBodies: PostRequest: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Boundary' - description: Specifies Boundary details + $ref: "#/components/schemas/Boundary" + description: "Specifies Boundary details" required: true PutRequest: - type: object - description: The desired Boundary to be updated + type: "object" + description: "The desired Boundary to be updated" required: true properties: name: - type: string - example: Boundary01 - description: Boundary Name. + type: "string" + example: "Boundary01" + description: "Boundary Name." active: - type: boolean - example: 'false' - description: Indicates whether the boundary is active in this field. + type: "boolean" + example: "false" + description: "Indicates whether the boundary is active in this field." archive: - type: boolean - example: 'false' - description: Indicates whether the boundary is archived. + type: "boolean" + example: "false" + description: "Indicates whether the boundary is archived." irrigated: - type: boolean - example: 'false' - description: Indicates whether the boundary is irrigated. + type: "boolean" + example: "false" + description: "Indicates whether the boundary is irrigated." multipolygons: - description: Polygon representation of the new boundary. - example: See sample request below. + description: "Polygon representation of the new boundary." + example: "See sample request below." sourceType: - example: External - type: string - description: Describes the source of boundary (requires license to set). + example: "External" + type: "string" + description: "Describes the source of boundary (requires license to set)." signalType: - type: string - example: dtiSignalTypeRTK - description: Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." responses: + BadRequest: + description: "Request Validation failure. The boundary name must be between 1-20 characters. There must be at least one exterior ring. Each ring must have 4 or more points. The first and last point must be the same for each ring." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" BoundariesResponse: - description: A collection of boundaries + description: "A collection of boundaries" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: items: - $ref: '#/components/schemas/BoundariesLink' + $ref: "#/components/schemas/BoundariesLink" total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/BoundaryOrgId' + $ref: "#/components/schemas/BoundaryOrgId" examples: No Header: - description: '200 OK -
Content-Type: application/vnd.deere.axiom.v3+json -
x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/123456/boundaries + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/boundaries" total: 1 values: - - '@type': Boundary - id: 519dcf9a-9931-4789-9eaa-3dc7399f2840 - name: Unique_Boundary_name - sourceType: HandDrawn - createdTime: '2018-07-01T21:00:11Z' - modifiedTime: '2017-11-16T15:43:27.496Z' + - "@type": "Boundary" + id: "519dcf9a-9931-4789-9eaa-3dc7399f2840" + name: "Unique_Boundary_name" + sourceType: "HandDrawn" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2017-11-16T15:43:27.496Z" area: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 32.45477594323993 - unit: ha + unit: "ha" workableArea: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 32.45477594323993 - unit: ha + unit: "ha" multipolygons: - - '@type': Polygon + - "@type": "Polygon" rings: - - '@type': Ring + - "@type": "Ring" points: - - '@type': Point + - "@type": "Point" lat: 41.65107816712308 lon: -93.76798868179321 - - '@type': Point + - "@type": "Point" lat: 41.650821230227706 lon: -93.76928965078696 - - '@type': Point + - "@type": "Point" lat: 41.65052211771455 lon: -93.7704892896499 - - '@type': Point + - "@type": "Point" lat: 41.64998810424595 lon: -93.77184439555037 - - '@type': Point + - "@type": "Point" lat: 41.64901785518664 lon: -93.77358913421631 - - '@type': Point + - "@type": "Point" lat: 41.64780652027916 lon: -93.77499124189404 - - '@type': Point + - "@type": "Point" lat: 41.646348170121755 lon: -93.77597093582153 - - '@type': Point + - "@type": "Point" lat: 41.64513032597595 lon: -93.7765281704435 - - '@type': Point + - "@type": "Point" lat: 41.64421554942042 lon: -93.77667903900146 - - '@type': Point + - "@type": "Point" lat: 41.644111321787456 lon: -93.76941561698914 - - '@type': Point + - "@type": "Point" lat: 41.64662075564981 lon: -93.77200126647949 - - '@type': Point + - "@type": "Point" lat: 41.651158333570876 lon: -93.76485586166382 - - '@type': Point + - "@type": "Point" lat: 41.65107816712308 lon: -93.76798868179321 - type: exterior + type: "exterior" passable: true extent: - '@type': Extent + "@type": "Extent" topLeft: - '@type': Point + "@type": "Point" lat: 41.607420743 lon: -93.677587509 bottomRight: - '@type': Point + "@type": "Point" lat: 41.604179741 lon: -93.676643372 links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c - /boundaries/519dcf9a-9931-4789-9eaa-3dc7399f2840 - - '@type': Link - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c /boundaries/519dcf9a-9931-4789-9eaa-3dc7399f2840" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c" active: false irrigated: true archived: false - signalType: dtiSignalTypeRTK + signalType: "dtiSignalTypeRTK" BoundariesResponse2: - description: A collection of boundaries + description: "A collection of boundaries" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: items: - $ref: '#/components/schemas/BoundariesLink' + $ref: "#/components/schemas/BoundariesLink" total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/BoundaryOrgId2' + $ref: "#/components/schemas/BoundaryOrgId2" examples: No Header: - description: '200 OK
Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json" value: - '@type': Boundary - name: Unique_Boundary_name - sourceType: Auto - createdTime: '2017-11-16T15:43:27.496Z' - modifiedTime: '2017-11-16T15:43:27.496Z' + "@type": "Boundary" + name: "Unique_Boundary_name" + sourceType: "Auto" + createdTime: "2017-11-16T15:43:27.496Z" + modifiedTime: "2017-11-16T15:43:27.496Z" multipolygons: - - '@type': Polygon + - "@type": "Polygon" rings: - - '@type': Ring + - "@type": "Ring" points: - - '@type': Point + - "@type": "Point" lat: 41.65107816712308 lon: -93.76798868179321 - - '@type': Point + - "@type": "Point" lat: 41.650821230227706 lon: -93.76928965078696 - - '@type': Point + - "@type": "Point" lat: 41.65052211771455 lon: -93.7704892896499 - - '@type': Point + - "@type": "Point" lat: 41.64998810424595 lon: -93.77184439555037 - - '@type': Point + - "@type": "Point" lat: 41.64901785518664 lon: -93.77358913421631 - - '@type': Point + - "@type": "Point" lat: 41.64780652027916 lon: -93.77499124189404 - - '@type': Point + - "@type": "Point" lat: 41.646348170121755 lon: -93.77597093582153 - - '@type': Point + - "@type": "Point" lat: 41.64513032597595 lon: -93.7765281704435 - - '@type': Point + - "@type": "Point" lat: 41.64421554942042 lon: -93.77667903900146 - - '@type': Point + - "@type": "Point" lat: 41.644111321787456 lon: -93.76941561698914 - - '@type': Point + - "@type": "Point" lat: 41.64662075564981 lon: -93.77200126647949 - - '@type': Point + - "@type": "Point" lat: 41.651158333570876 lon: -93.76485586166382 - - '@type': Point + - "@type": "Point" lat: 41.65107816712308 lon: -93.76798868179321 - type: exterior + type: "exterior" passable: true extent: - '@type': Extent + "@type": "Extent" topLeft: - '@type': Point + "@type": "Point" lat: 41.607420743 lon: -93.677587509 bottomRight: - '@type': Point + "@type": "Point" lat: 41.604179741 lon: -93.676643372 archived: false - id: 519dcf9a-9931-4789-9eaa-3dc7399f2840 + id: "519dcf9a-9931-4789-9eaa-3dc7399f2840" links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/519dcf9a-9931-4789-9eaa-3dc7399f2840 - - '@type': Link - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/519dcf9a-9931-4789-9eaa-3dc7399f2840" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c" active: false irrigated: true - signalType: dtiSignalTypeRTK - + signalType: "dtiSignalTypeRTK" BoundaryResponse: - description: A single boundary + description: "A single boundary" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: items: - $ref: '#/components/schemas/BoundariesLink' + $ref: "#/components/schemas/BoundariesLink" total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/PostBoundaryGet' + $ref: "#/components/schemas/PostBoundaryGet" examples: No Header: - description: '200 OK
Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json" value: - '@type': Boundary - name: Unique_Boundary_name - sourceType: HandDrawn - createdTime: '2018-07-01T21:00:11Z' - modifiedTime: '2017-11-16T15:43:27.496Z' + "@type": "Boundary" + name: "Unique_Boundary_name" + sourceType: "HandDrawn" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2017-11-16T15:43:27.496Z" area: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 32.45477594323993 - unit: ha + unit: "ha" workableArea: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 32.45477594323993 - unit: ha + unit: "ha" multipolygons: - - '@type': Polygon + - "@type": "Polygon" rings: - - '@type': Ring + - "@type": "Ring" points: - - '@type': Point + - "@type": "Point" lat: 41.65107816712308 lon: -93.76798868179321 - - '@type': Point + - "@type": "Point" lat: 41.650821230227706 lon: -93.76928965078696 - - '@type': Point + - "@type": "Point" lat: 41.65052211771455 lon: -93.7704892896499 - - '@type': Point + - "@type": "Point" lat: 41.64998810424595 lon: -93.77184439555037 - - '@type': Point + - "@type": "Point" lat: 41.64901785518664 lon: -93.77358913421631 - - '@type': Point + - "@type": "Point" lat: 41.64780652027916 lon: -93.77499124189404 - - '@type': Point + - "@type": "Point" lat: 41.646348170121755 lon: -93.77597093582153 - - '@type': Point + - "@type": "Point" lat: 41.64513032597595 lon: -93.7765281704435 - - '@type': Point + - "@type": "Point" lat: 41.64421554942042 lon: -93.77667903900146 - - '@type': Point + - "@type": "Point" lat: 41.644111321787456 lon: -93.76941561698914 - - '@type': Point + - "@type": "Point" lat: 41.64662075564981 lon: -93.77200126647949 - - '@type': Point + - "@type": "Point" lat: 41.651158333570876 lon: -93.76485586166382 - - '@type': Point + - "@type": "Point" lat: 41.65107816712308 lon: -93.76798868179321 - type: exterior + type: "exterior" passable: true extent: - '@type': Extent + "@type": "Extent" topLeft: - '@type': Point + "@type": "Point" lat: 41.607420743 lon: -93.677587509 bottomRight: - '@type': Point + "@type": "Point" lat: 41.604179741 lon: -93.676643372 - id: 519dcf9a-9931-4789-9eaa-3dc7399f2840 + id: "519dcf9a-9931-4789-9eaa-3dc7399f2840" links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/519dcf9a-9931-4789-9eaa-3dc7399f2840 - - '@type': Link - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/519dcf9a-9931-4789-9eaa-3dc7399f2840" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c" active: false archived: false irrigated: true - signalType: dtiSignalTypeRTK - - Created: - description: Created, with a Location header containing the URI of the newly created resource - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - properties: - total: - type: integer - format: int32 - example: 1 - values: - type: array - items: - $ref: '#/components/schemas/PostBoundary' - examples: - Headers: - description: '201 Created
- Location: https://sandboxapi.deere.com/platform/organizations/123456/fields/109b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/96d79d34-89be-4f2b-b041-6b0181bc65db' + signalType: "dtiSignalTypeRTK" Create: - description: Created, with a Location header containing the URI of the newly created resource + description: "Created, with a Location header containing the URI of the newly created resource" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 - - Update: - description: Updated, with a Location header containing the URI of the newly created resource + Created: + description: "Created, with a Location header containing the URI of the newly created resource" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 + values: + type: "array" + items: + $ref: "#/components/schemas/PostBoundary" examples: Headers: - description: '200 OK' - + description: "201 Created
Location: https://sandboxapi.deere.com/platform/organizations/123456/fields/109b3c20-f33a-4c96-9a2c-613def198e0c/boundaries/96d79d34-89be-4f2b-b041-6b0181bc65db" + Forbidden: + description: "The user does not have sufficient privileges to access this organization's boundaries." NoContent: - description: No Content. Request Completed Succesfully. + description: "No Content. Request Completed Succesfully." content: No Content: schema: properties: {} examples: Headers: - description: '204 No Content' - - BadRequest: - description: Request Validation failure. The boundary name must be between 1-20 characters. There must be at least - one exterior ring. Each ring must have 4 or more points. The first and last point must be - the same for each ring. + description: "204 No Content" + NotFound: + description: "The specified resource does not exist" + Update: + description: "Updated, with a Location header containing the URI of the newly created resource" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Errors' - - Forbidden: - description: - The user does not have sufficient privileges to access this organization's boundaries. - - NotFound: - description: The specified resource does not exist - + type: "object" + properties: + total: + type: "integer" + format: "int32" + example: 1 + examples: + Headers: + description: "200 OK" schemas: - RecordMetadata: - type: object - description: | - Data structure for record metadata capturing information about the creation and last update of an entity. - For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). - NOTES - * Some attributes are only visible if the API Client has the required license. - * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.) - properties: - '@type': - type: string - default: RecordMetadata - example: RecordMetadata - createdByUser: - type: string - description: | - User involved in creating the entity. Only viewable with the RECORD_METADATA license - example: XYZ_USER - lastModifiedByUser: - type: string - description: | - User involved in modifying the entity. Only viewable with the RECORD_METADATA license - example: XYZ_USER - userCreationTimestamp: - type: string - description: Timestamp of entity creation - readOnly: true - example: "2018-04-30T10:23:50.000Z" - userLastModifiedTimestamp: - type: string - description: Timestamp of entity modification - readOnly: true - example: "2018-05-01T08:11:23.000Z" - createdBySourceNode: - type: string - format: uuid - description: | - This is the specific instance of an application that created the entity. At this time, it only applies - to Displays. Only viewable with the RECORD_METADATA license. - readOnly: true - example: 0235d40e-02d0-44cb-a126-fff21173fc1f - lastModifiedSourceNode: - type: string - format: uuid - description: | - This is the specific instance of an application that modified the entity. At this time, it only applies - to Displays. Only viewable with the RECORD_METADATA license - readOnly: true - example: 0235d40e-02d0-44cb-a126-fff21173fc1f - createdBySourceSystemUri: - type: string - description: | - Derived off of a client key (application that created) via Application Registry lookup. The - Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) - will be used if no source application exists. Only viewable with the RECORD_METADATA license. - readOnly: true - example: 'https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5' - lastModifiedBySourceSystemUri: - type: string - description: | - Derived off of a client key (application that did last modification) via Application Registry lookup. The - Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) - will be used if no source application exists. Only viewable with the RECORD_METADATA license. - readOnly: true - example: 'https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5' - GPSDatum: - type: object - required: - - serialNumber - properties: - '@type': - type: string - description: Identifies the class - example: "GPS Datum" - gpsDatumValue: - $ref: '#/components/schemas/GPSDatumValue' - horizontalUncertainty: - $ref: '#/components/schemas/MeasurementAsDouble' - verticalUncertainty: - $ref: '#/components/schemas/MeasurementAsDouble' - serialNumber: - type: string - example: "serialNumber" - - GPSDatumValue: - type: object - required: - - datumUuid - - currentActiveDatum - - status - - referenceDatum - properties: - '@type': - type: string - description: Identifies the class - example: "GPS Datum values" - currentActiveDatum: - type: string - example: "currentActiveDatum" - currentActiveEpochTime: - $ref: '#/components/schemas/MeasurementAsDouble' - baseLocation: - $ref: '#/components/schemas/ThreeDPoint' - status: - type: string - example: "status" - referenceDatum: - type: string - example: "referenceDatumValue" - referenceEpochTime: - $ref: '#/components/schemas/MeasurementAsDouble' - referencePositionOffsets: - $ref: '#/components/schemas/ThreeDPoint' - datumCreationTime: - $ref: '#/components/schemas/MeasurementAsDouble' - datumUuid: - type: string - description: "Unique id for this datum" - example: "205ff5ba-8d63-4a66-bbfe-b2a31ebad0d3" - - ThreeDPoint: - type: object - properties: - '@type': - type: string - description: Identifies the class - example: "3-dimensional point" - lat: - type: number - format: double - description: The latitude of the point - example: 32.118552 - lon: - type: number - format: double - description: The longitude of the point - example: -81.260776 - height: - type: number - format: double - description: The z-axis of the point - example: 1.0 - - DatumRange: - type: object - properties: - '@type': - type: string - description: Identifies the class - example: "Datum Range" - startPointIndex: - type: integer - description: "starting point index this datum applies to relative to the boundary" - format: int32 - example: 0 - endPointIndex: - type: integer - description: "ending point index this datum applies to relative to the boundary" - format: int32 - example: 127 - datum: - $ref: '#/components/schemas/GPSDatum' - - LocationSourceRange: - type: object - properties: - '@type': - type: string - description: Identifies the class - example: "Location Source Range" - startPointIndex: - type: integer - format: int32 - description: "starting point index this location source applies to relative to the boundary" - example: 0 - endPointIndex: - type: integer - format: int32 - description: "ending point index this location source applies to relative to the boundary" - example: 127 - locationSource: - type: string - description: "value of location source used" - example: "\"locationSource\": \"Computed from Rigid Kinematics\"" - - SignalTypeRange: - type: object - properties: - '@type': - type: string - description: Identifies the class - example: "Signal Type Range" - startPointIndex: - type: integer - description: "starting point index this signal type applies to relative to the boundary" - example: 0 - endPointIndex: - type: integer - description: "ending point index this signal type applies to relative to the boundary" - example: 127 - signalType: - type: string - description: "value of signal type used" - example: "\"signalType\": \"SFRTK\"" - - SnapDistanceRange: - type: object - properties: - '@type': - type: string - description: Identifies the class - example: "Snap Distance Range" - startIndex: - type: integer - description: "starting point index this snap distance applies to relative to the boundary" - example: 0 - endIndex: - type: integer - description: "ending point index this snap distance applies to relative to the boundary" - example: 127 - snapDistance: - $ref: '#/components/schemas/MeasurementAsDouble' AccuracyData: - type: object + type: "object" properties: - '@type': - type: string - description: Identifies the class + "@type": + type: "string" + description: "Identifies the class" example: "Accuracy Data" datums: - type: array + type: "array" items: - $ref: '#/components/schemas/DatumRange' + $ref: "#/components/schemas/DatumRange" locationSources: - type: array + type: "array" items: - $ref: '#/components/schemas/LocationSourceRange' + $ref: "#/components/schemas/LocationSourceRange" signalTypes: - type: array + type: "array" items: - $ref: '#/components/schemas/SignalTypeRange' + $ref: "#/components/schemas/SignalTypeRange" horizontalErrorEstimates_mm: - $ref: '#/components/schemas/MeasurementAsDouble' + $ref: "#/components/schemas/MeasurementAsDouble" snapDistanceRanges: - type: array + type: "array" items: - $ref: '#/components/schemas/SnapDistanceRange' + $ref: "#/components/schemas/SnapDistanceRange" simplificationAlgorithm: - type: string - description: This indicates the style of simplification applied to a boundary. + type: "string" + description: "This indicates the style of simplification applied to a boundary." example: "dtiBoundaryDP5InchNoMetadata" maxSnapDistance: - $ref: '#/components/schemas/MeasurementAsDouble' - Headland: - type: object - required: - - name - - parentId - - active - properties: - name: - type: string - example: "headland_name" - points: - type: array - items: - $ref: '#/components/schemas/Point' - active: - type: boolean - description: indicates if this is the active headland in a collection - - Point: - type: object - properties: - '@type': - type: string - description: Identifies the class - example: "Point" - lat: - type: number - format: double - description: The latitude of the point - example: 32.118552 - lon: - type: number - format: double - description: The longitude of the point - example: -81.260776 - Extent: - type: object - readOnly: true - properties: - '@type': - type: string - description: Identifies the class - example: "Extent" - topLeft: - $ref: '#/components/schemas/Point' - bottomRight: - $ref: '#/components/schemas/Point' - MeasurementAsDouble: - type: object - readOnly: true - properties: - '@type': - type: string - description: Identifies the class - example: "MeasurementAsDouble" - valueAsDouble: - type: number - format: double - example: 7.502938 - unit: - type: string - description: The unit of measure for this value - example: "ha" - - Polygon: - properties: - rings: - type: array - items: - type: object - properties: - id: - type: integer - description: identifier for polygon - example: 1 - parentId: - type: integer - description: id of associated ring - example: 5 - points: - type: array - items: - $ref: '#/components/schemas/Point' - 'type': - type: string - description: Describes whether this geometry is interior (e.g. a pond contained within a field) or exterior (e.g. a fence around the field) - enum: - - "interior" - - "exterior" - passable: - description: Describes whether or not a machine may travel through this geometry (e.g. a road vs a stream) - type: boolean - headlands: - description: A collection of headlands - type: array - items: - $ref: '#/components/schemas/Headland' - accuracyData: - $ref: '#/components/schemas/AccuracyData' - signalType: - type: string - description: value of signal type used - example: "dtiSignalTypeRTK" - creationMethod: - type: string - description: To determine how their boundary was generated - example: "dtiBoundaryFromWebCoverage" - - Errors: - type: object - format: Errors/DataValidationException - properties: - '@type': - type: string - example: Errors - otherAttributes: - type: object - example: { } - errors: - type: array - items: - type: object - format: Error/ConstraintViolation - properties: - '@type': - type: string - example: Error - guid: - type: string - format: uuid - message: - type: string - description: An english description of the error - example: "Duplicate boundary name" - code: - type: string - description: A string constant representing the type of error - example: "some error code" - field: - type: string - description: The name of the property or parameter deemed invalid - example: "name" - invalidValue: - type: string - description: The value that was supplied for this field in the request - example: "some boundary name" - - Link: - description: Provides a reference to an associated object or list - required: - - rel - - uri - properties: - rel: - type: string - description: The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. - example: "self" - uri: - type: string - format: uri - description: The location of the resource - example: "https://partnerapi.deere.com/platform/organizations/1/boundaries/00000000-0000-0000-0000-000000000000" - + $ref: "#/components/schemas/MeasurementAsDouble" AutonomousReady: - type: object - description: Indicates whether or not this boundary is Autonomous Ready. + type: "object" + description: "Indicates whether or not this boundary is Autonomous Ready." properties: boundaryAutonomousReady: - type: boolean - description: Flag indicating if the boundary is ready for autonomous operations + type: "boolean" + description: "Flag indicating if the boundary is ready for autonomous operations" default: false - + BoundariesLink: + properties: + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c" + description: "Fields Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organizations Link." Boundary: - type: object - + type: "object" properties: - '@type': - type: string - description: Identifies the type Boundary + "@type": + type: "string" + description: "Identifies the type Boundary" example: "Boundary" id: - description: An identifier for this boundary, which is unique within a field context - type: string - format: uuid + description: "An identifier for this boundary, which is unique within a field context" + type: "string" + format: "uuid" example: "bed69949-df25-4319-8f6c-94c62b466126" readOnly: true name: - type: string + type: "string" example: "unique_boundary_name" createdTime: - type: string + type: "string" readOnly: true - format: date-time + format: "date-time" example: "2018-07-01T21:00:11Z" modifiedTime: - description: An ISO-8601 formatted timestamp of the last modification made to this boundary - type: string - format: date-time + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary" + type: "string" + format: "date-time" example: "2016-11-17T11:53:00.000Z" area: - $ref: '#/components/schemas/MeasurementAsDouble' + $ref: "#/components/schemas/MeasurementAsDouble" workableArea: - $ref: '#/components/schemas/MeasurementAsDouble' + $ref: "#/components/schemas/MeasurementAsDouble" multipolygons: - description: A collection of polygons - type: array + description: "A collection of polygons" + type: "array" items: - $ref: '#/components/schemas/Polygon' + $ref: "#/components/schemas/Polygon" extent: - $ref: '#/components/schemas/Extent' + $ref: "#/components/schemas/Extent" active: - type: boolean - description: Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries. + type: "boolean" + description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." archived: - type: boolean - description: Indicates whether or not this boundary is archived. + type: "boolean" + description: "Indicates whether or not this boundary is archived." signalType: - type: string - description: Indicates what signalType was used to capture boundary information + type: "string" + description: "Indicates what signalType was used to capture boundary information" irrigated: - type: boolean - description: Indicates whether the contained area is irrigated + type: "boolean" + description: "Indicates whether the contained area is irrigated" sourceType: - description: sourceType of the boundary - type: string + description: "sourceType of the boundary" + type: "string" example: "driven" links: readOnly: true - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" autonomousReady: - $ref: '#/components/schemas/AutonomousReady' + $ref: "#/components/schemas/AutonomousReady" recordMetadata: - $ref: '#/components/schemas/RecordMetadata' + $ref: "#/components/schemas/RecordMetadata" BoundaryOrgId: - type: object + type: "object" properties: id: - description: Boundary ID - type: GUID - format: uuid + description: "Boundary ID" + type: "GUID" + format: "uuid" example: "6232611a-0303-0234-8g7d-e1e1e11871b8" name: - type: string + type: "string" example: "Unique_Boundary_name" - description: Boundary name + description: "Boundary name" area: - example: See sample response below. - description: Boundary area + example: "See sample response below." + description: "Boundary area" workableArea: - example: See sample response below. - description: Exteriors-interiors of the boundary. + example: "See sample response below." + description: "Exteriors-interiors of the boundary." sourceType: - description: Describes the source of boundary (requires license to set). - type: string + description: "Describes the source of boundary (requires license to set)." + type: "string" example: "HandDrawn" multipolygons: - description: Boundary shape and exact location. - example: See sample response below + description: "Boundary shape and exact location." + example: "See sample response below" type1: - description: Boundary type - type: string - example: exterior + description: "Boundary type" + type: "string" + example: "exterior" passable: - description: '"True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder).' - type: boolean + description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." + type: "boolean" example: true extent: - description: Coordinates of the extent of the boundary. - example: See sample response below. + description: "Coordinates of the extent of the boundary." + example: "See sample response below." active: - description: Indicates whether or not the boundary is active. - type: boolean + description: "Indicates whether or not the boundary is active." + type: "boolean" example: true archived: - type: boolean + type: "boolean" example: true - description: Indicates whether or not the boundary is archived. + description: "Indicates whether or not the boundary is archived." signalType: - type: string - example: dtiSignalTypeRTK - description: Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." modifiedTime: - example: 2017-11-16T15:43:27.496Z - type: datetime - description: An ISO-8601 formatted timestamp of the last modification made to this boundary. + example: "2017-11-16T15:43:27.496Z" + type: "datetime" + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." createdTime: - example: 2017-11-16T15:43:27.496Z - type: datetime - description: An ISO-8601 formatted timestamp of the time this boundary was created. + example: "2017-11-16T15:43:27.496Z" + type: "datetime" + description: "An ISO-8601 formatted timestamp of the time this boundary was created." irrigated: - type: boolean + type: "boolean" example: true - description: Indicates whether the contained area is irrigated. + description: "Indicates whether the contained area is irrigated." BoundaryOrgId2: - type: object + type: "object" properties: id: - description: Boundary ID - type: GUID - format: uuid + description: "Boundary ID" + type: "GUID" + format: "uuid" example: "6232611a-0303-0234-8g7d-e1e1e11871b8" name: - type: string + type: "string" example: "AutoGenerated 2020 Seeding" - description: Boundary name + description: "Boundary name" sourceType: - description: Describes the source of boundary (requires license to set). - type: string + description: "Describes the source of boundary (requires license to set)." + type: "string" example: "Auto" multipolygons: - description: Boundary shape and exact location. - example: See sample response below + description: "Boundary shape and exact location." + example: "See sample response below" type1: - description: Boundary type - type: string - example: exterior + description: "Boundary type" + type: "string" + example: "exterior" passable: - description: '"True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder).' - type: boolean + description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." + type: "boolean" example: true extent: - description: Coordinates of the extent of the boundary. - example: See sample response below. + description: "Coordinates of the extent of the boundary." + example: "See sample response below." active: - description: Indicates whether or not the boundary is active. - type: boolean + description: "Indicates whether or not the boundary is active." + type: "boolean" example: true signalType: - type: string - example: dtiSignalTypeRTK - description: Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." modifiedTime: - example: 2017-11-16T15:43:27.496Z - type: datetime - description: An ISO-8601 formatted timestamp of the last modification made to this boundary. + example: "2017-11-16T15:43:27.496Z" + type: "datetime" + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." irrigated: - type: boolean + type: "boolean" example: true - description: Indicates whether the contained area is irrigated. + description: "Indicates whether the contained area is irrigated." + DatumRange: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Datum Range" + startPointIndex: + type: "integer" + description: "starting point index this datum applies to relative to the boundary" + format: "int32" + example: 0 + endPointIndex: + type: "integer" + description: "ending point index this datum applies to relative to the boundary" + format: "int32" + example: 127 + datum: + $ref: "#/components/schemas/GPSDatum" + Errors: + type: "object" + format: "Errors/DataValidationException" + properties: + "@type": + type: "string" + example: "Errors" + otherAttributes: + type: "object" + example: {} + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + message: + type: "string" + description: "An english description of the error" + example: "Duplicate boundary name" + code: + type: "string" + description: "A string constant representing the type of error" + example: "some error code" + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "name" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: "some boundary name" + Extent: + type: "object" + readOnly: true + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Extent" + topLeft: + $ref: "#/components/schemas/Point" + bottomRight: + $ref: "#/components/schemas/Point" + GPSDatum: + type: "object" + required: + - "serialNumber" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "GPS Datum" + gpsDatumValue: + $ref: "#/components/schemas/GPSDatumValue" + horizontalUncertainty: + $ref: "#/components/schemas/MeasurementAsDouble" + verticalUncertainty: + $ref: "#/components/schemas/MeasurementAsDouble" + serialNumber: + type: "string" + example: "serialNumber" + GPSDatumValue: + type: "object" + required: + - "datumUuid" + - "currentActiveDatum" + - "status" + - "referenceDatum" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "GPS Datum values" + currentActiveDatum: + type: "string" + example: "currentActiveDatum" + currentActiveEpochTime: + $ref: "#/components/schemas/MeasurementAsDouble" + baseLocation: + $ref: "#/components/schemas/ThreeDPoint" + status: + type: "string" + example: "status" + referenceDatum: + type: "string" + example: "referenceDatumValue" + referenceEpochTime: + $ref: "#/components/schemas/MeasurementAsDouble" + referencePositionOffsets: + $ref: "#/components/schemas/ThreeDPoint" + datumCreationTime: + $ref: "#/components/schemas/MeasurementAsDouble" + datumUuid: + type: "string" + description: "Unique id for this datum" + example: "205ff5ba-8d63-4a66-bbfe-b2a31ebad0d3" + Headland: + type: "object" + required: + - "name" + - "parentId" + - "active" + properties: + name: + type: "string" + example: "headland_name" + points: + type: "array" + items: + $ref: "#/components/schemas/Point" + active: + type: "boolean" + description: "indicates if this is the active headland in a collection" + Link: + description: "Provides a reference to an associated object or list" + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + example: "self" + uri: + type: "string" + format: "uri" + description: "The location of the resource" + example: "https://partnerapi.deere.com/platform/organizations/1/boundaries/00000000-0000-0000-0000-000000000000" + LocationSourceRange: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Location Source Range" + startPointIndex: + type: "integer" + format: "int32" + description: "starting point index this location source applies to relative to the boundary" + example: 0 + endPointIndex: + type: "integer" + format: "int32" + description: "ending point index this location source applies to relative to the boundary" + example: 127 + locationSource: + type: "string" + description: "value of location source used" + example: "\"locationSource\": \"Computed from Rigid Kinematics\"" + MeasurementAsDouble: + type: "object" + readOnly: true + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "MeasurementAsDouble" + valueAsDouble: + type: "number" + format: "double" + example: 7.502938 + unit: + type: "string" + description: "The unit of measure for this value" + example: "ha" + Point: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 32.118552 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: -81.260776 + Polygon: + properties: + rings: + type: "array" + items: + type: "object" + properties: + id: + type: "integer" + description: "identifier for polygon" + example: 1 + parentId: + type: "integer" + description: "id of associated ring" + example: 5 + points: + type: "array" + items: + $ref: "#/components/schemas/Point" + type: + type: "string" + description: "Describes whether this geometry is interior (e.g. a pond contained within a field) or exterior (e.g. a fence around the field)" + enum: + - "interior" + - "exterior" + passable: + description: "Describes whether or not a machine may travel through this geometry (e.g. a road vs a stream)" + type: "boolean" + headlands: + description: "A collection of headlands" + type: "array" + items: + $ref: "#/components/schemas/Headland" + accuracyData: + $ref: "#/components/schemas/AccuracyData" + signalType: + type: "string" + description: "value of signal type used" + example: "dtiSignalTypeRTK" + creationMethod: + type: "string" + description: "To determine how their boundary was generated" + example: "dtiBoundaryFromWebCoverage" + PostBoundary: + properties: + name: + type: "string" + example: "Boundary_Unique_Name" + description: "Boundary Name." + active: + type: "boolean" + example: "false" + description: "Indicates whether the boundary is active in this field." + archive: + type: "boolean" + example: "false" + description: "Indicates whether the boundary is archived." + irrigated: + type: "boolean" + example: "false" + description: "Indicates whether the boundary is irrigated." + multipolygons: + description: "Polygon representation of the new boundary." + example: "See sample request below." + sourceType: + example: "External" + type: "string" + description: "Describes the source of boundary (requires license to set)." + signalType: + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." PostBoundaryGet: properties: id: - description: An identifier for this boundary, which is unique within a field context. - type: GUID - format: uuid + description: "An identifier for this boundary, which is unique within a field context." + type: "GUID" + format: "uuid" example: "bed69949-df25-4319-8f6c-94c62b466126" name: - type: string + type: "string" example: "Unique_Boundary_name" - description: Boundary name + description: "Boundary name" modifiedTime: - example: 2017-11-16T15:43:27.496Z - type: datetime - description: An ISO-8601 formatted timestamp of the last modification made to this boundary. + example: "2017-11-16T15:43:27.496Z" + type: "datetime" + description: "An ISO-8601 formatted timestamp of the last modification made to this boundary." createdTime: - example: 2017-11-16T15:43:27.496Z - type: datetime - description: An ISO-8601 formatted timestamp of the time this boundary was created. + example: "2017-11-16T15:43:27.496Z" + type: "datetime" + description: "An ISO-8601 formatted timestamp of the time this boundary was created." area: - example: See sample response below. - description: The sum of all exterior polygons. + example: "See sample response below." + description: "The sum of all exterior polygons." workableArea: - example: See sample response below. - description: Exteriors-interiors of the boundary. + example: "See sample response below." + description: "Exteriors-interiors of the boundary." sourceType: - description: Describes the source of boundary (requires license to set). - type: string + description: "Describes the source of boundary (requires license to set)." + type: "string" example: "HandDrawn" multipolygons: - description: A collection of polygons. - type: array - example: See sample response below + description: "A collection of polygons." + type: "array" + example: "See sample response below" extent: - description: Coordinates of the extent of the boundary. - type: object - example: See sample response below. + description: "Coordinates of the extent of the boundary." + type: "object" + example: "See sample response below." active: - description: Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries. - type: boolean + description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." + type: "boolean" example: true archived: - type: boolean + type: "boolean" example: true - description: Indicates whether or not this boundary is currently archived + description: "Indicates whether or not this boundary is currently archived" signalType: - type: string - example: dtiSignalTypeRTK - description: Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." irrigated: - type: boolean - example: 'false' - description: Indicates whether the contained area is irrigated. + type: "boolean" + example: "false" + description: "Indicates whether the contained area is irrigated." type1: - description: Boundary type - type: string - example: exterior + description: "Boundary type" + type: "string" + example: "exterior" passable: - description: '"True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder).' - type: boolean + description: "\"True\" indicates that the boundary can be crossed (Ex: a waterway). \"False\" indicates that the boundary cannot be crossed (ex: a boulder)." + type: "boolean" example: true - - PostBoundary: - properties: - name: - type: string - example: Boundary_Unique_Name - description: Boundary Name. - active: - type: boolean - example: 'false' - description: Indicates whether the boundary is active in this field. - archive: - type: boolean - example: 'false' - description: Indicates whether the boundary is archived. - irrigated: - type: boolean - example: 'false' - description: Indicates whether the boundary is irrigated. - multipolygons: - description: Polygon representation of the new boundary. - example: See sample request below. - sourceType: - example: External - type: string - description: Describes the source of boundary (requires license to set). - signalType: - type: string - example: dtiSignalTypeRTK - description: Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. PutBoundary: - type: object + type: "object" properties: name: - type: string - example: Boundary01 - description: Boundary Name. + type: "string" + example: "Boundary01" + description: "Boundary Name." active: - type: boolean - example: 'false' - description: Indicates whether the boundary is active in this field. + type: "boolean" + example: "false" + description: "Indicates whether the boundary is active in this field." archive: - type: boolean - example: 'false' - description: Indicates whether the boundary is archived. + type: "boolean" + example: "false" + description: "Indicates whether the boundary is archived." irrigated: - type: boolean - example: 'false' - description: Indicates whether the boundary is irrigated. + type: "boolean" + example: "false" + description: "Indicates whether the boundary is irrigated." multipolygons: - description: Polygon representation of the new boundary. - example: See sample request below. + description: "Polygon representation of the new boundary." + example: "See sample request below." sourceType: - example: External - type: string - description: Describes the source of boundary (requires license to set). + example: "External" + type: "string" + description: "Describes the source of boundary (requires license to set)." signalType: - type: string - example: dtiSignalTypeRTK - description: Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + type: "string" + example: "dtiSignalTypeRTK" + description: "Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values." + RecordMetadata: + type: "object" + description: "Data structure for record metadata capturing information about the creation and last update of an entity. - BoundariesLink: + For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). + + NOTES + + * Some attributes are only visible if the API Client has the required license. + + * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)\n" properties: - field: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c - description: Fields Link. - owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/1234 - description: Organizations Link. + "@type": + type: "string" + default: "RecordMetadata" + example: "RecordMetadata" + createdByUser: + type: "string" + description: "User involved in creating the entity. Only viewable with the RECORD_METADATA license\n" + example: "XYZ_USER" + lastModifiedByUser: + type: "string" + description: "User involved in modifying the entity. Only viewable with the RECORD_METADATA license\n" + example: "XYZ_USER" + userCreationTimestamp: + type: "string" + description: "Timestamp of entity creation" + readOnly: true + example: "2018-04-30T10:23:50.000Z" + userLastModifiedTimestamp: + type: "string" + description: "Timestamp of entity modification" + readOnly: true + example: "2018-05-01T08:11:23.000Z" + createdBySourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that created the entity. At this time, it only applies + + to Displays. Only viewable with the RECORD_METADATA license.\n" + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + lastModifiedSourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that modified the entity. At this time, it only applies + + to Displays. Only viewable with the RECORD_METADATA license\n" + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + createdBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that created) via Application Registry lookup. The + + Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) + + will be used if no source application exists. Only viewable with the RECORD_METADATA license.\n" + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + lastModifiedBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that did last modification) via Application Registry lookup. The + + Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) + + will be used if no source application exists. Only viewable with the RECORD_METADATA license.\n" + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + SignalTypeRange: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Signal Type Range" + startPointIndex: + type: "integer" + description: "starting point index this signal type applies to relative to the boundary" + example: 0 + endPointIndex: + type: "integer" + description: "ending point index this signal type applies to relative to the boundary" + example: 127 + signalType: + type: "string" + description: "value of signal type used" + example: "\"signalType\": \"SFRTK\"" + SnapDistanceRange: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "Snap Distance Range" + startIndex: + type: "integer" + description: "starting point index this snap distance applies to relative to the boundary" + example: 0 + endIndex: + type: "integer" + description: "ending point index this snap distance applies to relative to the boundary" + example: 127 + snapDistance: + $ref: "#/components/schemas/MeasurementAsDouble" + ThreeDPoint: + type: "object" + properties: + "@type": + type: "string" + description: "Identifies the class" + example: "3-dimensional point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 32.118552 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: -81.260776 + height: + type: "number" + format: "double" + description: "The z-axis of the point" + example: 1 + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag2: "ag2" + ag3: "ag3" diff --git a/specs/raw/clients.yaml b/specs/raw/clients.yaml index a994234..1df36fa 100644 --- a/specs/raw/clients.yaml +++ b/specs/raw/clients.yaml @@ -1,690 +1,646 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - title: Clients API - version: '3.0' + title: "Clients API" + version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi - + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: + /organizations/{orgID}/clients/{id}/fields: + get: + description: "View the field to which a specific client belongs. For the client, the response links to the following resources:
  • boundaries: View the boundaries that belong to this field.
  • clients: View the client that belongs to this field.
  • farms: View the farms within this field.
  • owningOrganization: View the organization that owns the field.
" + summary: "View a Client's Field" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/X-deere-signature" + responses: + "200": + description: "Get Field by client Id" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLinkID" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FieldResponse" + examples: + No Header: + description: "20O OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + total: 1 + values: + - name: "Narnia" + archived: false + id: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58" + - rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" + - rel: "clients" + uri: "https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef " /organizations/{orgId}/clients: get: - description: 'Retrieve all of the clients for an organization' - summary: List Clients in an Org - operationId: getAllClients + description: "Retrieve all of the clients for an organization" + summary: "List Clients in an Org" + operationId: "getAllClients" parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Embed' - - $ref: '#/components/parameters/RecordFilter' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Embed" + - $ref: "#/components/parameters/RecordFilter" responses: - 200: - $ref: '#/components/responses/ClientsReturned' - 304: - $ref: '#/components/responses/HasNotChanged' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgNotFound' + "200": + $ref: "#/components/responses/ClientsReturned" + "304": + $ref: "#/components/responses/HasNotChanged" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgNotFound" post: - description: 'This API is used to create a new client resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization.

Note: All clients are created with an "active" status.' - summary: Create a Client - operationId: createClient + description: "This API is used to create a new client resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization.

Note: All clients are created with an \"active\" status." + summary: "Create a Client" + operationId: "createClient" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ContentType' - + $ref: "#/components/schemas/ContentType" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" parameters: - - $ref: '#/components/parameters/OrgId2' + - $ref: "#/components/parameters/OrgId2" requestBody: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/requestBodies/ClientRequest' + $ref: "#/components/requestBodies/ClientRequest" examples: Create new client: value: - name: UniqueClientName + name: "UniqueClientName" archived: false responses: - 200: - $ref: '#/components/responses/ClientCreatedResponse' - 400: - $ref: '#/components/responses/MalformedRequest' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgOrClientNotFound' - + "200": + $ref: "#/components/responses/ClientCreatedResponse" + "400": + $ref: "#/components/responses/MalformedRequest" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgOrClientNotFound" /organizations/{orgId}/clients/{clientId}: get: - description: 'View a clients details. For each client, the response will link to the following resources:
-
  • fields: View the field the client belongs to.
  • -
  • farms: View the farm belonging to the client.
  • -
  • owningOrganization: View the org that owns the client.
' - summary: View a Client - operationId: getClient + description: "View a clients details. For each client, the response will link to the following resources:
  • fields: View the field the client belongs to.
  • farms: View the farm belonging to the client.
  • owningOrganization: View the org that owns the client.
" + summary: "View a Client" + operationId: "getClient" parameters: - - $ref: '#/components/parameters/Embed' + - $ref: "#/components/parameters/Embed" responses: - 200: - $ref: '#/components/responses/ClientReturned' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgOrClientNotFound' + "200": + $ref: "#/components/responses/ClientReturned" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgOrClientNotFound" put: - description: This API is used to update an existing client resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization. - summary: Update a Client - operationId: updateClient + description: "This API is used to update an existing client resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization." + summary: "Update a Client" + operationId: "updateClient" requestBody: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: examples: Update client: value: - name: UniqueClientName + name: "UniqueClientName" archived: true schema: - $ref: '#/components/requestBodies/ClientRequest2' + $ref: "#/components/requestBodies/ClientRequest2" responses: - 204: - $ref: '#/components/responses/UpdatedResponse' - 400: - $ref: '#/components/responses/MalformedRequest' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgOrClientNotFound' + "204": + $ref: "#/components/responses/UpdatedResponse" + "400": + $ref: "#/components/responses/MalformedRequest" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgOrClientNotFound" delete: - description: This API is used to delete a client resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization. - summary: Delete a Client - operationId: deleteClient + description: "This API is used to delete a client resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization." + summary: "Delete a Client" + operationId: "deleteClient" responses: - 204: - $ref: '#/components/responses/DeletedResponse' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgOrClientNotFound' - + "204": + $ref: "#/components/responses/DeletedResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgOrClientNotFound" /organizations/{orgId}/clients/{id}/farms: get: parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/ClientId' - - $ref: '#/components/parameters/FarmName' - description: 'View a list of farms belonging to a specified client. For each farm, the response will link to the following resources: -
    -
  • fields: View the fields in this farm
  • -
  • farms: View the clients that own this farm.
  • -
  • owningOrganization: View the Organization that owns the farm.
  • -
' - summary: View a Client's Farms - operationId: getAllFarms + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/ClientId" + - $ref: "#/components/parameters/FarmName" + description: "View a list of farms belonging to a specified client. For each farm, the response will link to the following resources:
  • fields: View the fields in this farm
  • farms: View the clients that own this farm.
  • owningOrganization: View the Organization that owns the farm.
" + summary: "View a Client's Farms" + operationId: "getAllFarms" responses: - 200: - $ref: '#/components/responses/FarmsResponse' - 304: - $ref: '#/components/responses/HasNotChanged' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgNotFound' - - /organizations/{orgID}/clients/{id}/fields: - get: - description: 'View the field to which a specific client belongs. For the client, the response links to the following resources: -
    -
  • boundaries: View the boundaries that belong to this field.
  • -
  • clients: View the client that belongs to this field.
  • -
  • farms: View the farms within this field.
  • -
  • owningOrganization: View the organization that owns the field.
  • -
' - summary: View a Client's Field - security: - - OAuth2: [ ag1 ] - parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Id' - - $ref: '#/components/parameters/X-deere-signature' - responses: - 200: - description: Get Field by client Id - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - type: array - items: - $ref: '#/components/schemas/GroupLinkID' - total: - type: integer - example: 1 - format: int32 - values: - type: array - items: - $ref: '#/components/schemas/FieldResponse' - examples: - No Header: - description: '20O OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 3b5392615e4b4e1c92013026f47109bb' - value: - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - total: 1 - values: - - name: Narnia - archived: false - id: a7cb723f-6707-46fb-a9ff-4e734e3daf58 - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58 - - rel: boundaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries - - rel: clients - uri: >- - https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: contributionDefinition - uri: >- - https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - + "200": + $ref: "#/components/responses/FarmsResponse" + "304": + $ref: "#/components/responses/HasNotChanged" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgNotFound" components: parameters: - OrgId: - in: path - name: orgId - description: The id of the organization - required: true - schema: - type: integer - format: int64 - example: 12345 ClientId: - in: path - name: clientId - description: client Id + in: "path" + name: "clientId" + description: "client Id" required: true schema: - type: string - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d + type: "string" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" ClientName: - in: query - name: name - description: client name + in: "query" + name: "name" + description: "client name" required: false schema: - type: string - FarmName: - in: query - name: name - description: farm name + type: "string" + Embed: + name: "embed" + in: "query" + description: "Populates response with data lineage information" required: false schema: - type: string - RecordFilter: - in: query - name: recordFilter - description: Filter clients by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE - schema: - type: string - example: ACTIVE - Embed: - name: embed - in: query - description: Populates response with data lineage information + type: "string" + example: "showRecordMetadata" + FarmName: + in: "query" + name: "name" + description: "farm name" required: false schema: - type: string - example: showRecordMetadata - X-deere-signature: - name: x-deere-signature - in: header - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. + type: "string" + Id: + name: "clientId" + in: "path" + description: "Client ID" + required: true schema: - type: string - example: 9r8392615e4b4e1c92018026f47109bb + type: "GUID" + example: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + OrgId: + in: "path" + name: "orgId" + description: "The id of the organization" + required: true + schema: + type: "integer" + format: "int64" + example: 12345 OrgId2: - in: path - name: orgID - description: The ID of the organization + in: "path" + name: "orgID" + description: "The ID of the organization" required: true schema: - type: string - format: int64 + type: "string" + format: "int64" example: 123456 - Id: - name: clientId - in: path - description: Client ID - required: true + RecordFilter: + in: "query" + name: "recordFilter" + description: "Filter clients by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE" + schema: + type: "string" + example: "ACTIVE" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: GUID - example: f1161eba-7c82-4a80-9eeb-383451b4c46e + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" requestBodies: ClientRequest: - $ref: '#/components/schemas/ClientPost' + $ref: "#/components/schemas/ClientPost" ClientRequest2: - $ref: '#/components/schemas/ClientPost' + $ref: "#/components/schemas/ClientPost" responses: - ClientsReturned: - description: Array of clients containing links related to assets + ClientCreatedResponse: + description: "created" + headers: + Location: + schema: + description: "The uri of the newly created resource" + type: "string" + format: "url" + example: "https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Clients' + properties: + total: + type: "integer" + example: 1 + format: "int32" examples: - No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' - value: - links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/6789/clients - total: 2 - values: - - name: Captain Nemo - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e - archived: false - - name: Aslan - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e - archived: false + Headers: + description: "201 Created
Location: https://sandboxapi.deere.com/platform/organizations/12345/clients/4r539261-5e4b-4e1c-9201-8026f47109bb" ClientReturned: - description: Success + description: "Success" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Client' + $ref: "#/components/schemas/Client" examples: No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: - name: Aslan + name: "Aslan" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" archived: false - ClientCreatedResponse: - description: created - headers: - Location: - schema: - description: The uri of the newly created resource - type: string - format: url - example: https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912 + ClientsReturned: + description: "Array of clients containing links related to assets" content: application/vnd.deere.axiom.v3+json: schema: - properties: - total: - type: integer - example: 1 - format: int32 + $ref: "#/components/schemas/Clients" + examples: + No Header: + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients" + total: 2 + values: + - name: "Captain Nemo" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + archived: false + - name: "Aslan" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + archived: false + DeletedResponse: + description: "Deleted" + content: + application/vnd.deere.axiom.v3+json: examples: Headers: - description: '201 Created
Location: https://sandboxapi.deere.com/platform/organizations/12345/clients/4r539261-5e4b-4e1c-9201-8026f47109bb' + description: "204 No Content" + DoesNotHaveAccessResponse: + description: "Does not have access" FarmsResponse: - description: Get Farm by client Id + description: "Get Farm by client Id" content: application/vnd.deere.axiom.v3+json: schema: properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/GroupLink' + $ref: "#/components/schemas/GroupLink" total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" values: - type: array + type: "array" items: - $ref: '#/components/schemas/FarmResponse' + $ref: "#/components/schemas/FarmResponse" examples: No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/6789/clients/590f875c-9504-461e-94f3-b80a52372023/farms + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/590f875c-9504-461e-94f3-b80a52372023/farms" total: 2 values: - - name: FarmName - clientUri: https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274, + - name: "FarmName" + clientUri: "https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274," archived: false - id: f1161eba-7c82-4a80-9eeb-383451b4c46e + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - DeletedResponse: - description: Deleted + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + HasNotChanged: + description: "Content has not changed since last call" + MalformedRequest: + description: "Request Validation failure." content: application/vnd.deere.axiom.v3+json: - examples: - Headers: - description: '204 No Content' + schema: + $ref: "#/components/schemas/MalformedRequestError" + OrgNotFound: + description: "Organization not found" + OrgOrClientNotFound: + description: "Organization or client not found" UpdatedResponse: - description: Updated + description: "Updated" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content' - DoesNotHaveAccessResponse: - description: Does not have access - OrgNotFound: - description: Organization not found - HasNotChanged: - description: Content has not changed since last call - OrgOrClientNotFound: - description: Organization or client not found - MalformedRequest: - description: Request Validation failure. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/MalformedRequestError' - + description: "204 No Content" schemas: - Clients: - type: object - properties: - links: - type: array - items: - $ref: '#/components/schemas/GroupLink' - total: - type: integer - example: 1 - format: int32 - values: - type: array - items: - $ref: '#/components/schemas/Client' Client: - type: object + type: "object" properties: - '@type': - type: string - example: Client - description: Type + "@type": + type: "string" + example: "Client" + description: "Type" name: - type: string - example: John Doe - description: Client Name + type: "string" + example: "John Doe" + description: "Client Name" id: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" readOnly: true - description: Client ID + description: "Client ID" links: readOnly: true - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - description: Links + $ref: "#/components/schemas/Link" + description: "Links" archived: - type: boolean + type: "boolean" example: true - description: Archived status - GroupLink: - description: Link to another resource - type: object - properties: - '@type': - type: string - example: Link - rel: - required: true - type: string - example: self - uri: - required: true - type: string - example: https://sandboxapi.deere.com/platform/organizations/5555/clients - FieldResponse: + description: "Archived status" + ClientPost: properties: - x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 3b5392615e4b4e1c92013026f47109bb - id: - type: GUID - format: uuid - example: f1161eba-7c82-4a80-9eeb-383451b4c46e - description: Client ID name: - type: string - description: Client Name - example: Aslan - ContentType: - properties: - Content-Type: application/vnd.deere.axiom.v3+json - Link: - description: Link to another resource - type: object + example: "UniqueClientName" + type: "string" + description: "New Client Name" + archived: + example: "false" + type: "string" + description: "Archived status (false = active)" + Clients: + type: "object" properties: - '@type': - type: string - example: Link - rel: - required: true - type: string - example: self - uri: - required: true - type: string - example: https://sandboxapi.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d - GroupLinkID: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/Client" + ContentType: properties: - boundaries: - example: https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries - description: Boundaries Link. - clients: - example: https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients - description: Clients Link. - farms: - example: https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms - description: Farms Link. - owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/1234 - description: Organizations Link. - contributionDefinition: - example: https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - description: Contribution Definition Link - ClientPost: + Content-Type: "application/vnd.deere.axiom.v3+json" + Errors: + type: "object" + format: "Errors/DataValidationException" properties: - name: - example: UniqueClientName - type: string - description: New Client Name - archived: - example: 'false' - type: string - description: Archived status (false = active) + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + example: + guid: "438d14c1-db6f-402a-a349-942ccab36c59" + message: "invalid client name" + code: 400 + field: "client name" + invalidValue: "?????" + properties: + guid: + type: "string" + format: "uuid" + example: "438d14c1-db6f-402a-a349-942ccab36c59" + message: + type: "string" + description: "A description of the error translated into the language specified + + in the 'Accept-Language' header if available, otherwise English\n" + example: "invalid client name" + code: + type: "string" + description: "A string constant representing the type of error" + example: 400 + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "client name" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: "?????" FarmResponse: properties: farmId: required: true - type: string + type: "string" farmName: required: true - type: string + type: "string" clientId: required: true - type: string + type: "string" clientName: - type: string + type: "string" clientUri: - type: string + type: "string" orgId: required: true - type: integer - format: int64 + type: "integer" + format: "int64" archived: - type: boolean + type: "boolean" sourceModifiedDate: - type: string + type: "string" sourceCreatedDate: - type: string + type: "string" createdContributionId: - type: string - description: Id of the system which created the farm + type: "string" + description: "Id of the system which created the farm" modifiedContributionId: - type: string - description: Id of the system which last modified the farm like AppId + type: "string" + description: "Id of the system which last modified the farm like AppId" createdSourceNode: - type: string - description: The node which created the farm + type: "string" + description: "The node which created the farm" modifiedSourceNode: - type: string - description: The node which last modified the Farm + type: "string" + description: "The node which last modified the Farm" createdBy: - type: string - description: The Id of the entity which created the farm + type: "string" + description: "The Id of the entity which created the farm" modifiedBy: - type: string - description: The Id of the entity which last modified the farm - Errors: - type: object - format: Errors/DataValidationException + type: "string" + description: "The Id of the entity which last modified the farm" + FieldResponse: properties: - errors: - type: array - items: - type: object - format: Error/ConstraintViolation - example: - guid: 438d14c1-db6f-402a-a349-942ccab36c59 - message: "invalid client name" - code: 400 - field: "client name" - invalidValue: "?????" - properties: - guid: - type: string - format: uuid - example: 438d14c1-db6f-402a-a349-942ccab36c59 - message: - type: string - description: | - A description of the error translated into the language specified - in the 'Accept-Language' header if available, otherwise English - example: "invalid client name" - code: - type: string - description: A string constant representing the type of error - example: 400 - field: - type: string - description: The name of the property or parameter deemed invalid - example: "client name" - invalidValue: - type: string - description: The value that was supplied for this field in the request - example: "?????" - + x-deere-signature: + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "3b5392615e4b4e1c92013026f47109bb" + id: + type: "GUID" + format: "uuid" + example: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + description: "Client ID" + name: + type: "string" + description: "Client Name" + example: "Aslan" + GroupLink: + description: "Link to another resource" + type: "object" + properties: + "@type": + type: "string" + example: "Link" + rel: + required: true + type: "string" + example: "self" + uri: + required: true + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/5555/clients" + GroupLinkID: + properties: + boundaries: + example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" + description: "Boundaries Link." + clients: + example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + description: "Clients Link." + farms: + example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" + description: "Farms Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organizations Link." + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" + description: "Contribution Definition Link" + Link: + description: "Link to another resource" + type: "object" + properties: + "@type": + type: "string" + example: "Link" + rel: + required: true + type: "string" + example: "self" + uri: + required: true + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d" MalformedRequestError: - type: object + type: "object" properties: - '@type': - type: string - example: Errors + "@type": + type: "string" + example: "Errors" errors: - type: array + type: "array" items: properties: - '@type': - type: string - example: Error + "@type": + type: "string" + example: "Error" guid: - type: string - format: uuid - example: ed292512-1f3c-4285-83c3-1fb084423f9b + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" message: - type: string - example: This field is required. + type: "string" + example: "This field is required." otherAttributes: - type: object + type: "object" example: {} diff --git a/specs/raw/connection-management.yaml b/specs/raw/connection-management.yaml index e68d0b0..7800928 100644 --- a/specs/raw/connection-management.yaml +++ b/specs/raw/connection-management.yaml @@ -1,160 +1,156 @@ -openapi: '3.0.3' +openapi: "3.0.3" info: - description: | - Allows CSCs to see all of their connections and remove connections outside of any particular user token - version: 1.0.0 - title: CSC Connection Management + description: "Allows CSCs to see all of their connections and remove connections outside of any particular user token\n" + version: "1.0.0" + title: "CSC Connection Management" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" paths: /connections: get: - summary: Get list of connections - description: Retrieve all of the connections for a CSC based on the client in the token + summary: "Get list of connections" + description: "Retrieve all of the connections for a CSC based on the client in the token" parameters: - - $ref: '#/components/parameters/CreatedAfter' + - $ref: "#/components/parameters/CreatedAfter" responses: - 200: - description: List of Connections that can be removed + "200": + description: "List of Connections that can be removed" content: application/json: schema: - $ref: '#/components/schemas/ConnectionsResponse' + $ref: "#/components/schemas/ConnectionsResponse" /connections/{connectionId}: delete: - summary: Delete connection by connection ID - description: Remove specific connection by ID + summary: "Delete connection by connection ID" + description: "Remove specific connection by ID" parameters: - - $ref: '#/components/parameters/ConnectionId' + - $ref: "#/components/parameters/ConnectionId" responses: - 204: - $ref: '#/components/responses/Deleted' - 403: - $ref: '#/components/responses/Forbidden' + "204": + $ref: "#/components/responses/Deleted" + "403": + $ref: "#/components/responses/Forbidden" /organizations/{orgId}/connections: delete: - summary: Delete all partner connections by Org Id - description: Remove all connections between the calling application and the org. This includes all partner connections. + summary: "Delete all partner connections by Org Id" + description: "Remove all connections between the calling application and the org. This includes all partner connections." parameters: - - $ref: '#/components/parameters/OrgId' + - $ref: "#/components/parameters/OrgId" responses: - 204: - $ref: '#/components/responses/Deleted' - 403: - $ref: '#/components/responses/Forbidden' + "204": + $ref: "#/components/responses/Deleted" + "403": + $ref: "#/components/responses/Forbidden" components: parameters: ConnectionId: - in: path - name: connectionId - description: The identifier of the connection + in: "path" + name: "connectionId" + description: "The identifier of the connection" required: true schema: - type: string + type: "string" example: "123456" + CreatedAfter: + in: "query" + name: "createdAfter" + description: "ISO 8601 DateTime to filter the responses to only those created after the supplied date" + required: false + schema: + type: "string" + example: "2021-10-15T08:00:00Z" OrgId: - in: path - name: orgId - description: Organization Id + in: "path" + name: "orgId" + description: "Organization Id" required: true schema: - type: integer + type: "integer" example: 2101 - CreatedAfter: - in: query - name: createdAfter - description: ISO 8601 DateTime to filter the responses to only those created after the supplied date - required: false - schema: - type: string - example: '2021-10-15T08:00:00Z' - responses: - Forbidden: - description: Requester not authorized to delete the requested connection Deleted: - description: Deleted + description: "Deleted" content: application/json: schema: - type: object + type: "object" examples: Headers: - description: '204 No Content, the connection has been deleted' - + description: "204 No Content, the connection has been deleted" + Forbidden: + description: "Requester not authorized to delete the requested connection" schemas: - Link: - description: Link to the delete action - type: object - properties: - '@type': - type: string - default: Link - example: Link - rel: - required: true - type: string - example: self - uri: - required: true - type: string - example: https://api.deere.com/platform/connections/abc123 - Connection: - type: object + type: "object" properties: id: required: true - type: string - example: 'abc123' + type: "string" + example: "abc123" orgId: required: true - type: integer - format: int32 + type: "integer" + format: "int32" example: 2551 partnerOrgId: - type: integer - format: int32 + type: "integer" + format: "int32" example: 2101 orgName: - type: string + type: "string" example: "Spahn Ranch" created: - type: string - description: ISO date the connection was created. - example: '2020-01-01T00:00:00Z' + type: "string" + description: "ISO date the connection was created." + example: "2020-01-01T00:00:00Z" permissions: - type: array - description: An array of permission IDs for the connection - example: '[1001, 1002]' + type: "array" + description: "An array of permission IDs for the connection" + example: "[1001, 1002]" links: - type: array - description: Link to the delete action + type: "array" + description: "Link to the delete action" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" ConnectionsResponse: - type: object + type: "object" properties: links: required: true - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" total: required: true - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 values: required: true - type: array + type: "array" items: - $ref: '#/components/schemas/Connection' + $ref: "#/components/schemas/Connection" + Link: + description: "Link to the delete action" + type: "object" + properties: + "@type": + type: "string" + default: "Link" + example: "Link" + rel: + required: true + type: "string" + example: "self" + uri: + required: true + type: "string" + example: "https://api.deere.com/platform/connections/abc123" diff --git a/specs/raw/crop-types.yaml b/specs/raw/crop-types.yaml index baf5477..3783fa1 100644 --- a/specs/raw/crop-types.yaml +++ b/specs/raw/crop-types.yaml @@ -1,594 +1,587 @@ -openapi: 3.0.1 +openapi: "3.0.1" info: - title: Crop Types API - description: Provides all crop types available in the system - version: '3.0' + title: "Crop Types API" + description: "Provides all crop types available in the system" + version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - partnerapi - - sandboxapi - - apicert - - partnerapicert - - apiqa.tal - - partnerapiqa - - sandboxapiqa - + - "api" + - "partnerapi" + - "sandboxapi" + - "apicert" + - "partnerapicert" + - "apiqa.tal" + - "partnerapiqa" + - "sandboxapiqa" paths: /cropTypes: get: - summary: Retrieve all crop types - description: This endpoint will return list of available crop types in the system. + summary: "Retrieve all crop types" + description: "This endpoint will return list of available crop types in the system." security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: '#/components/parameters/RecordFilter' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/RecordFilter" + - $ref: "#/components/parameters/X-deere-signature" responses: - 200: - $ref: '#/components/responses/CropTypeCollectionResponse' - 405: - $ref: '#/components/responses/CropTypeMethodNotAllowed' + "200": + $ref: "#/components/responses/CropTypeCollectionResponse" + "405": + $ref: "#/components/responses/CropTypeMethodNotAllowed" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Accept-Language: 'en1 - to specify which language you would like the notifications to be when returned in the response' - /cropTypes/{name}: + Accept-Language: "en1 - to specify which language you would like the notifications to be when returned in the response" + /cropTypes/{id}: get: - summary: View a specific cropType - description: This endpoint will return details of specific cropType. + summary: "View a specific cropType" + description: "This endpoint will return details of specific cropType." security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: '#/components/parameters/Name' - - $ref: '#/components/parameters/X-deere-signature2' + - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/X-deere-signature2" responses: - 200: - $ref: '#/components/responses/CropTypeNameResponse' - 404: - $ref: '#/components/responses/CropTypeNotFound' - 405: - $ref: '#/components/responses/CropTypeMethodNotAllowed' - /cropTypes/{id}: + "200": + $ref: "#/components/responses/CropTypeIdResponse" + "404": + $ref: "#/components/responses/CropTypeNotFound" + "405": + $ref: "#/components/responses/CropTypeMethodNotAllowed" + /cropTypes/{name}: get: - summary: View a specific cropType - description: This endpoint will return details of specific cropType. + summary: "View a specific cropType" + description: "This endpoint will return details of specific cropType." security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: '#/components/parameters/Id' - - $ref: '#/components/parameters/X-deere-signature2' + - $ref: "#/components/parameters/Name" + - $ref: "#/components/parameters/X-deere-signature2" responses: - 200: - $ref: '#/components/responses/CropTypeIdResponse' - 404: - $ref: '#/components/responses/CropTypeNotFound' - 405: - $ref: '#/components/responses/CropTypeMethodNotAllowed' + "200": + $ref: "#/components/responses/CropTypeNameResponse" + "404": + $ref: "#/components/responses/CropTypeNotFound" + "405": + $ref: "#/components/responses/CropTypeMethodNotAllowed" /organizations/{organizationId}/cropTypes: get: - summary: Retrieve all crop types for a specific organization - description: This endpoint will return a list of all crop types for a specific organization. + summary: "Retrieve all crop types for a specific organization" + description: "This endpoint will return a list of all crop types for a specific organization." security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: '#/components/parameters/organizationId' - - $ref: '#/components/parameters/RecordFilter' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/organizationId" + - $ref: "#/components/parameters/RecordFilter" + - $ref: "#/components/parameters/X-deere-signature" responses: - 200: - $ref: '#/components/responses/CropTypeorganizationResponse' - 404: - $ref: '#/components/responses/CropTypeNotFound' - 405: - $ref: '#/components/responses/CropTypeMethodNotAllowed' - + "200": + $ref: "#/components/responses/CropTypeorganizationResponse" + "404": + $ref: "#/components/responses/CropTypeNotFound" + "405": + $ref: "#/components/responses/CropTypeMethodNotAllowed" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag1: 'ag1' parameters: + Id: + in: "path" + name: "id" + description: "This is the crop type Id" + required: true + schema: + type: "string" + example: 173 + Name: + in: "path" + name: "name" + description: "This is the crop type name" + required: true + schema: + type: "string" + example: "ENERGY_CANE" RecordFilter: - name: recordFilter - in: query - description: Filter results based on status + name: "recordFilter" + in: "query" + description: "Filter results based on status" required: false schema: - type: string - example: active, all - + type: "string" + example: "active, all" X-deere-signature: - in: header - name: x-deere-signature - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. + in: "header" + name: "x-deere-signature" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." required: false schema: - type: string - example: 9r8392615e4b4e1c12458026f47109bb + type: "string" + example: "9r8392615e4b4e1c12458026f47109bb" X-deere-signature2: - in: header - name: x-deere-signature - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same GUID next time. + in: "header" + name: "x-deere-signature" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same GUID next time." required: false schema: - type: GUID - example: 9r8392615e4b4e1c12458026f47109bb - - Name: - in: path - name: name - description: This is the crop type name - required: true - schema: - type: string - example: ENERGY_CANE - - Id: - in: path - name: id - description: This is the crop type Id - required: true - schema: - type: string - example: 173 - + type: "GUID" + example: "9r8392615e4b4e1c12458026f47109bb" organizationId: - in: path - name: organizationId - description: This is the organization Id + in: "path" + name: "organizationId" + description: "This is the organization Id" required: true schema: - type: string + type: "string" example: 123456 - responses: CropTypeCollectionResponse: - description: A collection of crop types + description: "A collection of crop types" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: total: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/CropType' + $ref: "#/components/schemas/CropType" examples: No Header: - description: '200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: ' https://sandboxapi.deere.com/platform/cropTypes' - - rel: nextPage - uri: ' https://sandboxapi.deere.com/platform/cropTypes;start=10;count=10' + - rel: "self" + uri: " https://sandboxapi.deere.com/platform/cropTypes" + - rel: "nextPage" + uri: " https://sandboxapi.deere.com/platform/cropTypes;start=10;count=10" total: 216 values: - - '@type': CropType - name: CORN_WET - translatedName: Corn - "color": "#FFE119" + - "@type": "CropType" + name: "CORN_WET" + translatedName: "Corn" + color: "#FFE119" densityFactor: - '@type': Density + "@type": "Density" value: 25.4 - unit: kg1bu-1 + unit: "kg1bu-1" standardPayableMoisture: - '@type': Moisture + "@type": "Moisture" value: 15 - unit: '%' + unit: "%" supportedEquipmentTypes: - - '@type': SupportedEquipmentType - erid: d9d1c11f-35e0-43af-84ae-696d9ea3c18b - equipmentTypeProtoEnum: ET_CORN_HEAD - - '@type': SupportedEquipmentType - erid: d8dce5b0-cc8d-4c34-afac-27d93793bd86 - equipmentTypeProtoEnum: ET_COMBINE - - '@type': SupportedEquipmentType - erid: 57c1e304-bf44-4c50-bf3e-0e910d528b92 - equipmentTypeProtoEnum: ET_BALER - "lastModifiedTime": "2021-10-14T11:55:00Z" - id: '173' + - "@type": "SupportedEquipmentType" + erid: "d9d1c11f-35e0-43af-84ae-696d9ea3c18b" + equipmentTypeProtoEnum: "ET_CORN_HEAD" + - "@type": "SupportedEquipmentType" + erid: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + equipmentTypeProtoEnum: "ET_COMBINE" + - "@type": "SupportedEquipmentType" + erid: "57c1e304-bf44-4c50-bf3e-0e910d528b92" + equipmentTypeProtoEnum: "ET_BALER" + lastModifiedTime: "2021-10-14T11:55:00Z" + id: "173" links: - - '@type': Link - rel: self - uri: ' https://sandboxapi.deere.com/platform/cropTypes/CORN_WET' - CropTypeNameResponse: - description: A collection of crop types + - "@type": "Link" + rel: "self" + uri: " https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" + CropTypeIdResponse: + description: "A collection of crop types" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: total: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/CropType2' + $ref: "#/components/schemas/CropType3" examples: No Header: - description: '200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb" value: - '@type': CropType - name: CORN_WET - translatedName: Corn - "color": "#FFE119" + "@type": "CropType" + name: "CORN_WET" + translatedName: "Corn" + color: "#FFE119" densityFactor: - '@type': Density + "@type": "Density" value: 25.4 - unit: kg1bu-1 + unit: "kg1bu-1" standardPayableMoisture: - '@type': Moisture + "@type": "Moisture" value: 15 - unit: '%' + unit: "%" supportedEquipmentTypes: - - '@type': SupportedEquipmentType - erid: d9d1c11f-35e0-43af-84ae-696d9ea3c18b - equipmentTypeProtoEnum: ET_CORN_HEAD - - '@type': SupportedEquipmentType - erid: d8dce5b0-cc8d-4c34-afac-27d93793bd86 - equipmentTypeProtoEnum: ET_COMBINE - - '@type': SupportedEquipmentType - erid: 57c1e304-bf44-4c50-bf3e-0e910d528b92 - equipmentTypeProtoEnum: ET_BALER - "lastModifiedTime": "2021-10-14T11:55:00Z" - id: '173' + - "@type": "SupportedEquipmentType" + erid: "d9d1c11f-35e0-43af-84ae-696d9ea3c18b" + equipmentTypeProtoEnum: "ET_CORN_HEAD" + - "@type": "SupportedEquipmentType" + erid: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + equipmentTypeProtoEnum: "ET_COMBINE" + - "@type": "SupportedEquipmentType" + erid: "57c1e304-bf44-4c50-bf3e-0e910d528b92" + equipmentTypeProtoEnum: "ET_BALER" + lastModifiedTime: "2021-10-14T11:55:00Z" + id: "173" links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/cropTypes/CORN_WET - CropTypeIdResponse: - description: A collection of crop types + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" + CropTypeMethodNotAllowed: + description: "The requested method is not allowed" + CropTypeNameResponse: + description: "A collection of crop types" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: total: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/CropType3' + $ref: "#/components/schemas/CropType2" examples: No Header: - description: '200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb" value: - '@type': CropType - name: CORN_WET - translatedName: Corn - "color": "#FFE119" + "@type": "CropType" + name: "CORN_WET" + translatedName: "Corn" + color: "#FFE119" densityFactor: - '@type': Density + "@type": "Density" value: 25.4 - unit: kg1bu-1 + unit: "kg1bu-1" standardPayableMoisture: - '@type': Moisture + "@type": "Moisture" value: 15 - unit: '%' + unit: "%" supportedEquipmentTypes: - - '@type': SupportedEquipmentType - erid: d9d1c11f-35e0-43af-84ae-696d9ea3c18b - equipmentTypeProtoEnum: ET_CORN_HEAD - - '@type': SupportedEquipmentType - erid: d8dce5b0-cc8d-4c34-afac-27d93793bd86 - equipmentTypeProtoEnum: ET_COMBINE - - '@type': SupportedEquipmentType - erid: 57c1e304-bf44-4c50-bf3e-0e910d528b92 - equipmentTypeProtoEnum: ET_BALER - "lastModifiedTime": "2021-10-14T11:55:00Z" - id: '173' + - "@type": "SupportedEquipmentType" + erid: "d9d1c11f-35e0-43af-84ae-696d9ea3c18b" + equipmentTypeProtoEnum: "ET_CORN_HEAD" + - "@type": "SupportedEquipmentType" + erid: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + equipmentTypeProtoEnum: "ET_COMBINE" + - "@type": "SupportedEquipmentType" + erid: "57c1e304-bf44-4c50-bf3e-0e910d528b92" + equipmentTypeProtoEnum: "ET_BALER" + lastModifiedTime: "2021-10-14T11:55:00Z" + id: "173" links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/cropTypes/CORN_WET + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" + CropTypeNotFound: + description: "Not found" CropTypeorganizationResponse: - description: A collection of crop types + description: "A collection of crop types" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: total: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/CropType4' + $ref: "#/components/schemas/CropType4" examples: No Header: - description: '200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 9b5392615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: ' https://sandboxapi.deere.com/platform/cropTypes' - - rel: nextPage - uri: ' https://sandboxapi.deere.com/platform/cropTypes;start=10;count=10' + - rel: "self" + uri: " https://sandboxapi.deere.com/platform/cropTypes" + - rel: "nextPage" + uri: " https://sandboxapi.deere.com/platform/cropTypes;start=10;count=10" total: 216 values: - - '@type': CropType - name: CORN_WET - translatedName: Corn - "color": "#FFE119" + - "@type": "CropType" + name: "CORN_WET" + translatedName: "Corn" + color: "#FFE119" densityFactor: - '@type': Density + "@type": "Density" value: 25.4 - unit: kg1bu-1 + unit: "kg1bu-1" standardPayableMoisture: - '@type': Moisture + "@type": "Moisture" value: 15 - unit: '%' + unit: "%" supportedEquipmentTypes: - - '@type': SupportedEquipmentType - erid: d9d1c11f-35e0-43af-84ae-696d9ea3c18b - equipmentTypeProtoEnum: ET_CORN_HEAD - - '@type': SupportedEquipmentType - erid: d8dce5b0-cc8d-4c34-afac-27d93793bd86 - equipmentTypeProtoEnum: ET_COMBINE - - '@type': SupportedEquipmentType - erid: 57c1e304-bf44-4c50-bf3e-0e910d528b92 - equipmentTypeProtoEnum: ET_BALER - "lastModifiedTime": "2021-10-14T11:55:00Z" - id: '173' + - "@type": "SupportedEquipmentType" + erid: "d9d1c11f-35e0-43af-84ae-696d9ea3c18b" + equipmentTypeProtoEnum: "ET_CORN_HEAD" + - "@type": "SupportedEquipmentType" + erid: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + equipmentTypeProtoEnum: "ET_COMBINE" + - "@type": "SupportedEquipmentType" + erid: "57c1e304-bf44-4c50-bf3e-0e910d528b92" + equipmentTypeProtoEnum: "ET_BALER" + lastModifiedTime: "2021-10-14T11:55:00Z" + id: "173" links: - - '@type': Link - rel: self - uri: ' https://sandboxapi.deere.com/platform/cropTypes/CORN_WET' - - CropTypeMethodNotAllowed: - description: The requested method is not allowed - - CropTypeNotFound: - description: Not found - + - "@type": "Link" + rel: "self" + uri: " https://sandboxapi.deere.com/platform/cropTypes/CORN_WET" schemas: CropType: - type: object + type: "object" properties: x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 9b5392615e4b4e1c92013026f47109bb + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "9b5392615e4b4e1c92013026f47109bb" id: - type: string - description: The primary identifier for the operation. - example: '1' + type: "string" + description: "The primary identifier for the operation." + example: "1" name: - type: string - description: This is the crop type name. - example: CORN_WET + type: "string" + description: "This is the crop type name." + example: "CORN_WET" translatedName: - type: string - description: This is the crop type name translated using the Accept-Language header. - example: Corn + type: "string" + description: "This is the crop type name translated using the Accept-Language header." + example: "Corn" color: - type: string - description: This is the color associated with the crop type. - example: '#FFE119' + type: "string" + description: "This is the color associated with the crop type." + example: "#FFE119" lastModifiedTime: - type: string - description: This is the zoned last modified time of the crop type. - example: '2021-10-14T11:55:00Z' + type: "string" + description: "This is the zoned last modified time of the crop type." + example: "2021-10-14T11:55:00Z" Density: properties: value: - type: number - example: '0.0' - description: This is cropType densityFactor value. + type: "number" + example: "0.0" + description: "This is cropType densityFactor value." unit: - type: string - example: lb1bu-1 - description: This indicates the unit. + type: "string" + example: "lb1bu-1" + description: "This indicates the unit." Moisture: properties: value: - type: number - example: '1.0' - description: This is the standard payable moisture value for the crop type. + type: "number" + example: "1.0" + description: "This is the standard payable moisture value for the crop type." unit: - type: string - example: '%' - description: This indicates the unit. + type: "string" + example: "%" + description: "This indicates the unit." Supported Equipment Types (REPLACES HARVEST MACHINE TYPE): properties: erid: - type: string - description: This is the entity resource identifier for the corresponding equipment type - example: 'e87e0d9a-91ab-42ea-9000-f96950a64411' + type: "string" + description: "This is the entity resource identifier for the corresponding equipment type" + example: "e87e0d9a-91ab-42ea-9000-f96950a64411" equipmentTypeProtoEnum: - type: string - example: ET_COMBINE - description: This is the equipment type enumeration value + type: "string" + example: "ET_COMBINE" + description: "This is the equipment type enumeration value" CropType2: - type: object + type: "object" properties: x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 9b5392615e4b4e1c92013026f47109bb + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "9b5392615e4b4e1c92013026f47109bb" id: - type: string - description: The primary identifier for the operation. - example: '1' + type: "string" + description: "The primary identifier for the operation." + example: "1" name: - type: string - description: This is the crop type name. - example: ENERGY_CANE + type: "string" + description: "This is the crop type name." + example: "ENERGY_CANE" translatedName: - type: string - description: This is the crop type name translated using the Accept-Language header. - example: Corn + type: "string" + description: "This is the crop type name translated using the Accept-Language header." + example: "Corn" color: - type: string - description: This is the color associated with the crop type. - example: '#FFE119' + type: "string" + description: "This is the color associated with the crop type." + example: "#FFE119" lastModifiedTime: - type: string - description: This is the zoned last modified time of the crop type. - example: '2021-10-14T11:55:00Z' + type: "string" + description: "This is the zoned last modified time of the crop type." + example: "2021-10-14T11:55:00Z" Density: properties: value: - type: number - example: '0.0' - description: This is cropType densityFactor value. + type: "number" + example: "0.0" + description: "This is cropType densityFactor value." unit: - type: string - example: lb1bu-1 - description: This indicates the unit. + type: "string" + example: "lb1bu-1" + description: "This indicates the unit." Moisture: properties: moistureValue: - type: number - example: '1.0' - description: This is cropType standardPayableMoisture value. + type: "number" + example: "1.0" + description: "This is cropType standardPayableMoisture value." moistureUnit: - type: string - example: '%' - description: This indicates the unit. + type: "string" + example: "%" + description: "This indicates the unit." Supported Equipment Types (REPLACES HARVEST MACHINE TYPE): properties: erid: - type: string - description: This is the entity resource identifier for the corresponding equipment type - example: 'e87e0d9a-91ab-42ea-9000-f96950a64411' + type: "string" + description: "This is the entity resource identifier for the corresponding equipment type" + example: "e87e0d9a-91ab-42ea-9000-f96950a64411" equipmentTypeProtoEnum: - type: string - example: ET_COMBINE - description: This is the equipment type enumeration value + type: "string" + example: "ET_COMBINE" + description: "This is the equipment type enumeration value" CropType3: - type: object + type: "object" properties: x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 9b5392615e4b4e1c92013026f47109bb + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "9b5392615e4b4e1c92013026f47109bb" id: - type: string - description: The primary identifier for the operation. - example: '1' + type: "string" + description: "The primary identifier for the operation." + example: "1" name: - type: string - description: This is the crop type name. - example: CORN_WET + type: "string" + description: "This is the crop type name." + example: "CORN_WET" translatedName: - type: string - description: This is the crop type name translated using the Accept-Language header. - example: Corn + type: "string" + description: "This is the crop type name translated using the Accept-Language header." + example: "Corn" color: - type: string - description: This is the color associated with the crop type. - example: '#FFE119' + type: "string" + description: "This is the color associated with the crop type." + example: "#FFE119" lastModifiedTime: - type: string - description: This is the zoned last modified time of the crop type. - example: '2021-10-14T11:55:00Z' + type: "string" + description: "This is the zoned last modified time of the crop type." + example: "2021-10-14T11:55:00Z" Density: properties: value: - type: number - example: '0.0' - description: This is cropType densityFactor value. + type: "number" + example: "0.0" + description: "This is cropType densityFactor value." unit: - type: string - example: lb1bu-1 - description: This indicates the unit. + type: "string" + example: "lb1bu-1" + description: "This indicates the unit." Moisture: properties: value: - type: number - example: '1.0' - description: This is the standard payable moisture value for the crop type. + type: "number" + example: "1.0" + description: "This is the standard payable moisture value for the crop type." unit: - type: string - example: '%' - description: This indicates the unit. + type: "string" + example: "%" + description: "This indicates the unit." Supported Equipment Types (REPLACES HARVEST MACHINE TYPE): properties: erid: - type: string - description: This is the entity resource identifier for the corresponding equipment type - example: 'e87e0d9a-91ab-42ea-9000-f96950a64411' + type: "string" + description: "This is the entity resource identifier for the corresponding equipment type" + example: "e87e0d9a-91ab-42ea-9000-f96950a64411" equipmentTypeProtoEnum: - type: string - example: ET_COMBINE - description: This is the equipment type enumeration value + type: "string" + example: "ET_COMBINE" + description: "This is the equipment type enumeration value" CropType4: - type: object + type: "object" properties: x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 9b5392615e4b4e1c92013026f47109bb + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "9b5392615e4b4e1c92013026f47109bb" id: - type: string - description: The primary identifier for the operation. - example: '1' + type: "string" + description: "The primary identifier for the operation." + example: "1" name: - type: string - description: This is the crop type name. - example: CORN_WET + type: "string" + description: "This is the crop type name." + example: "CORN_WET" translatedName: - type: string - description: This is the crop type name translated using the Accept-Language header. - example: Corn + type: "string" + description: "This is the crop type name translated using the Accept-Language header." + example: "Corn" color: - type: string - description: This is the color associated with the crop type. - example: '#FFE119' + type: "string" + description: "This is the color associated with the crop type." + example: "#FFE119" lastModifiedTime: - type: string - description: This is zoned last modified time of the crop type. - example: '2021-10-14T11:55:00Z' + type: "string" + description: "This is zoned last modified time of the crop type." + example: "2021-10-14T11:55:00Z" Density: properties: value: - type: number - example: '0.0' - description: This is cropType densityFactor value. + type: "number" + example: "0.0" + description: "This is cropType densityFactor value." unit: - type: string - example: lb1bu-1 - description: This indicates the unit. + type: "string" + example: "lb1bu-1" + description: "This indicates the unit." Moisture: properties: value: - type: number - example: '1.0' - description: This is the standard payable moisture value for the crop type. + type: "number" + example: "1.0" + description: "This is the standard payable moisture value for the crop type." unit: - type: string - example: '%' - description: This indicates the unit. + type: "string" + example: "%" + description: "This indicates the unit." Supported Equipment Types (REPLACES HARVEST MACHINE TYPE): properties: erid: - type: string - description: This is the entity resource identifier for the corresponding equipment type - example: 'e87e0d9a-91ab-42ea-9000-f96950a64411' + type: "string" + description: "This is the entity resource identifier for the corresponding equipment type" + example: "e87e0d9a-91ab-42ea-9000-f96950a64411" equipmentTypeProtoEnum: - type: string - example: ET_COMBINE - description: This is the equipment type enumeration value - + type: "string" + example: "ET_COMBINE" + description: "This is the equipment type enumeration value" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" diff --git a/specs/raw/equipment-measurement.yaml b/specs/raw/equipment-measurement.yaml index 97bd170..029d7bb 100644 --- a/specs/raw/equipment-measurement.yaml +++ b/specs/raw/equipment-measurement.yaml @@ -1,563 +1,535 @@ -openapi: 3.0.0 +openapi: "3.0.0" info: - title: Equipment Measurements - description: This resource allows the client to provide metadata for a third-party managed piece of equipment in Operations Center. - version: '1.0' + title: "Equipment Measurements" + description: "This resource allows the client to provide metadata for a third-party managed piece of equipment in Operations Center." + version: "1.0" x-deere-proxy-info: - api-name: inbound-measurements + api-name: "inbound-measurements" license: "INBOUND_MEASUREMENTS" proxy-prefix: "/isg" prefix-rewrite: "" service-now-ci: "jd-us01-isg-qual.b2b-data-transfer" - default-service-name: inbound-measurements + default-service-name: "inbound-measurements" qual: enabled: true services: - - service-name: inbound-measurements - hostname: inbound-measurements-api.qual.us.i01.c01.johndeerecloud.com + - service-name: "inbound-measurements" + hostname: "inbound-measurements-api.qual.us.i01.c01.johndeerecloud.com" cert: enabled: true services: - - service-name: inbound-measurements - hostname: inbound-measurements-api.cert.us.i01.c01.johndeerecloud.com + - service-name: "inbound-measurements" + hostname: "inbound-measurements-api.cert.us.i01.c01.johndeerecloud.com" prod: enabled: true services: - - service-name: inbound-measurements - hostname: inbound-measurements-api.prod.us.i01.c01.johndeerecloud.com - + - service-name: "inbound-measurements" + hostname: "inbound-measurements-api.prod.us.i01.c01.johndeerecloud.com" servers: - - url: 'https://equipmentapi-qual.deere.com/isg' - - url: 'https://equipmentapi-cert.deere.com/isg' - - url: 'https://equipmentapi.deere.com/isg' - + - url: "https://equipmentapi-qual.deere.com/isg" + - url: "https://equipmentapi-cert.deere.com/isg" + - url: "https://equipmentapi.deere.com/isg" paths: - '/organizations/{organizationId}/equipment/{principalId}/measurements': + /organizations/{organizationId}/equipment/{principalId}/measurements: post: - summary: Contribute measurements for a given equipment (NEW) - description: "This resource allows the client to provide metadata for a third-party managed piece of equipment in Operations Center. -

Getting Started
The process of contributing equipment measurement data to John Deere can be broken down into three primary steps. -
    -
  1. Determine the Equipment’s make, type, and model IDs
  2. -
  3. Create the Equipment. Please see the Equipment API for more information on creating equipment.
  4. -
  5. Contribute Measurements
  6. -
+ summary: "Contribute measurements for a given equipment (NEW)" + description: "This resource allows the client to provide metadata for a third-party managed piece of equipment in Operations Center.

Getting Started
The process of contributing equipment measurement data to John Deere can be broken down into three primary steps.
  1. Determine the Equipment’s make, type, and model IDs
  2. Create the Equipment. Please see the Equipment API for more information on creating equipment.
  3. Contribute Measurements
- Determining the Equipment’s make, type, and model -
    -
  1. Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require.
  2. -
  3. Call the GET /equipmentMakes/{id}/equipmentTypes endpoint to get a list of associated equipment types for that specific equipment make and obtain a respective “id” for a specific type you require.
  4. -
  5. Call the GET /equipmentMakes/{id}/equipmentTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require.
  6. -
  7. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example - /equipmentModels?equipmentModelName=9RX*&embed=make,type which will include all models with search string results and include make and type 'id' as well as model 'id'.
  8. -
+ Determining the Equipment’s make, type, and model
  1. Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require.
  2. Call the GET /equipmentMakes/{id}/equipmentTypes endpoint to get a list of associated equipment types for that specific equipment make and obtain a respective “id” for a specific type you require.
  3. Call the GET /equipmentMakes/{id}/equipmentTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require.
  4. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,type which will include all models with search string results and include make and type 'id' as well as model 'id'.
- Create the Equipment
- Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org. -
    -
  • In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment make, type, and model IDs.
  • -
      -
    • type: Machine or Implement
    • -
    • serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization.
    • -
    • name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization.
    • -
    • make: The ID for the Make of the vehicle, found from the previous step of this document.
    • -
    • type: The ID for the Type of the vehicle, found from the API in previous step of this document.
    • -
    • model: The id for the Model of the vehicle, found from the API in the previous step of this document.
    • -
    -
  • A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie 'https://equipmentapi.deere.com/isg/equipment/12345' is a link to the machine 12345).
  • -
  • Once the equipment is created, you will need to follow the location header link provided above and obtain the 'principalId' of the equipment which will be used in the measurements POST URL.
  • -
  • If you attempt to create a machine with a vin that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information.
  • -
  • If you attempt to create a machine with a name that already exists within the organization, you will receive a 400 Bad Request response. The body will include the error information.
  • -
- Contribute Measurements -
- First, you must call the returned URL for the equipment created in above steps to view the new machine record, to obtain the “principalId” of the machine. Then, make a POST call to the /organizations/{organizationId}/equipment/{principalId}/measurements API endpoint to provide metadata for the equipment that you created in the previous steps. -
    -
  • A properly formatted message will result in a 204 No Content response indicating that the measurement has been taken for processing. After a short delay (generally less than 30 seconds) you should see the icon on the Operations Center map reflecting the new information.
  • -
  • You MUST pass the “principalId” of the equipment (obtained from querying the equipment record in the GET /equipment endpoint) otherwise the API will return an error. We check to ensure the calling application and user has access to the current controlling organization of the equipment prior to accepting the measurements. Measurement will only be shown in the current controlling organization of the equipment.
  • -
" + Create the Equipment
Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org.
  • In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment make, type, and model IDs.
    • type: Machine or Implement
    • serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization.
    • name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization.
    • make: The ID for the Make of the vehicle, found from the previous step of this document.
    • type: The ID for the Type of the vehicle, found from the API in previous step of this document.
    • model: The id for the Model of the vehicle, found from the API in the previous step of this document.
  • A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie 'https://equipmentapi.deere.com/isg/equipment/12345' is a link to the machine 12345).
  • Once the equipment is created, you will need to follow the location header link provided above and obtain the 'principalId' of the equipment which will be used in the measurements POST URL.
  • If you attempt to create a machine with a vin that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information.
  • If you attempt to create a machine with a name that already exists within the organization, you will receive a 400 Bad Request response. The body will include the error information.
Contribute Measurements
First, you must call the returned URL for the equipment created in above steps to view the new machine record, to obtain the “principalId” of the machine. Then, make a POST call to the /organizations/{organizationId}/equipment/{principalId}/measurements API endpoint to provide metadata for the equipment that you created in the previous steps.
  • A properly formatted message will result in a 204 No Content response indicating that the measurement has been taken for processing. After a short delay (generally less than 30 seconds) you should see the icon on the Operations Center map reflecting the new information.
  • You MUST pass the “principalId” of the equipment (obtained from querying the equipment record in the GET /equipment endpoint) otherwise the API will return an error. We check to ensure the calling application and user has access to the current controlling organization of the equipment prior to accepting the measurements. Measurement will only be shown in the current controlling organization of the equipment.
" parameters: - - $ref: '#/components/parameters/OrganizationId' - - $ref: '#/components/parameters/EquipmentId' + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/EquipmentId" security: - - OAuth2: [ eq2 ] + - OAuth2: + - "eq2" requestBody: - description: A list of measurements provided. + description: "A list of measurements provided." content: application/json: schema: - $ref: '#/components/schemas/EquipmentMeasurementsNew' + $ref: "#/components/schemas/EquipmentMeasurementsNew" examples: No Header: value: - - timestamp: 2024-05-20T18:44:17.299Z + - timestamp: "2024-05-20T18:44:17.299Z" measurements: - - name: vehicleSpeed + - name: "vehicleSpeed" value: 19.5 - unit: kph - - name: latitude - value: 41.516550 - unit: degrees - - name: longitude + unit: "kph" + - name: "latitude" + value: 41.51655 + unit: "degrees" + - name: "longitude" value: -93.502778 - unit: degrees - - name: engineState - value: On - - name: odometer + unit: "degrees" + - name: "engineState" + value: "On" + - name: "odometer" value: 132992 - unit: km - - name: engineHours + unit: "km" + - name: "engineHours" value: 21350.8 - unit: hours - - name: heading + unit: "hours" + - name: "heading" value: 89.9 - unit: degrees - - name: fuelLevelPercentage + unit: "degrees" + - name: "fuelLevelPercentage" value: 35.7 - unit: percent - - name: PTOstatus - value: On - - name: EngineSpeed + unit: "percent" + - name: "PTOstatus" + value: "On" + - name: "EngineSpeed" value: 19.5 - unit: rpm + unit: "rpm" responses: - 204: - description: Created - $ref: '#/components/responses/CreateEquip' - 400: - description: Measurement format invalid or an unexpected measurements name was found. - 403: - description: The user is not allowed to contribute measurements for this machine. - 404: - description: No machine was found with the provided machineId within the provided organization. - + "204": + description: "Created" + $ref: "#/components/responses/CreateEquip" + "400": + description: "Measurement format invalid or an unexpected measurements name was found." + "403": + description: "The user is not allowed to contribute measurements for this machine." + "404": + description: "No machine was found with the provided machineId within the provided organization." contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/json: schema: - $ref: '#/components/schemas/ContentType' + $ref: "#/components/schemas/ContentType" Accept: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/json: schema: - $ref: '#/components/schemas/Accept' - + $ref: "#/components/schemas/Accept" components: parameters: - MachineId: - in: path - name: machineId - description: The identifier of the machine + EquipmentId: + in: "path" + name: "principalId" + description: "The master record identifier of the equipment" required: true schema: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1234 - OrganizationId: - in: path - name: organizationId - description: The identifier of the organization + MachineId: + in: "path" + name: "machineId" + description: "The identifier of the machine" required: true schema: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1234 - EquipmentId: - in: path - name: principalId - description: The master record identifier of the equipment + OrganizationId: + in: "path" + name: "organizationId" + description: "The identifier of the organization" required: true schema: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1234 - + responses: + CreateEquip: + description: "No Content" + content: + application/json: + schema: + type: "object" + examples: + Headers: + description: "204 No Content" schemas: - PTOStatusValue: - type: object + Accept: + properties: + Accept: "application/json" + ContentType: + properties: + Content-Type: "application/json" + EngineStateValue: + type: "object" properties: value: - type: string - enum: [ On, Off, Fault, Unavailable ] - description: 'Status of PTO (Power Take-Off). ptoStatus possible values are: On, Off, Fault, or Unavailable.' - example: 'On' + type: "string" + enum: + - "On" + - "Off" + description: "State of the engine. engineState only possible values are: On or Off." + example: "On" required: true - - MeasurementNew: - title: Measurement - type: object + Equipment: + title: "Equipment" + type: "object" + properties: + id: + type: "integer" + description: "Equipment Id of a configured equipment" + example: 7269 + format: "int64" + make: + type: "string" + description: "Make of a configured equipment, maxLength = 20" + example: "JOHN DEERE" + name: + type: "string" + description: "Name of a configured equipment (sometimes called model). maxLength" + example: 6120 + EquipmentMeasurements: + properties: + timestamp: + type: "string" + format: "date-time" + description: "Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order." + measurements: + type: "array" + format: "date-time" + items: + $ref: "#/components/schemas/Measurement" + EquipmentMeasurementsNew: + properties: + timestamp: + type: "string" + format: "date-time" + description: "Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order." + measurements: + type: "array" + format: "date-time" + items: + $ref: "#/components/schemas/MeasurementNew" + Measurement: + title: "Measurement" + type: "object" properties: Speed: allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: string + - $ref: "#/components/schemas/MeasurementValue" + - type: "string" properties: name: - type: string - enum: [ vehicleSpeed ] - description: 'Name identifying which measurement this value corresponds to. vehicleSpeed only possible value for providing speed.' + type: "string" + enum: + - "vehicleSpeed" + description: "Name identifying which measurement this value corresponds to. vehicleSpeed only possible value for providing speed." required: true unit: - type: string - enum: [ kph ] - description: 'The unit of measure we should interpret the value as. kph is currently the only supported unit for speed.' - - + type: "string" + enum: + - "kph" + description: "The unit of measure we should interpret the value as. kph is currently the only supported unit for speed." Heading: allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object + - $ref: "#/components/schemas/MeasurementValue" + - type: "object" properties: name: - type: string - enum: [ heading ] - description: 'Name identifying which measurement this value corresponds to. heading only possible value for providing heading.' + type: "string" + enum: + - "heading" + description: "Name identifying which measurement this value corresponds to. heading only possible value for providing heading." required: true unit: - type: string - enum: [ degrees ] - description: 'The unit of measure we should interpret the value as. degrees is currently the only supported unit for heading.' - - + type: "string" + enum: + - "degrees" + description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for heading." FuelLevel: allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object + - $ref: "#/components/schemas/MeasurementValue" + - type: "object" properties: name: - type: string - enum: [ fuelLevelPercentage ] - description: 'Name identifying which measurement this value corresponds to. fuelLevelPercentage only possible value for providing fuel.' + type: "string" + enum: + - "fuelLevelPercentage" + description: "Name identifying which measurement this value corresponds to. fuelLevelPercentage only possible value for providing fuel." required: true unit: - type: string - enum: [ percent ] - description: 'The unit of measure we should interpret the value as. percent is currently the only supported unit for fuel level.' - + type: "string" + enum: + - "percent" + description: "The unit of measure we should interpret the value as. percent is currently the only supported unit for fuel level." Latitude: - title: Latitude - type: object + title: "Latitude" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object + - $ref: "#/components/schemas/MeasurementValue" + - type: "object" properties: name: - type: string - enum: [ latitude ] - description: 'Name identifying which measurement this value corresponds to. latitude only possible value for providing latitude.' + type: "string" + enum: + - "latitude" + description: "Name identifying which measurement this value corresponds to. latitude only possible value for providing latitude." required: true unit: - type: string - enum: [ degrees ] - description: 'The unit of measure we should interpret the value as. degrees is currently the only supported unit for latitude' - + type: "string" + enum: + - "degrees" + description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for latitude" Longitude: - title: Longitude - type: object + title: "Longitude" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object + - $ref: "#/components/schemas/MeasurementValue" + - type: "object" properties: name: - type: string - enum: [ longitude ] - description: 'Name identifying which measurement this value corresponds to. longitude only possible value for providing longitude.' + type: "string" + enum: + - "longitude" + description: "Name identifying which measurement this value corresponds to. longitude only possible value for providing longitude." required: true unit: - type: string - enum: [ degrees ] - description: 'The unit of measure we should interpret the value as. degrees is currently the only supported unit for longitude' - + type: "string" + enum: + - "degrees" + description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for longitude" EngineState: - title: EngineState - type: object + title: "EngineState" + type: "object" allOf: - - $ref: '#/components/schemas/EngineStateValue' - - type: object + - $ref: "#/components/schemas/EngineStateValue" + - type: "object" properties: name: - type: string - enum: [ engineState ] - description: 'Name identifying which measurement this value corresponds to. engineState only possible value for providing engineState.' + type: "string" + enum: + - "engineState" + description: "Name identifying which measurement this value corresponds to. engineState only possible value for providing engineState." required: true - Odometer: - title: Odometer - type: object + title: "Odometer" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object + - $ref: "#/components/schemas/MeasurementValue" + - type: "object" properties: name: - type: string - enum: [ odometer ] - description: 'Name identifying which measurement this value corresponds to. odometer only possible value for providing odometerReading.' + type: "string" + enum: + - "odometer" + description: "Name identifying which measurement this value corresponds to. odometer only possible value for providing odometerReading." required: true unit: - type: string - enum: [ km ] - description: 'The unit of measure we should interpret the value as. km is currently the only supported unit for odometerReading' - + type: "string" + enum: + - "km" + description: "The unit of measure we should interpret the value as. km is currently the only supported unit for odometerReading" EngineHours: - title: EngineHours - type: object + title: "EngineHours" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object + - $ref: "#/components/schemas/MeasurementValue" + - type: "object" properties: name: - type: string - enum: [ engineHours ] - description: 'Name identifying which measurement this value corresponds to. engineHours only possible value for providing engineHours.' + type: "string" + enum: + - "engineHours" + description: "Name identifying which measurement this value corresponds to. engineHours only possible value for providing engineHours." required: true unit: - type: string - enum: [ hours ] - description: 'The unit of measure we should interpret the value as. hours is currently the only supported unit for engineHours' - - EngineSpeed: - allOf: - - $ref: '#/components/schemas/MeasurementValueNew' - - type: object - properties: - name: - type: string - enum: [ engineSpeed ] - description: 'Name identifying which measurement this value corresponds to. engineSpeed only possible value for providing engineSpeed.' - required: true - unit: - type: string - enum: [ RPM ] - description: 'The unit of measure we should interpret the value as. RPM is the only supported unit for engineSpeed' - - PTOStatus: - allOf: - - $ref: '#/components/schemas/PTOStatusValue' - - type: object - properties: - name: - type: string - enum: [ ptoStatus ] - description: 'Name identifying which measurement this value corresponds to. ptoStatus only possible value for providing ptoStatus.' - required: true - - EquipmentMeasurements: - properties: - timestamp: - type: string - format: date-time - description: 'Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order.' - measurements: - type: array - format: date-time - items: - $ref: '#/components/schemas/Measurement' - - EquipmentMeasurementsNew: - properties: - timestamp: - type: string - format: date-time - description: 'Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order.' - measurements: - type: array - format: date-time - items: - $ref: '#/components/schemas/MeasurementNew' - - ContentType: - properties: - Content-Type: application/json - - Accept: - properties: - Accept: application/json - - Equipment: - title: Equipment - type: object - properties: - id: - type: integer - description: Equipment Id of a configured equipment - example: 7269 - format: int64 - make: - type: string - description: Make of a configured equipment, maxLength = 20 - example: JOHN DEERE - name: - type: string - description: Name of a configured equipment (sometimes called model). maxLength - example: 6120 - - Measurement: - title: Measurement - type: object + type: "string" + enum: + - "hours" + description: "The unit of measure we should interpret the value as. hours is currently the only supported unit for engineHours" + MeasurementNew: + title: "Measurement" + type: "object" properties: Speed: allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: string + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "string" properties: name: - type: string - enum: [ vehicleSpeed ] - description: 'Name identifying which measurement this value corresponds to. vehicleSpeed only possible value for providing speed.' + type: "string" + enum: + - "vehicleSpeed" + description: "Name identifying which measurement this value corresponds to. vehicleSpeed only possible value for providing speed." required: true unit: - type: string - enum: [ kph ] - description: 'The unit of measure we should interpret the value as. kph is currently the only supported unit for speed.' - + type: "string" + enum: + - "kph" + description: "The unit of measure we should interpret the value as. kph is currently the only supported unit for speed." Heading: allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: object + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" properties: name: - type: string - enum: [ heading ] - description: 'Name identifying which measurement this value corresponds to. heading only possible value for providing heading.' + type: "string" + enum: + - "heading" + description: "Name identifying which measurement this value corresponds to. heading only possible value for providing heading." required: true unit: - type: string - enum: [ degrees ] - description: 'The unit of measure we should interpret the value as. degrees is currently the only supported unit for heading.' - + type: "string" + enum: + - "degrees" + description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for heading." FuelLevel: allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: object + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" properties: name: - type: string - enum: [ fuelLevelPercentage ] - description: 'Name identifying which measurement this value corresponds to. fuelLevelPercentage only possible value for providing fuel.' + type: "string" + enum: + - "fuelLevelPercentage" + description: "Name identifying which measurement this value corresponds to. fuelLevelPercentage only possible value for providing fuel." required: true unit: - type: string - enum: [ percent ] - description: 'The unit of measure we should interpret the value as. percent is currently the only supported unit for fuel level.' - + type: "string" + enum: + - "percent" + description: "The unit of measure we should interpret the value as. percent is currently the only supported unit for fuel level." Latitude: - title: Latitude - type: object + title: "Latitude" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: object + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" properties: name: - type: string - enum: [ latitude ] - description: 'Name identifying which measurement this value corresponds to. latitude only possible value for providing latitude.' + type: "string" + enum: + - "latitude" + description: "Name identifying which measurement this value corresponds to. latitude only possible value for providing latitude." required: true unit: - type: string - enum: [ degrees ] - description: 'The unit of measure we should interpret the value as. degrees is currently the only supported unit for latitude' - + type: "string" + enum: + - "degrees" + description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for latitude" Longitude: - title: Longitude - type: object + title: "Longitude" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: object + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" properties: name: - type: string - enum: [ longitude ] - description: 'Name identifying which measurement this value corresponds to. longitude only possible value for providing longitude.' + type: "string" + enum: + - "longitude" + description: "Name identifying which measurement this value corresponds to. longitude only possible value for providing longitude." required: true unit: - type: string - enum: [ degrees ] - description: 'The unit of measure we should interpret the value as. degrees is currently the only supported unit for longitude' - + type: "string" + enum: + - "degrees" + description: "The unit of measure we should interpret the value as. degrees is currently the only supported unit for longitude" EngineState: - title: EngineState - type: object + title: "EngineState" + type: "object" allOf: - - $ref: '#/components/schemas/EngineStateValue' - - type: object + - $ref: "#/components/schemas/EngineStateValue" + - type: "object" properties: name: - type: string - enum: [ engineState ] - description: 'Name identifying which measurement this value corresponds to. engineState only possible value for providing engineState.' + type: "string" + enum: + - "engineState" + description: "Name identifying which measurement this value corresponds to. engineState only possible value for providing engineState." required: true - Odometer: - title: Odometer - type: object + title: "Odometer" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: object + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" properties: name: - type: string - enum: [ odometer ] - description: 'Name identifying which measurement this value corresponds to. odometer only possible value for providing odometerReading.' + type: "string" + enum: + - "odometer" + description: "Name identifying which measurement this value corresponds to. odometer only possible value for providing odometerReading." required: true unit: - type: string - enum: [ km ] - description: 'The unit of measure we should interpret the value as. km is currently the only supported unit for odometerReading' - + type: "string" + enum: + - "km" + description: "The unit of measure we should interpret the value as. km is currently the only supported unit for odometerReading" EngineHours: - title: EngineHours - type: object + title: "EngineHours" + type: "object" allOf: - - $ref: '#/components/schemas/MeasurementValue' - - type: object + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" properties: name: - type: string - enum: [ engineHours ] - description: 'Name identifying which measurement this value corresponds to. engineHours only possible value for providing engineHours.' + type: "string" + enum: + - "engineHours" + description: "Name identifying which measurement this value corresponds to. engineHours only possible value for providing engineHours." required: true unit: - type: string - enum: [ hours ] - description: 'The unit of measure we should interpret the value as. hours is currently the only supported unit for engineHours' - + type: "string" + enum: + - "hours" + description: "The unit of measure we should interpret the value as. hours is currently the only supported unit for engineHours" + EngineSpeed: + allOf: + - $ref: "#/components/schemas/MeasurementValueNew" + - type: "object" + properties: + name: + type: "string" + enum: + - "engineSpeed" + description: "Name identifying which measurement this value corresponds to. engineSpeed only possible value for providing engineSpeed." + required: true + unit: + type: "string" + enum: + - "RPM" + description: "The unit of measure we should interpret the value as. RPM is the only supported unit for engineSpeed" + PTOStatus: + allOf: + - $ref: "#/components/schemas/PTOStatusValue" + - type: "object" + properties: + name: + type: "string" + enum: + - "ptoStatus" + description: "Name identifying which measurement this value corresponds to. ptoStatus only possible value for providing ptoStatus." + required: true MeasurementValue: - type: string + type: "string" properties: value: - type: number - format: double - description: 'Value of the actual measurement. The value will be used as is so it must be converted to the correct units.' - example: '19.5' + type: "number" + format: "double" + description: "Value of the actual measurement. The value will be used as is so it must be converted to the correct units." + example: "19.5" required: true MeasurementValueNew: - type: string + type: "string" properties: value: - type: number - format: double - description: 'Value of the actual measurement. The value will be used as is so it must be converted to the correct units.' - example: '19.5' + type: "number" + format: "double" + description: "Value of the actual measurement. The value will be used as is so it must be converted to the correct units." + example: "19.5" required: true - - EngineStateValue: - type: object + PTOStatusValue: + type: "object" properties: value: - type: string - enum: [On, Off] - description: 'State of the engine. engineState only possible values are: On or Off.' - example: 'On' + type: "string" + enum: + - "On" + - "Off" + - "Fault" + - "Unavailable" + description: "Status of PTO (Power Take-Off). ptoStatus possible values are: On, Off, Fault, or Unavailable." + example: "On" required: true - responses: - CreateEquip: - description: No Content - content: - application/json: - schema: - type: object - examples: - Headers: - description: '204 No Content' diff --git a/specs/raw/equipment.yaml b/specs/raw/equipment.yaml index bb14b41..865bb38 100644 --- a/specs/raw/equipment.yaml +++ b/specs/raw/equipment.yaml @@ -1,428 +1,264 @@ -openapi: 3.0.3 +openapi: "3.0.3" info: - title: Operations Center - Equipment - description: This API has all the operations for equipment resource. - version: '2.0' + title: "Operations Center - Equipment" + description: "This API has all the operations for equipment resource." + version: "2.0" servers: - - url: 'https://equipmentapi.deere.com/isg' + - url: "https://equipmentapi.deere.com/isg" paths: /equipment: get: tags: - - Equipment - description: "This resource allows the client to view the list of a user's equipment. It can be called with a filter for specific organizations, machine or implement types, but can also be called without a filter to provide a list of all equipment accessible by the user across each organization the user has access to. Equipment will only be returned from organizations the user has access to and are connected to the calling application. If the client requests multiple organizations in the filter, and a user or the client does not have access to that organization, the entire response will be a 403 Forbidden. Please see the OAuth 2 documentation - here for more details on obtaining a user token and connecting the user’s organizations to your application.." - summary: Get equipment + - "Equipment" + description: "This resource allows the client to view the list of a user's equipment. It can be called with a filter for specific organizations, machine or implement types, but can also be called without a filter to provide a list of all equipment accessible by the user across each organization the user has access to. Equipment will only be returned from organizations the user has access to and are connected to the calling application. If the client requests multiple organizations in the filter, and a user or the client does not have access to that organization, the entire response will be a 403 Forbidden. Please see the OAuth 2 documentation here for more details on obtaining a user token and connecting the user’s organizations to your application.." + summary: "Get equipment" parameters: - - $ref: '#/components/parameters/OrganizationEquipmentIds' - - $ref: '#/components/parameters/EquipmentSerialNumbers' - - $ref: '#/components/parameters/OrganizationIds' - - $ref: '#/components/parameters/PrincipalIds' - - $ref: '#/components/parameters/CapableOf' - - $ref: '#/components/parameters/Categories' - - $ref: '#/components/parameters/Role' - - $ref: '#/components/parameters/Archived' - - $ref: '#/components/parameters/EmbedForList' - - $ref: '#/components/parameters/PageOffset' - - $ref: '#/components/parameters/ItemLimit' + - $ref: "#/components/parameters/OrganizationEquipmentIds" + - $ref: "#/components/parameters/EquipmentSerialNumbers" + - $ref: "#/components/parameters/OrganizationIds" + - $ref: "#/components/parameters/PrincipalIds" + - $ref: "#/components/parameters/CapableOf" + - $ref: "#/components/parameters/Categories" + - $ref: "#/components/parameters/Role" + - $ref: "#/components/parameters/Archived" + - $ref: "#/components/parameters/EmbedForList" + - $ref: "#/components/parameters/PageOffset" + - $ref: "#/components/parameters/ItemLimit" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" responses: - '200': - description: Equipment(s) found based on the query parameters and filters. - $ref: '#/components/responses/GetEquipment' - '400': - description: Bad Request - No query parameters provided. + "200": + description: "Equipment(s) found based on the query parameters and filters." + $ref: "#/components/responses/GetEquipment" + "400": + description: "Bad Request - No query parameters provided." content: application/json: schema: - $ref: '#/components/schemas/Errors' - '403': - description: | - Authorization Error + $ref: "#/components/schemas/Errors" + "403": + description: "Authorization Error + - user/applications does not have access to api or resource + or - - user does not have required permissions/BusinessActivities for the org. - /organizations/{organizationId}/equipment: - post: - tags: - - Equipment - description: "This resource allows the client to create a piece of equipment within a user’s organization. -

Getting Started
The process of contributing equipment to John Deere can be broken down into three primary steps. -
    -
  1. Determine the Equipment’s model IDs
  2. -
  3. Create the Equipment
  4. -
  5. Contribute Measurements. Please see the - Equipment Measurements (POST) API for more information on uploading measurements for the created equipment.
  6. -
- Determining the Equipment’s model -
    -
  1. Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require.
  2. -
  3. Call the GET /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated equipment ISG types for that specific equipment make and obtain a respective “id” for a specific ISG type you require.
  4. -
  5. Call the GET /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require.
  6. -
  7. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will include all models with search string results and include make and isgType “id” as well as model “id”.
  8. -
- Creating the Equipment
- Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org. -
    -
  • In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment model IDs.
  • -
      -
    • type: Machine or Implement
    • -
    • serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization.
    • -
    • name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization.
    • -
    • model: The id for the Model of the vehicle, found from the API in the previous step of this document.
    • -
    -
  • A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345).
  • -
  • If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information.
  • -
" - summary: Create equipment - operationId: createEquipment - parameters: - - $ref: '#/components/parameters/organizationId' - security: - - OAuth2: [ eq2 ] - requestBody: - description: Asset to be created. - content: - application/json: - schema: - $ref: '#/components/schemas/createEquipment' - examples: - No Header: - value: - '@type': Machine - name: 'Equipment Name' - serialNumber: 'must_be_unique_string' - model: - '@type': EquipmentModel - id: 66280 - responses: - '201': - description: Created - $ref: '#/components/responses/CreateEquip' - '202': - description: Accepted - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/Errors' - '403': - description: User is not authorized for this request. + + - user does not have required permissions/BusinessActivities for the org.\n" /equipment/{id}: get: tags: - - Equipment - description: This resource allows the client to view the details of one piece of equipment. - summary: View equipment details by Id + - "Equipment" + description: "This resource allows the client to view the details of one piece of equipment." + summary: "View equipment details by Id" parameters: - - $ref: '#/components/parameters/id' - - $ref: '#/components/parameters/Embed' + - $ref: "#/components/parameters/id" + - $ref: "#/components/parameters/Embed" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" responses: - '200': - description: Equipment found by Id or Serial Number - $ref: '#/components/responses/GetEquipmentById' - '403': - description: | - Authorization Error + "200": + description: "Equipment found by Id or Serial Number" + $ref: "#/components/responses/GetEquipmentById" + "403": + description: "Authorization Error + - user/applications does not have access to api or resource + or - - user does not have required permissions/BusinessActivities for the org. - '404': - description: Equipment not found + + - user does not have required permissions/BusinessActivities for the org.\n" + "404": + description: "Equipment not found" put: tags: - - Equipment - description: This resource allows the client to update a piece of equipment within a user’s organization. Clients will only be able to update a piece of equipment that was contributed via the POST /equipment API. John Deere controlled equipment can only be managed via the Equipment application in Operations Center. - summary: Update equipment - operationId: putEquipment + - "Equipment" + description: "This resource allows the client to update a piece of equipment within a user’s organization. Clients will only be able to update a piece of equipment that was contributed via the POST /equipment API. John Deere controlled equipment can only be managed via the Equipment application in Operations Center." + summary: "Update equipment" + operationId: "putEquipment" parameters: - - $ref: '#/components/parameters/id' + - $ref: "#/components/parameters/id" security: - - OAuth2: [ eq2 ] + - OAuth2: + - "eq2" requestBody: - description: Update Equipment + description: "Update Equipment" content: application/json: schema: - $ref: '#/components/responses/UpdateEquipment' + $ref: "#/components/responses/UpdateEquipment" responses: - 200: - description: Patch Successful Updated Equipment - $ref: '#/components/responses/UpdatedEquip' - 400: - description: Bad Request + "200": + description: "Patch Successful Updated Equipment" + $ref: "#/components/responses/UpdatedEquip" + "400": + description: "Bad Request" content: application/json: schema: - $ref: '#/components/schemas/Errors' - 403: - description: User is not authorized for this request. + $ref: "#/components/schemas/Errors" + "403": + description: "User is not authorized for this request." delete: tags: - - Equipment - description: This resource allows the client to delete a piece of equipment within a user’s organization. Clients will only be able to delete a piece of equipment that was contributed via the POST /equipment API. John Deere controlled equipment can only be managed via the Equipment application in Operations Center. - summary: Delete equipment - operationId: deleteEquipment - parameters: - - $ref: '#/components/parameters/id' - security: - - OAuth2: [ eq2 ] - responses: - '200': - description: Deleted - $ref: '#/components/responses/UpdatedEquip' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/Errors' - '403': - description: User is not authorized for this request. - /equipmentMakes: - get: - tags: - - Equipment Makes - description: This resource allows the client to view equipment makes and their associated IDs and names. - summary: Get equipment makes - parameters: - - $ref: '#/components/parameters/Deprecated' - security: - - OAuth2: [ eq1 ] - operationId: getEquipmentMakes - responses: - '200': - description: OK - $ref: '#/components/responses/GetEquipmentMake' - '403': - description: User is not authorized - /equipmentMakes/{equipmentMakeId}: - get: - tags: - - Equipment Makes - description: This resource allows the client to view equipment makes by an equipment make ID. - summary: View equipment by make Id - operationId: getEquipmentMakesById + - "Equipment" + description: "This resource allows the client to delete a piece of equipment within a user’s organization. Clients will only be able to delete a piece of equipment that was contributed via the POST /equipment API. John Deere controlled equipment can only be managed via the Equipment application in Operations Center." + summary: "Delete equipment" + operationId: "deleteEquipment" parameters: - - $ref: '#/components/parameters/EquipmentMakeId' + - $ref: "#/components/parameters/id" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq2" responses: - '200': - description: OK + "200": + description: "Deleted" + $ref: "#/components/responses/UpdatedEquip" + "400": + description: "Bad Request" content: application/json: schema: - properties: - links: - type: array - items: - $ref: '#/components/schemas/link' - values: - type: array - items: - $ref: '#/components/schemas/equipment-make' - examples: - No Header: - value: - '@type': EquipmentMake - name: JOHN DEERE - certified: false - deereOrSubsidiary: true - id: 1 - ERID: 0e8031fe-fe81-11ea-bec7-124fe3772e59 - '403': - description: User is not authorized - '404': - description: Resource Not foundapi-makes - /equipmentMakes/{equipmentMakeId}/equipmentTypes: + $ref: "#/components/schemas/Errors" + "403": + description: "User is not authorized for this request." + /equipmentISGTypes: get: tags: - - Equipment Types - deprecated: true - description: This resource allows the client to view equipment types by providing an equipment make ID. - summary: Get equipment types by make id - note: ' Note: This endpoint is deprecated and should no longer be used.' - operationId: getEquipmentTypesByMakeId + - "Equipment ISG Type Resource" + description: "This operation retrieves a list of Equipment ISG Types based on the supplied query parameters." + operationId: "getEquipmentISGTypes" + summary: "Get equipment ISG types" parameters: - - $ref: '#/components/parameters/EquipmentMakeId' - - $ref: '#/components/parameters/Deprecated' + - $ref: "#/components/parameters/originator" + - $ref: "#/components/parameters/category" + - $ref: "#/components/parameters/deprecated" + - $ref: "#/components/parameters/embed" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" responses: - '200': - description: OK + "200": + description: "OK" content: application/json: schema: properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/link' + $ref: "#/components/schemas/link" values: - type: array + type: "array" items: - $ref: '#/components/schemas/equipment-type' + $ref: "#/components/schemas/equipment-isg-type" examples: No Header: value: - links: [ ] + links: [] values: - - '@type': EquipmentType + - "@type": "EquipmentISGType" name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" + ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" + category: "Machine" + isgmarketSegment: "Construction" allowsCustomModel: true id: "121" - icon: - '@type': EquipmentIcon - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - /equipmentTypes: + deprecated: false + /equipmentMakes: get: tags: - - Equipment Types - deprecated: true - description: This resource allows the client to view equipment types and their associated IDs and names. - note: ' Note: This endpoint is deprecated and should no longer be used.' - summary: Get equipment types - operationId: getEquipmentTypes + - "Equipment Makes" + description: "This resource allows the client to view equipment makes and their associated IDs and names." + summary: "Get equipment makes" parameters: - - $ref: '#/components/parameters/Deprecated' + - $ref: "#/components/parameters/Deprecated" security: - - OAuth2: [ eq1 ] - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - links: - type: array - items: - $ref: '#/components/schemas/link' - values: - type: array - items: - $ref: '#/components/schemas/equipment-type' - examples: - No Header: - value: - links: [ ] - values: - - '@type': EquipmentType - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - '@type': EquipmentIcon - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - /equipmentModels: - get: - parameters: - - $ref: '#/components/parameters/Deprecated' - - $ref: '#/components/parameters/EmbedV1' - - $ref: '#/components/parameters/EquipmentModelName' - tags: - - Equipment Models - description: This resource allows the client to view equipment models in our reference database and their associated IDs and names. - summary: Get equipment models - operationId: getEquipmentModels + - OAuth2: + - "eq1" + operationId: "getEquipmentMakes" responses: - '200': - description: OK - $ref: '#/components/responses/GetEquipmentModelName' - /equipmentISGTypes: + "200": + description: "OK" + $ref: "#/components/responses/GetEquipmentMake" + "403": + description: "User is not authorized" + /equipmentMakes/{equipmentMakeId}: get: tags: - - Equipment ISG Type Resource - description: This operation retrieves a list of Equipment ISG Types based on the supplied query parameters. - operationId: getEquipmentISGTypes - summary: Get equipment ISG types + - "Equipment Makes" + description: "This resource allows the client to view equipment makes by an equipment make ID." + summary: "View equipment by make Id" + operationId: "getEquipmentMakesById" parameters: - - $ref: "#/components/parameters/originator" - - $ref: "#/components/parameters/category" - - $ref: "#/components/parameters/deprecated" - - $ref: "#/components/parameters/embed" + - $ref: "#/components/parameters/EquipmentMakeId" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" responses: - 200: - description: OK + "200": + description: "OK" content: application/json: schema: properties: links: - type: array + type: "array" items: $ref: "#/components/schemas/link" values: - type: array + type: "array" items: - $ref: "#/components/schemas/equipment-isg-type" + $ref: "#/components/schemas/equipment-make" examples: No Header: value: - links: [ ] - values: - - '@type': EquipmentISGType - name: "Scraper" - ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" - category: "Machine" - isgmarketSegment: "Construction" - allowsCustomModel: true - id: "121" - deprecated: false + "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" + "403": + description: "User is not authorized" + "404": + description: "Resource Not foundapi-makes" /equipmentMakes/{equipmentMakeId}/equipmentISGTypes: get: tags: - - Equipment ISG Type Resource - description: This operation retrieves a list of Equipment ISG Types for given makeId.
- operationId: getEquipmentISGTypesByMakeId + - "Equipment ISG Type Resource" + description: "This operation retrieves a list of Equipment ISG Types for given makeId.
" + operationId: "getEquipmentISGTypesByMakeId" parameters: - $ref: "#/components/parameters/EquipmentMakeId" - $ref: "#/components/parameters/deprecated" - $ref: "#/components/parameters/embed" - summary: Get equipment ISG types by make id + summary: "Get equipment ISG types by make id" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" responses: - 200: - description: OK + "200": + description: "OK" content: application/json: schema: properties: links: - type: array + type: "array" items: $ref: "#/components/schemas/link" values: - type: array + type: "array" items: $ref: "#/components/schemas/equipment-isg-type" examples: No Header: value: - links: [ ] + links: [] values: - - '@type': EquipmentISGType + - "@type": "EquipmentISGType" name: "Scraper" ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" category: "Machine" @@ -433,19 +269,20 @@ paths: /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}: get: tags: - - Equipment ISG Type Resource - description: This operation retrieves a single Equipment ISG Type for given makeId and isgTypeId..
- operationId: getEquipmentISGTypeByMakeIdAndISGTypeId + - "Equipment ISG Type Resource" + description: "This operation retrieves a single Equipment ISG Type for given makeId and isgTypeId..
" + operationId: "getEquipmentISGTypeByMakeIdAndISGTypeId" parameters: - $ref: "#/components/parameters/EquipmentMakeId" - $ref: "#/components/parameters/EquipmentISGTypeId" - $ref: "#/components/parameters/embed" security: - - OAuth2: [ eq1 ] - summary: Get equipment ISG type by make id and ISG type id + - OAuth2: + - "eq1" + summary: "Get equipment ISG type by make id and ISG type id" responses: - 200: - description: OK + "200": + description: "OK" content: application/json: schema: @@ -453,7 +290,7 @@ paths: examples: No Header: value: - '@type': EquipmentISGType + "@type": "EquipmentISGType" name: "Scraper" ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" category: "Machine" @@ -461,9 +298,8 @@ paths: deprecated: false allowsCustomModel: true id: "121" - - 404: - description: Resource Not Found. + "404": + description: "Resource Not Found." /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels: get: parameters: @@ -472,47 +308,48 @@ paths: - $ref: "#/components/parameters/deprecated" - $ref: "#/components/parameters/organizationIds" tags: - - Equipment Model Resource - description: This operation retrieves a list of Equipment Models based on given makeId and ISGtypeId. - operationId: getEquipmentModelsByMakeIdAndISGTypeId + - "Equipment Model Resource" + description: "This operation retrieves a list of Equipment Models based on given makeId and ISGtypeId." + operationId: "getEquipmentModelsByMakeIdAndISGTypeId" security: - - OAuth2: [ eq1 ] - summary: Get equipment models by make id and ISG type id + - OAuth2: + - "eq1" + summary: "Get equipment models by make id and ISG type id" responses: - 200: - description: OK + "200": + description: "OK" content: application/json: schema: properties: links: - type: array + type: "array" items: $ref: "#/components/schemas/link" values: - type: array + type: "array" items: $ref: "#/components/schemas/equipment-model" examples: No Header: value: - links: [ ] + links: [] values: - - '@type': EquipmentModel + - "@type": "EquipmentModel" name: "Model" ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" category: "Machine" certified: true deprecated: false id: "121" - 400: - description: Bad Request + "400": + description: "Bad Request" content: application/json: schema: - $ref: '#/components/schemas/Errors' - 403: - description: User/applications does not have the license assigned + $ref: "#/components/schemas/Errors" + "403": + description: "User/applications does not have the license assigned" /equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels/{equipmentModelId}: get: parameters: @@ -520,15 +357,16 @@ paths: - $ref: "#/components/parameters/EquipmentISGTypeId" - $ref: "#/components/parameters/EquipmentModelId" tags: - - Equipment Model Resource - description: This operation retrieves a single Equipment Model based on given makeId, isgTypeId and modelId. - operationId: getEquipmentModelsByMakeIdAndISGTypeIdAndModelId + - "Equipment Model Resource" + description: "This operation retrieves a single Equipment Model based on given makeId, isgTypeId and modelId." + operationId: "getEquipmentModelsByMakeIdAndISGTypeIdAndModelId" security: - - OAuth2: [ eq1 ] - summary: Get equipment model by make id, ISG type id and model id + - OAuth2: + - "eq1" + summary: "Get equipment model by make id, ISG type id and model id" responses: - 200: - description: OK + "200": + description: "OK" content: application/json: schema: @@ -536,2519 +374,2688 @@ paths: examples: No Header: value: - '@type': EquipmentModel + "@type": "EquipmentModel" name: "Model" ERID: "5a734a92-a5a3-4e79-8bba-60c54428690e" category: "Machine" certified: true deprecated: false id: "121" - 403: - description: User is not two-legged authorized - -components: - schemas: - Error: - type: object - properties: - message: - type: string - description: An english description of the error - example: was invalid because - code: - type: string - description: A string constant representing the type of error - example: 400 - field: - type: string - description: The name of the property or parameter deemed invalid - example: Machine.serialNumber - gud: - type: string - format: uuid - description: A reference to this encounter of the error, for traceability and troubleshooting - example: 9b331708-10e8-4e15-8097-a9aed7455d6d - invalidValue: - type: string - description: The value that was supplied for this field in the request - example: null - readOnly: true - Errors: - type: array - items: - $ref: '#/components/schemas/Error' - readOnly: true - link: - type: object - title: Link - properties: - rel: - type: string - example: nextPage - uri: - type: string - description: This will be the relative URL. Users will prefix the base url as per their requirements. - example: /equipment?pageOffset=10&itemSize=10 - equipment-isg-type: - type: object - title: EquipmentIsgType - description: Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata. - example: - name: Tractor - ERID: 82115264-9385-460c-bfbe-177a59445fd9 - category: Machine - allowsCustomModel: true - isgMarketSegment: Agriculture - deprecated: false - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - name: - type: string - description: The name of the ISG equipment type. - example: Tractor - ERID: - type: string - description: Unique identifier for the ISG equipment type. - example: 82115264-9385-460c-bfbe-177a59445fd9 - category: - type: string - description: The category of the ISG equipment type. - enum: [ Machine, Implement, Unknown ] - example: Machine - allowsCustomModel: - type: boolean - description: Indicates if the equipment ISG type allows custom models. - example: true - isgMarketSegment: - type: string - description: The ISG market segment of the equipment ISG type. - enum: [ Unknown, Agriculture, Construction, Engines & Components, Forestry, Turf ] - example: Agriculture - deprecated: - type: boolean - description: Indicates if the ISG equipment type is deprecated. - example: false - # recordMetaData: - # $ref: '#/components/schemas/RecordMetadata' - - RecordMetadata: - type: object - description: | - Data structure for record metadata capturing information about the creation and last update of an entity. - For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). - NOTES - * Some attributes are only visible if the API Client has the required license. - * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.) - properties: - '@type': - type: string - default: RecordMetadata - example: RecordMetadata - createdByUser: - type: string - description: | - User involved in creating the entity. Only viewable with the RECORD_METADATA license - example: XYZ_USER - lastModifiedByUser: - type: string - description: | - User involved in modifying the entity. Only viewable with the RECORD_METADATA license - example: XYZ_USER - userCreationTimestamp: - type: string - description: Timestamp of entity creation - readOnly: true - example: "2018-04-30T10:23:50.000Z" - userLastModifiedTimestamp: - type: string - description: Timestamp of entity modification - readOnly: true - example: "2018-05-01T08:11:23.000Z" - createdBySourceNode: - type: string - format: uuid - description: | - This is the specific instance of an application that created the entity. At this time, it only applies - to Displays. Only viewable with the RECORD_METADATA license. - readOnly: true - example: 0235d40e-02d0-44cb-a126-fff21173fc1f - lastModifiedSourceNode: - type: string - format: uuid - description: | - This is the specific instance of an application that modified the entity. At this time, it only applies - to Displays. Only viewable with the RECORD_METADATA license - readOnly: true - example: 0235d40e-02d0-44cb-a126-fff21173fc1f - createdBySourceSystemUri: - type: string - description: | - Derived off of a client key (application that created) via Application Registry lookup. The - Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) - will be used if no source application exists. Only viewable with the RECORD_METADATA license. - readOnly: true - example: 'https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5' - lastModifiedBySourceSystemUri: - type: string - description: | - Derived off of a client key (application that did last modification) via Application Registry lookup. The - Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) - will be used if no source application exists. Only viewable with the RECORD_METADATA license. - readOnly: true - example: 'https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5' - resourcewithoutLinks: - type: object - title: Resource - properties: - id: - type: string - description: Unique id - example: 363997 | fcdc83cb-8840-4215-84b5-1769889db932 - '@type': - type: string - required: true - description: Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - example: Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - discriminator: - propertyName: '@type' - resource: - type: object - title: Resource - properties: - links: - type: array - items: - $ref: '#/components/schemas/link' - id: - type: string - description: Unique id - example: 363997 | fcdc83cb-8840-4215-84b5-1769889db932 - '@type': - type: string - description: Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - example: Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - required: true - # recordMetaData: - # $ref: '#/components/schemas/RecordMetadata' - discriminator: - propertyName: '@type' - resource-embed: - type: object - title: Resource - properties: - id: - type: string - description: Unique id - example: 363997 | fcdc83cb-8840-4215-84b5-1769889db932 - '@type': - type: string - required: true - description: Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - example: Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - discriminator: - propertyName: '@type' - organization-embed: - type: object - title: Resource - properties: - id: - type: string - description: Unique id - example: 363997 | fcdc83cb-8840-4215-84b5-1769889db932 - '@type': - type: string - required: true - description: Resource - example: Resource - discriminator: - propertyName: '@type' - equipment-make-embed: - type: object - title: EquipmentMake - description: Represents the make of the equipment, including its name, unique identifier, and metadata. - properties: - '@type': - type: string - description: EquipmentMake - example: EquipmentMake - id: - type: string - description: Unique identifier for the equipment make. - example: "1" - name: - type: string - description: The name of the equipment make. - example: JOHN DEERE - ERID: - type: string - description: Unique identifier for the equipment make. - example: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - certified: - type: boolean - description: Indicates if the equipment make is certified. - example: true - deereOrSubsidiary: - type: boolean - description: Indicates if the equipment make is deereOrSubsidiary. - example: true - equipment-make: - type: object - title: EquipmentMake - description: Represents the make of the equipment, including its name, unique identifier, and metadata. - example: - id: 1 - name: JOHN DEERE - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - certified: true - deereOrSubsidiary: true - deprecated: false - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - name: - type: string - description: The name of the equipment make. - example: JOHN DEERE - ERID: - type: string - description: Unique identifier for the equipment make. - example: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - certified: - type: boolean - description: Indicates if the equipment make is certified. - example: true - deereOrSubsidiary: - type: boolean - description: Indicates if the equipment make is deereOrSubsidiary. - example: true - deprecated: - type: boolean - description: Indicates if the equipment make is deprecated. - example: false - # recordMetaData: - # $ref: '#/components/schemas/RecordMetadata' - - equipment-type: - type: object - title: EquipmentType + "403": + description: "User is not two-legged authorized" + /equipmentMakes/{equipmentMakeId}/equipmentTypes: + get: + tags: + - "Equipment Types" deprecated: true - description: Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata. - example: - id: 217 - name: Two-wheel Drive Tractors - 140 Hp And Above - ERID: 82115264-9385-460c-bfbe-177a59445fd9 - category: Machine - certified: true - marketSegment: Agriculture - icon: - url: https://example.com/icon.png - description: Icon representing the equipment type - deprecated: false - allowsCustomModel: true - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - name: - type: string - description: The name of the equipment type. - example: Two-wheel Drive Tractors - 140 Hp And Above - ERID: - type: string - description: Unique identifier for the equipment type. - example: 82115264-9385-460c-bfbe-177a59445fd9 - category: - type: string - description: The category of the equipment type. - enum: [ Machine, Implement, Unknown ] - example: Machine - certified: - type: boolean - description: Indicates if the equipment type is certified. - example: true - allowsCustomModel: - type: boolean - description: Indicates if the equipment type allows custom models. - example: true - marketSegment: - type: string - description: The market segment of the equipment type. - enum: [ Unknown, Agriculture, Commercial Worksite Products, Construction, Engines & Components, Forestry, Mining, Turf ] - example: Agriculture - icon: - $ref: '#/components/schemas/equipment-icon' - deprecated: - type: boolean - description: Indicates if the equipment type is deprecated. - example: false - # recordMetaData: - # $ref: '#/components/schemas/RecordMetadata' - - equipment-type-embed: - type: object - title: EquipmentType - description: Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata. - properties: - '@type': - type: string - description: EquipmentType - example: EquipmentType - id: - type: string - description: Unique identifier for the equipment type. - example: "222" - name: - type: string - description: The name of the equipment type. - example: Combine - ERID: - type: string - description: Unique identifier for the equipment type. - example: 80619ff7-11fa-11ee-bb58-0e5cd6a962d7 - icon-style: - type: object - title: IconStyle - description: icon style - properties: - primaryColor: - type: string - description: primary color of the icon style - secondaryColor: - type: string - description: secondary color of the icon style - equipment-icon: - type: object - title: EquipmentIcon - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - name: - type: string - description: The name of the equipment icon. - example: JOHN DEERE - iconStyle: - $ref: '#/components/schemas/icon-style' - equipment-model-details: - type: object - title: EquipmentModel - allOf: - - type: object - properties: - name: - type: string - example: 8360R - ERID: - type: string - example: 158df9ff-334a-4e0d-86cc-3adca17a9686 - category: - type: string - enum: - - Machine - - Implement - - Unknown - # deprecated: - # type: boolean - # example: false - make: - $ref: '#/components/schemas/equipment-make-embed' - type: - $ref: '#/components/schemas/equipment-type-embed' - icon: - $ref: '#/components/schemas/equipment-icon' - equipment-isg-type-embed: - type: object - title: EquipmentISGType - description: Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata. - properties: - '@type': - type: string - description: EquipmentISGType - example: EquipmentISGType - id: - type: string - description: Unique identifier for the ISG equipment type. - example: "2" - name: - type: string - description: The name of the ISG equipment type. - example: Combine - ERID: - type: string - description: Unique identifier for the ISG equipment type. - example: d8dce5b0-cc8d-4c34-afac-27d93793bd86 - equipment-model: - type: object - title: EquipmentModel - description: Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. - example: - name: 8360R - ERID: 158df9ff-334a-4e0d-86cc-3adca17a9686 - category: Machine - deprecated: false - certified: false - make: - name: JOHN DEERE - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - deprecated: false - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - type: - name: Two-wheel Drive Tractors - 140 Hp And Above - ERID: 82115264-9385-460c-bfbe-177a59445fd9 - category: Machine - certified: true - marketSegment: Agriculture - icon: - url: https://example.com/icon.png - description: Icon representing the equipment type - deprecated: false - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - isgType: - name: Tractor - ERID: 82115264-9385-460c-bfbe-177a59445fd9 - category: Machine - deprecated: false - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - icon: - url: https://example.com/icon.png - description: Icon representing the equipment model - recordMetaData: - createdBy: user123 - createdAt: "2023-10-01T12:00:00Z" - updatedBy: user456 - updatedAt: "2023-10-02T12:00:00Z" - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - name: - type: string - description: The name of the equipment model. - example: 8360R - ERID: - type: string - description: Unique identifier for the equipment model. - example: 158df9ff-334a-4e0d-86cc-3adca17a9686 - category: - type: string - description: The category of the equipment model. - enum: [ Machine, Implement, Unknown ] - example: Machine - deprecated: - type: boolean - description: Indicates if the equipment model is deprecated. - example: false - certified: - type: boolean - description: Indicates if the equipment model is certified. - example: false - make: - $ref: '#/components/schemas/equipment-make' - type: - $ref: '#/components/schemas/equipment-type' - isgType: - $ref: '#/components/schemas/equipment-isg-type' - # icon: - # $ref: '#/components/schemas/equipment-icon' - # recordMetaData: - # $ref: '#/components/schemas/RecordMetadata' - - equipment-model-embed: - type: object - title: EquipmentModel - description: Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. - properties: - '@type': - type: string - description: EquipmentModel - example: EquipmentModel - id: - type: string - description: Unique identifier for the equipment model. - example: "65985" - name: - type: string - description: The name of the equipment model. - example: S680 - ERID: - type: string - description: Unique identifier for the equipment model. - example: f2e7d596-35c6-11e7-af34-123e49453e98 - certified: - type: boolean - description: Indicates if the equipment model is certified. - example: true - equipment-model-no-embed: - type: object - title: EquipmentModel - description: Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. + description: "This resource allows the client to view equipment types by providing an equipment make ID." + summary: "Get equipment types by make id" + note: " Note: This endpoint is deprecated and should no longer be used." + operationId: "getEquipmentTypesByMakeId" + parameters: + - $ref: "#/components/parameters/EquipmentMakeId" + - $ref: "#/components/parameters/Deprecated" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "OK" + content: + application/json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/link" + values: + type: "array" + items: + $ref: "#/components/schemas/equipment-type" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + /equipmentModels: + get: + parameters: + - $ref: "#/components/parameters/Deprecated" + - $ref: "#/components/parameters/EmbedV1" + - $ref: "#/components/parameters/EquipmentModelName" + tags: + - "Equipment Models" + description: "This resource allows the client to view equipment models in our reference database and their associated IDs and names." + summary: "Get equipment models" + operationId: "getEquipmentModels" + responses: + "200": + description: "OK" + $ref: "#/components/responses/GetEquipmentModelName" + /equipmentTypes: + get: + tags: + - "Equipment Types" + deprecated: true + description: "This resource allows the client to view equipment types and their associated IDs and names." + note: " Note: This endpoint is deprecated and should no longer be used." + summary: "Get equipment types" + operationId: "getEquipmentTypes" + parameters: + - $ref: "#/components/parameters/Deprecated" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "OK" + content: + application/json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/link" + values: + type: "array" + items: + $ref: "#/components/schemas/equipment-type" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + /organizations/{organizationId}/equipment: + post: + tags: + - "Equipment" + description: "This resource allows the client to create a piece of equipment within a user’s organization.

Getting Started
The process of contributing equipment to John Deere can be broken down into three primary steps.
  1. Determine the Equipment’s model IDs
  2. Create the Equipment
  3. Contribute Measurements. Please see the Equipment Measurements (POST) API for more information on uploading measurements for the created equipment.
Determining the Equipment’s model
  1. Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require.
  2. Call the GET /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated equipment ISG types for that specific equipment make and obtain a respective “id” for a specific ISG type you require.
  3. Call the GET /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require.
  4. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will include all models with search string results and include make and isgType “id” as well as model “id”.
Creating the Equipment
Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org.
  • In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment model IDs.
    • type: Machine or Implement
    • serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization.
    • name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization.
    • model: The id for the Model of the vehicle, found from the API in the previous step of this document.
  • A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345).
  • If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information.
" + summary: "Create equipment" + operationId: "createEquipment" + parameters: + - $ref: "#/components/parameters/organizationId" + security: + - OAuth2: + - "eq2" + requestBody: + description: "Asset to be created." + content: + application/json: + schema: + $ref: "#/components/schemas/createEquipment" + examples: + No Header: + value: + "@type": "Machine" + name: "Equipment Name" + serialNumber: "must_be_unique_string" + model: + "@type": "EquipmentModel" + id: 66280 + responses: + "201": + description: "Created" + $ref: "#/components/responses/CreateEquip" + "202": + description: "Accepted" + "400": + description: "Bad Request" + content: + application/json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "User is not authorized for this request." +components: + parameters: + Archived: + name: "archived" + in: "query" + required: false + schema: + type: "boolean" + description: "true or false" + CapableOf: + name: "capableOf" + in: "query" + required: false + schema: + type: "string" + enum: + - "Connectivity" + - "!Connectivity" + Categories: + name: "categories" + in: "query" + required: false + schema: + type: "array" + items: + type: "string" + enum: + - "Machine" + - "Implement" + example: + - "Machine" + - "Implement | Machine | Implement" + Deprecated: + name: "deprecated" + in: "path" + required: true + description: "Deprecated value should be false" + schema: + type: "boolean" + example: false + Embed: + name: "embed" + in: "query" + required: false + description: "embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds" + schema: + type: "string" + enum: + - "devices" + - "equipment" + - "pairingDetails" + - "icon" + - "offsets" + - "capabilities" + EmbedForList: + name: "embed" + in: "query" + required: false + description: "embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds" + schema: + type: "string" + enum: + - "devices" + - "equipment" + - "icon" + - "pairingDetails" + EmbedV1: + name: "embed" + in: "query" + required: false + description: "Embed additional attributes if required." + schema: + type: "string" + enum: + - "make" + - "type" + - "isgType" example: - name: 8360R - ERID: 158df9ff-334a-4e0d-86cc-3adca17a9686 - category: Machine - certified: false - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - name: - type: string - description: The name of the equipment model. - example: 8360R - ERID: - type: string - description: Unique identifier for the equipment model. - example: 158df9ff-334a-4e0d-86cc-3adca17a9686 - category: - type: string - description: The category of the equipment model. - enum: [ Machine, Implement, Unknown ] - example: Machine - certified: - type: boolean - description: Indicates if the equipment model is certified. - example: false - identifier: - type: object - title: Identifier of Equipment - description: Identifier of the Equipment like DE-13, DE-17, ERID... - allOf: - - type: object - properties: - type: - required: true - type: string - description: Type of identifier. - enum: - - serialNumber - - ERID - value: - required: true - type: string - description: Value of identifier. - example: RW8360R055358 - organization-role: - type: object - title: OrganizationRole - description: Represents the role of an organization, including its type, effective timestamp, and event. + - "make" + - "type" + EquipmentISGTypeId: + name: "equipmentISGTypeId" + in: "path" + required: true + description: "ID for Equipment ISG Type" + schema: + type: "integer" + format: "int32" + example: 1111 + EquipmentMakeId: + name: "equipmentMakeId" + in: "path" + required: true + description: "ID for Equipment Make" + schema: + type: "integer" + format: "int32" + example: 1111 + EquipmentMakeName: + name: "equipmentTypeId" + in: "query" + required: false + description: "Name for Equipment Make" + schema: + type: "string" + example: "JOHN DEERE" + EquipmentModelId: + name: "equipmentModelId" + in: "path" + required: true + description: "ID for Equipment Model" + schema: + type: "integer" + format: "int32" + example: 3333 + EquipmentModelName: + name: "equipmentModelName" + in: "query" + required: false + description: "It should be equipment model name" + schema: + type: "string" + enum: + - "string or partial string with * wildcard search" example: - type: Controlling - effectiveTS: "2023-10-01T12:00:00Z" - event: CREATION - properties: - type: - type: string - description: The type of the organization role. - enum: - - Controlling - - NonControlling - example: Controlling - effectiveTS: - type: string - format: date-time - description: The timestamp when the role becomes effective. - example: "2023-10-01T12:00:00Z" - event: - type: string - description: The event associated with the organization role. - enum: - - CREATION - - TRANSFER - - SUBSCRIPTION - - PAIRING - - ORDER - - COMMANDED - - DECOMMISSION - example: CREATION - inPossession: - type: boolean - example: true - abstractMeasurement: - type: object - title: AbstractMeasurement - properties: - type: - type: string - unit: - type: string - measurementAsDouble: - type: object - title: MeasurementAsDouble - description: measurement as double - allOf: - - $ref: '#/components/schemas/abstractMeasurement' - - type: object - properties: - type: - type: string - description: type of measurement - unit: - type: string - description: unit of measurement - valueAsDouble: - type: number - format: double - description: measurement value as double - variableRepresentationValue: - type: object - title: VariableRepresentationValue - properties: - variable: - $ref: '#/components/schemas/measurementAsDouble' - measurementAsString: - type: object - title: MeasurementAsString - description: measurement as string - allOf: - - $ref: '#/components/schemas/abstractMeasurement' - - type: object - properties: - type: - type: string - description: type of measurement - unit: - type: string - description: unit of measurement - valueAsString: - type: string - description: measurement value as string - definedTypeRepresentationValue: - type: object - title: DefinedTypeRepresentationValue - properties: - value: - $ref: '#/components/schemas/measurementAsString' - offsets: - type: object - title: Offsets - description: Represents the offsets of a device, including its variable and defined type representation values. - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - Offsets - description: Offsets - example: Offsets - variableRepresentationValues: - type: array - items: - $ref: '#/components/schemas/variableRepresentationValue' - definedTypeRepresentationValues: - type: array - items: - $ref: '#/components/schemas/definedTypeRepresentationValue' - device-make: - type: object - title: DeviceMake - description: Represents the make of a device, including its name and unique identifier (ERID). - example: - name: JOHN DEERE - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - DeviceMake - description: DeviceMake - example: DeviceMake - name: - type: string - description: The name of the device make. - example: JOHN DEERE - ERID: - type: string - description: Unique identifier of the device make. - example: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - device-type: - type: object - title: DeviceType - description: Represents the type of a device, including its name, common name, and unique identifier (ERID). - example: - name: Modem - commonName: TelematicsGateway - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - DeviceType - description: DeviceType - example: DeviceType - name: - type: string - description: The name of the device type. - example: Modem - commonName: - type: string - description: The common name of the device type. - example: TelematicsGateway - ERID: - type: string - description: Unique identifier of the device type. - example: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - device-model: - type: object - title: DeviceModel - description: Represents the model of a device, including its name, unique identifier (ERID), make, and type. - example: - name: JDLink Modem-4G - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - make: - name: JOHN DEERE - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - type: - name: Modem - commonName: TelematicsGateway - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - DeviceModel - description: DeviceModel - example: DeviceModel - name: - type: string - description: The name of the device model. - example: JDLink Modem-4G - ERID: - type: string - description: Unique identifier of the device model. - example: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - make: - $ref: '#/components/schemas/device-make' - type: - $ref: '#/components/schemas/device-type' - version: - type: object - title: Version - description: Represents the version of a device or software, including its name. - example: - name: 3.16.1171 - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - Version - description: Version - example: Version - name: - type: string - description: The name of the version. - example: 3.16.1171 - inability-detail: - type: object - title: InabilityDetail - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - code: - type: string - example: RC14.8.1 - type: - type: string - example: REGISTRATION - description: - type: string - example: SIM registration is required - capability: - type: object - title: Capability - description: List of capabilities of the equipment. - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - Capability - description: Capability - example: Capability - capable: - type: boolean - type: - type: string - enum: - - JDLINK_CONNECTIVITY - - RDA - - WDT - - WIFI_CONNECTIVITY - - CUSTOMER_SIM_CONNECTIVITY - - LEGACY_CONNECTIVITY - - PLANNED_WORK - - DATA_SYNC_SETUP - - CH_REMOTE_ADJUST - - BASE_STATION - - MY_MACHINE - - RDC - - REMOTE_START - inabilityDetails: - type: array - items: - $ref: '#/components/schemas/inability-detail' - equipmentForList: - type: object - title: Equipment - description: Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes. - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - '@type': - type: string - enum: - - Equipment - - Machine - - Implement - description: Equipment | Machine | Implement - example: Equipment - name: - type: string - description: Equipment Name. - example: Cates 8360R 055358 - isoName: - type: string - description: Unique 64-bit ISO NAME used to identify the controller during address claim. - example: b00082000422ed1d - serialNumber: - type: string - description: Serial Number of the Equipment and passed on the query parameter - example: 1RW8360RLCD055358 - engineSerialNumber: - type: string - description: VIN or PIN, more than Serial Number, of the Engine. - example: RG6090L839275 - isSerialNumberCertified: - type: boolean - description: True if this is an official equipment (we have PI information about it). - example: true - modelYear: - type: string - description: Year of model. - example: 2019 - make: - $ref: '#/components/schemas/equipment-make-embed' - type: - $ref: '#/components/schemas/equipment-type-embed' - isgType: - $ref: '#/components/schemas/equipment-isg-type-embed' - model: - $ref: '#/components/schemas/equipment-model-embed' - organization: - $ref: '#/components/schemas/organization-embed' - telematicsCapable: - type: boolean - description: Indicates if the equipment is capable of telematics. - example: true - archived: - type: boolean - description: Indicates if the equipment is archived. - example: true - principalId: - type: string - description: Unique id for principal equipment - example: 12345 - organizationRole: - $ref: '#/components/schemas/organization-role' - ERID: - type: string - description: Unique identifier of the Equipment. - example: fcdc83cb-8840-4215-84b5-1769889db932 - alternateIdentifiers: - type: array - description: List of alternate identifiers of the Equipment like DE-13, DE-17, ERID... - items: - $ref: '#/components/schemas/identifier' - icon: - $ref: '#/components/schemas/equipment-icon' - devices: - type : array - description: List of devices paired with the equipment. - items: - $ref: '#/components/schemas/device' - pairingDetails: - $ref: '#/components/schemas/pairing-details' - archivedTimestamp: - type: string - format: date-time - description: Timestamp when the equipment was archived. - example: "2021-03-10T19:19:46.420Z" - mergedEquipment: - type: array - description: List of equipment that was merged. - items: - $ref: '#/components/schemas/machine' - isCsc: - type: boolean - description: Indicates if the equipment is CSC equipment or not. - example: true - equipment: - type: object - title: Equipment - description: Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes. - allOf: - - $ref: '#/components/schemas/resource' - - type: object - properties: - '@type': - type: string - enum: - - Equipment - - Machine - - Implement - description: Equipment | Machine | Implement - example: Equipment - name: - type: string - description: Equipment Name. - example: Cates 8360R 055358 - isoName: - type: string - description: Unique 64-bit ISO NAME used to identify the controller during address claim. - example: b00082000422ed1d - serialNumber: - type: string - description: Serial Number of the Equipment and passed on the query parameter - example: 1RW8360RLCD055358 - engineSerialNumber: - type: string - description: VIN or PIN, more than Serial Number, of the Engine. - example: RG6090L839275 - isSerialNumberCertified: - type: boolean - description: True if this is an official equipment (we have PI information about it). - example: true - modelYear: - type: string - description: Year of model. - example: 2019 - make: - $ref: '#/components/schemas/equipment-make-embed' - type: - $ref: '#/components/schemas/equipment-type-embed' - isgType: - $ref: '#/components/schemas/equipment-isg-type-embed' - model: - $ref: '#/components/schemas/equipment-model-embed' - organization: - $ref: '#/components/schemas/organization-embed' - telematicsCapable: - type: boolean - description: Indicates if the equipment is capable of telematics. - example: true - archived: - type: boolean - description: Indicates if the equipment is archived. - example: true - principalId: - type: string - description: Unique id for principal equipment - example: 12345 - organizationRole: - $ref: '#/components/schemas/organization-role' - ERID: - type: string - description: Unique identifier of the Equipment. - example: fcdc83cb-8840-4215-84b5-1769889db932 - alternateIdentifiers: - type: array - description: List of alternate identifiers of the Equipment like DE-13, DE-17, ERID... - items: - $ref: '#/components/schemas/identifier' - icon: - $ref: '#/components/schemas/equipment-icon' - offsets: - $ref: '#/components/schemas/offsets' - devices: - type : array - description: List of devices paired with the equipment. - items: - $ref: '#/components/schemas/device' - capabilities: - type: array - description: List of capabilities of the equipment. - items: - $ref: '#/components/schemas/capability' - pairingDetails: - $ref: '#/components/schemas/pairing-details' - archivedTimestamp: - type: string - format: date-time - description: Timestamp when the equipment was archived. - example: "2021-03-10T19:19:46.420Z" - mergedEquipment: - type: array - description: List of equipment that was merged. - items: - $ref: '#/components/schemas/machine' - isCsc: - type: boolean - description: Indicates if the equipment is CSC equipment or not. - example: true - point: - type: object - title: Point - properties: - lat: - type: number - format: double - lon: - type: number - format: double - slope: - type: number - format: double - pairing-details: - type: object - title: PairingDetails - description: Represents the details of the pairing process, including timestamps and location. - example: - paired: true - associationTimestamp: "2023-10-01T12:00:00Z" - disassociationTimestamp: "2023-10-02T12:00:00Z" - confirmationTimestamp: "2023-10-01T12:30:00Z" - location: - latitude: 40.712776 - longitude: -74.005974 - properties: - paired: - type: boolean - description: Indicates if the equipment is paired. - example: true - associationTimestamp: - type: string - format: date-time - description: The timestamp when the equipment was paired. - example: "2023-10-01T12:00:00Z" - disassociationTimestamp: - type: string - format: date-time - description: The timestamp when the equipment was un-paired. - example: "2023-10-02T12:00:00Z" - confirmationTimestamp: - type: string - format: date-time - description: The timestamp when the pairing was confirmed. - example: "2023-10-01T12:30:00Z" - location: - $ref: '#/components/schemas/point' - device: - type: object - title: Device - description: Represents a device, including its serial number, certification status, make, type, model, organization, and other attributes. - example: - '@type': Device - serialNumber: PCMA4GF511111 - make: - name: JOHN DEERE - id: "1" - ERID: f8b43e74-3088-4a38-9d66-30aae1ed1111 - type: - name: Modem - commonName: TelematicsGateway - id: "1" - ERID: d469a324-2036-11ee-bb58-0e5cd6a91111 - model: - name: JDLink Modem-4G - id: "3" - ERID: f413bba6-9f39-410c-866f-c800bf701111 - firmwareVersion: - name: 40.02.049 - organization: - id: "21111" - organizationRole: - type: Controlling - effectiveTS: 2024-04-30T17:53:57Z - event: PAIRING - archived: false - decommissioned: false - stolen: false - principalId: "911111" - equipment: - name: Cattle 9700 SPFH - serialNumber: 1Z09700YAKU621111 - isSerialNumberCertified: true - modelYear: "2019" - make: - name: JOHN DEERE - certified: true - deereOrSubsidiary: true - id: "1" - ERID: db18bdc4-025a-11eb-97e4-0e8d658c1111 - type: - name: Forage Harvester - id: "162" - ERID: 34b07db5-11fb-11ee-8580-0ed5f7261111 - isgType: - name: Forage Harvester - id: "6" - ERID: 99edf0e0-4abb-42d3-9798-327439a31111 - model: - name: 9700 - certified: true - id: "581111" - ERID: 2c8c951e-070a-4e1c-824d-72cca6e71111 - principalId: "661111" - archived: false - organization: - id: "22967" - organizationRole: - type: Controlling - effectiveTS: 2024-04-30T17:53:56.695Z - event: PAIRING - isCsc: false - id: "661111" - ERID: 23fe3ea0-1f95-4ae6-8e12-968729cd1111 - capabilities: - - type: JDLINK_CONNECTIVITY - capable: true - - type: WIFI_CONNECTIVITY - capable: true - pairingDetails: - paired: true - associationTimestamp: 2024-09-28T17:30:24Z - disassociationTimestamp: null - confirmationTimestamp: 2024-10-23T22:17:22Z - location: - lat: 52.780639 - lon: -122.453222 - slope: null - messagesRestricted: false - pairingStatus: PAIRED - orderNumber: "961111" - highFidelityConfigurationVersion: - name: 1Hz_L3X40FT4JDPS0x00_ISG_X8X9SPFH_63978_2024.008.001 - genericConfigurationVersion: - name: 1623F1EF-62C2-4B8B-B5EA-A0FFD6EA76F8 - communicationModules: - - imei: "014642005101111" - imsi: "310170835961111" - iccid: "89011704278359691111" - type: GSM - serviceProvider: Jasper - state: Active - id: "632111" - id: "915111" - ERID: fb537c94-14f1-11ef-871b-1287bcef1111 - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - Device - - Display - - PositionReceiver - - TelematicsGateway - description: Device | Display | PositionReceiver | TelematicsGateway - example: Device - serialNumber: - type: string - description: Serial number of the device and passed on the query parameter - example: PCS171B372381 - isSerialNumberCertified: - type: boolean - description: True if this is an official device (we have PI information about it). - example: true - make: - $ref: '#/components/schemas/device-make' - type: - $ref: '#/components/schemas/device-type' - model: - $ref: '#/components/schemas/device-model' - organization: - $ref: '#/components/schemas/organization-embed' - ERID: - type: string - description: Unique identifier of the Device. - example: fcdc83cb-8840-4215-84b5-1769889db932 - firmwareVersion: - $ref: '#/components/schemas/version' - capabilities: - type: array - items: - $ref: '#/components/schemas/capability' - equipment: - $ref: '#/components/schemas/equipment' - archived: - type: boolean - description: Indicates if the device is archived. - example: true - decommissioned: - type: boolean - description: Indicates if the device is decommissioned. - example: false - stolen: - type: boolean - description: Indicates if the device is stolen. - example: false - principalId: - type: string - description: Unique id for principal device - example: 12345 - organizationRole: - $ref: '#/components/schemas/organization-role' - orderNumber: - type: string - description: Order number associated with the device. - example: 987654321 - pairingDetails: - $ref: '#/components/schemas/pairing-details' - archivedTimestamp: - type: string - format: date-time - description: Timestamp when the device was archived. - example: "2021-03-10T19:19:46.420Z" - display: - type: object - title: Display - allOf: - - $ref: '#/components/schemas/device' - - type: object - properties: - '@type': - type: string - enum: - - Display - description: Display - example: Display - monitors: - uniqueItems: true - type: array - items: - $ref: '#/components/schemas/display-monitors' - display-monitors: - type: object - title: Monitor - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - Monitor - description: Monitor - example: Monitor - type: - type: string - example: Monitor_0 - serialNumber: - type: string - example: PCG410A015392 - resolutionWidth: - type: integer - example: 800 - resolutionHeight: - type: integer - example: 600 - position-receiver: - type: object - title: PositionReceiver - allOf: - - $ref: '#/components/schemas/device' - - type: object - communication-module: - type: object - title: CommunicationModule - description: Represents a communication module, including its serial number, IMEI, IMSI, ICCID, MSISDN, EID, type, service provider, state, and country calling code. - example: - serialNumber: PCS171B372381 - imei: 123456789012345 - imsi: 310150123456789 - iccid: 89014103211118510720 - msisdn: 15555551234 - eid: 89014103211118510720 - type: GSM - serviceProvider: ATT - state: ACTIVE - countryCallingCode: 1 - allOf: - - $ref: '#/components/schemas/resource-embed' - - type: object - properties: - '@type': - type: string - enum: - - CommunicationModule - description: CommunicationModule - example: CommunicationModule - serialNumber: - type: string - description: Serial number of the communication gateway - example: PCS171B372381 - imei: - type: string - description: International Mobile Equipment Identity of the communication module. - example: 123456789012345 - imsi: - type: string - description: International Mobile Subscriber Identity of the communication module. - example: 310150123456789 - iccid: - type: string - description: Integrated Circuit Card Identifier of the communication module. - example: 89014103211118510720 - msisdn: - type: string - description: Mobile Station International Subscriber Directory Number of the communication module. - example: 15555551234 - eid: - type: string - description: Embedded Identity Document of the communication module. - example: 89014103211118510720 - type: - type: string - description: Type of the communication module. - enum: - - GSM - - SATELLITE - - CDMA - - COS - example: GSM - serviceProvider: - type: string - enum: - - IRIDIUM - - ATT - - JASPER - - VERIZON - - COS - - COST - - CUBIC - - ATTIOT - example: ATT - state: - type: string - description: Subscription state of the communication gateway - enum: - - NEW - - ACTIVE - - INACTIVE - - EXPIRED - - PENDING_ACTIVE - - PENDING_INACTIVE - - PENDING_EXPIRED - - PENDING_VERIFICATION - - PENDING_WDT - - TERMINATED - example: ACTIVE - countryCallingCode: - type: string - description: Country calling code of the communication module. - example: 1 - telematics-gateway: - type: object - title: TelematicsGateway - allOf: - - $ref: '#/components/schemas/device' - - type: object - properties: - pairingStatus: - type: string - enum: - - PAIRED - - PENDING_PAIRING - orderNumber: - type: string - highFidelityConfigurationVersion: - $ref: '#/components/schemas/version' - genericConfigurationVersion: - $ref: '#/components/schemas/version' - messagesRestricted: - type: boolean - communicationModules: - type: array - items: - $ref: '#/components/schemas/communication-module' - implement: - type: object - title: Implement - allOf: - - $ref: '#/components/schemas/equipment' - - type: object - properties: - machine: - $ref: '#/components/schemas/machine' - machine: - type: object - title: Machine - allOf: - - $ref: '#/components/schemas/equipment' - - type: object - properties: - implements: - uniqueItems: true - type: array - items: - $ref: '#/components/schemas/implement' - equipment-patch: - type: object - title: PatchDTO - properties: - operation: - type: string - enum: - - UPDATE - path: - type: string - enum: - - /organization - - /archived - - /organizationRole/type - - /name - value: - type: string - description: | - - For transfer request : value={organizationId} - - For archive/unarchive request : value=true/false - - For role update request : value={Controlling} - - For name update request : value={name} - createEquipment: - type: object - title: Equipment Creation - properties: - name: - type: string - description: Equipment Name. - example: Cates 8360R 055358 - serialNumber: - type: string - description: Serial Number of the Equipment and passed on the query parameter - example: Must be unique string. Max character count is 30. - required: true - model: - required: true - type: object - title: Model of the equipment. - description: Model of the equipment. - properties: - id: - type: string - description: Unique id - example: 3 | 158df9ff-334a-4e0d-86cc-3adca17a9686 - required: true - '@type': - type: string - description: EquipmentModel - example: EquipmentModel - required: true - parameters: - embed: - name: embed - in: query + - "9RX420" + - "9RX*" + EquipmentSerialNumbers: + name: "serialNumbers" + in: "query" required: false - description: List of embed data for the Equipment ISG Type + description: "List of serial numbers of the equipment" schema: - type: array + type: "array" items: - type: string - example: [ "equipmentModels", "recordMetadata" ] - enum: - - equipmentModels - - recordMetadata - deprecatedForEquipmentModels: - name: deprecated - in: query - required: false - description: | - Optional query parameter that controls which records are returned based on the record's deprecated flag: - parameter set to false: Return only non-deprecated records - query parameter not present: both deprecated and non-deprecated records returned. + type: "string" + example: + - "A01775E760247" + - "1DW410ETHFF669067" + EquipmentTypeId: + name: "equipmentTypeId" + in: "path" + required: true + description: "ID for Equipment Type" schema: - type: boolean - example: false - deprecated: - name: deprecated - in: query + type: "integer" + format: "int32" + example: 2222 + EquipmentTypeName: + name: "equipmentTypeName" + in: "query" required: false - description: Whether to filter isg types by the deprecated flag + description: "Name for Equipment Type" schema: - type: string - enum: - - false - - true - - all - example: false - default: all - originator: - name: X-Deere-Originator - in: header + type: "string" + example: "8285R" + ItemLimit: + name: "itemLimit" + in: "query" required: false - description: Originating system of the request + description: "Refers to number of items per page(default 100 max 5000)" schema: - type: string - example: "DataSync" + type: "integer" + format: "int32" + default: 100 + maximum: 5000 + example: 200 OrganizationEquipmentIds: - name: ids - in: query + name: "ids" + in: "query" required: false - description: List of OrganizationEquipment Ids (these ids are unique across all orgs) + description: "List of OrganizationEquipment Ids (these ids are unique across all orgs)" schema: - type: array + type: "array" items: - type: integer + type: "integer" example: - 1 - 2 - 3 - EquipmentSerialNumbers: - name: serialNumbers - in: query - required: false - description: List of serial numbers of the equipment - schema: - type: array - items: - type: string - example: - - A01775E760247 - - 1DW410ETHFF669067 OrganizationIds: - name: organizationIds - in: query - required: false - description: List of OrganizationIds - schema: - type: array - items: - type: integer - example: - - 1 - - 2 - - 3 - PrincipalIds: - name: principalIds - in: query + name: "organizationIds" + in: "query" required: false - description: List of PrincipalIds + description: "List of OrganizationIds" schema: - type: array + type: "array" items: - type: integer + type: "integer" example: - 1 - 2 - 3 PageOffset: - name: pageOffset - in: query + name: "pageOffset" + in: "query" required: false - description: Refers to starting record value + description: "Refers to starting record value" schema: - type: integer - format: int32 + type: "integer" + format: "int32" default: 0 example: 200 - ItemLimit: - name: itemLimit - in: query - required: false - description: Refers to number of items per page(default 100 max 5000) - schema: - type: integer - format: int32 - default: 100 - maximum: 5000 - example: 200 - id: - name: id - in: path - required: true - schema: - type: integer - format: int32 - example: 1111 - organizationId: - name: organizationId - in: path - required: true - schema: - type: integer - format: int32 - example: 1234, - organizationIds: - name: organizationIds - in: query + PrincipalIds: + name: "principalIds" + in: "query" required: false - description: | - The organization ids to get Equipment Models for. - If provided, then only non-certified models will be returned. - If not provided, then only certified models will be returned. + description: "List of PrincipalIds" schema: - type: array + type: "array" items: - type: integer - format: int32 - example: [ 1, 2, 3 ] - EmbedForList: - name: embed - in: query + type: "integer" + example: + - 1 + - 2 + - 3 + Role: + name: "organizationRole.type" + in: "query" required: false - description: embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds schema: - type: string + type: "string" enum: - - devices - - equipment - - icon - - pairingDetails - Embed: - name: embed - in: query - required: false - description: embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds + - "Controlling" + - "NonControlling" + SerialNumber: + name: "serialNumber" + in: "path" + required: true schema: - type: string - enum: - - devices - - equipment - - pairingDetails - - icon - - offsets - - capabilities - Categories: - name: categories - in: query + type: "string" + example: "VIN1234" + category: + name: "category" + in: "query" required: false + description: "List of type categories for the Equipment Model" schema: - type: array + type: "array" items: - type: string - enum: - - Machine - - Implement + type: "string" example: - - Machine - - Implement | Machine | Implement - CapableOf: - name: capableOf - in: query - required: false - schema: - type: string + - "machine" + - "implement" enum: - - Connectivity - - '!Connectivity' - Role: - name: organizationRole.type - in: query + - "machine" + - "implement" + deprecated: + name: "deprecated" + in: "query" required: false + description: "Whether to filter isg types by the deprecated flag" schema: - type: string + type: "string" enum: - - Controlling - - NonControlling - Archived: - name: archived - in: query - required: false - schema: - type: boolean - description: true or false - SerialNumber: - name: serialNumber - in: path - required: true - schema: - type: string - example: VIN1234 - EquipmentMakeId: - name: equipmentMakeId - in: path - required: true - description: ID for Equipment Make - schema: - type: integer - format: int32 - example: 1111 - EquipmentISGTypeId: - name: equipmentISGTypeId - in: path - required: true - description: ID for Equipment ISG Type - schema: - type: integer - format: int32 - example: 1111 - Deprecated: - name: deprecated - in: path - required: true - description: Deprecated value should be false - schema: - type: boolean + - false + - true + - "all" example: false - EmbedV1: - name: embed - in: query + default: "all" + deprecatedForEquipmentModels: + name: "deprecated" + in: "query" required: false - description: Embed additional attributes if required. + description: "Optional query parameter that controls which records are returned based on the record's deprecated flag: + + parameter set to false: Return only non-deprecated records + + query parameter not present: both deprecated and non-deprecated records returned.\n" schema: - type: string - enum: - - make - - type - - isgType - example: - - make - - type - EquipmentModelName: - name: equipmentModelName - in: query + type: "boolean" + example: false + embed: + name: "embed" + in: "query" required: false - description: It should be equipment model name + description: "List of embed data for the Equipment ISG Type" schema: - type: string + type: "array" + items: + type: "string" + example: + - "equipmentModels" + - "recordMetadata" enum: - - string or partial string with * wildcard search - example: - - 9RX420 - - 9RX* - EquipmentTypeId: - name: equipmentTypeId - in: path + - "equipmentModels" + - "recordMetadata" + id: + name: "id" + in: "path" required: true - description: ID for Equipment Type schema: - type: integer - format: int32 - example: 2222 - EquipmentModelId: - name: equipmentModelId - in: path + type: "integer" + format: "int32" + example: 1111 + organizationId: + name: "organizationId" + in: "path" required: true - description: ID for Equipment Model schema: - type: integer - format: int32 - example: 3333 - category: - name: category - in: query + type: "integer" + format: "int32" + example: "1234," + organizationIds: + name: "organizationIds" + in: "query" required: false - description: List of type categories for the Equipment Model + description: "The organization ids to get Equipment Models for. + + If provided, then only non-certified models will be returned. + + If not provided, then only certified models will be returned.\n" schema: - type: array + type: "array" items: - type: string + type: "integer" + format: "int32" example: - - machine - - implement - enum: - - machine - - implement - EquipmentTypeName: - name: equipmentTypeName - in: query - required: false - description: Name for Equipment Type - schema: - type: string - example: 8285R - EquipmentMakeName: - name: equipmentTypeId - in: query + - 1 + - 2 + - 3 + originator: + name: "X-Deere-Originator" + in: "header" required: false - description: Name for Equipment Make + description: "Originating system of the request" schema: - type: string - example: JOHN DEERE + type: "string" + example: "DataSync" responses: + CreateEquip: + description: "Create" + content: + application/json: + schema: + type: "object" + examples: + Headers: + description: "201 Created" GetEquipment: - description: A collection of Assets + description: "A collection of Assets" content: application/json: schema: - type: object + type: "object" properties: values: - type: array + type: "array" examples: No Header: value: links: - - rel: nextPage - uri: https://equipmentapi.deere.com/isg/equipment?organizationIds=1234&categories=machine&embed=equipment,devices,pairingDetails,icon&pageOffset=200&itemLimit=100 + - rel: "nextPage" + uri: "https://equipmentapi.deere.com/isg/equipment?organizationIds=1234&categories=machine&embed=equipment,devices,pairingDetails,icon&pageOffset=200&itemLimit=100" values: - name: 1H0S680SCE0766303 - isoName: Cates 8360R 055358 - serialNumber: 1H0S680SCE0766303 - engineSerialNumber: RG6135U000500 + name: "1H0S680SCE0766303" + isoName: "Cates 8360R 055358" + serialNumber: "1H0S680SCE0766303" + engineSerialNumber: "RG6135U000500" isSerialNumberCertified: true - modelYear: '2014' + modelYear: "2014" make: - name: JOHN DEERE + name: "JOHN DEERE" certified: true deereOrSubsidiary: true id: "1111" - ERID: db18bdc4-025a-11eb-97e4-0e8d658c1111 + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c1111" type: - name: Combine + name: "Combine" id: 222 - ERID: 80619ff7-11fa-11ee-bb58-0e5cd6a962d7 + ERID: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" isgType: - name: Combine + name: "Combine" id: 2 - ERID: d8dce5b0-cc8d-4c34-afac-27d93793bd86 + ERID: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" model: - name: S680 + name: "S680" certified: true id: 65985 - ERID: f2e7d596-35c6-11e7-af34-123e49453e98 + ERID: "f2e7d596-35c6-11e7-af34-123e49453e98" icon: - name: combine-header-bean + name: "combine-header-bean" iconStyle: primaryColor: "#367C2B" secondaryColor: "#FFDE00" organization: - - '@type': Resource + - "@type": "Resource" id: 1234 telematicsCapable: true archived: false principalId: 217373 organizationRole: - type: Controlling + type: "Controlling" effectiveTS: "2024-03-15T09:00:29.101Z" - event: TRANSFER + event: "TRANSFER" inPossession: true ERID: "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7" alternateIdentifiers: - - type: serialNumber - value: P05415X041850 - - type: serialNumber - value: 1P05415XAN4041850 + - type: "serialNumber" + value: "P05415X041850" + - type: "serialNumber" + value: "1P05415XAN4041850" pairingDetails: paired: false associationTimestamp: null - disassociationTimestamp: 2024-10-23T22:23:54Z + disassociationTimestamp: "2024-10-23T22:23:54Z" confirmationTimestamp: null location: lat: 37.904531 lon: -89.334754 slope: null devices: - - '@type': TelematicsGateway - serialNumber: PCMAMGA772527, + - "@type": "TelematicsGateway" + serialNumber: "PCMAMGA772527," make: - - '@type': DeviceMake - name: John Deere + - "@type": "DeviceMake" + name: "John Deere" id: 1 - ERID: f8b43e74-3088-4a38-9d66-30aae1ed1a11 + ERID: "f8b43e74-3088-4a38-9d66-30aae1ed1a11" type: - - '@type': DeviceType - name: Modem - commonName: TelematicsGateway + - "@type": "DeviceType" + name: "Modem" + commonName: "TelematicsGateway" id: 1 - ERID: d469a324-2036-11ee-bb58-0e5cd6a962d7 + ERID: "d469a324-2036-11ee-bb58-0e5cd6a962d7" model: - - '@type': DeviceModel - name: JDLink Modem-2G + - "@type": "DeviceModel" + name: "JDLink Modem-2G" id: 1 - ERID: 7698ea15-e634-493d-8d55-1749563b3d22 + ERID: "7698ea15-e634-493d-8d55-1749563b3d22" organization: - - '@type': Resource, + - "@type": "Resource," id: 1234 organizationRole: - type: NonControlling - effectiveTS: 2024-06-19T13:07:46.119Z - event: TRANSFER + type: "NonControlling" + effectiveTS: "2024-06-19T13:07:46.119Z" + event: "TRANSFER" inPossession: false archived: true decommissioned: false stolen: false principalId: 82044 - archivedTimestamp: 2024-06-19T13:07:46Z + archivedTimestamp: "2024-06-19T13:07:46Z" messagesRestricted: false - pairingStatus: PENDING + pairingStatus: "PENDING" orderNumber: 371859 id: 82044 - ERID: fe1b7f0d-f901-11ee-8d6e-0ee07103fef + ERID: "fe1b7f0d-f901-11ee-8d6e-0ee07103fef" mergedEquipment: - - '@type': Machine - name: Tyyui5677 + - "@type": "Machine" + name: "Tyyui5677" make: - - '@type': EquipmentMake - name: BOBCAT + - "@type": "EquipmentMake" + name: "BOBCAT" certified: false deereOrSubsidiary: false id: 232 - ERID: db1a64f3-025a-11eb-97e4-0e8d658c7ba3 + ERID: "db1a64f3-025a-11eb-97e4-0e8d658c7ba3" type: - - '@type': EquipmentType - name: Rotary Cutter + - "@type": "EquipmentType" + name: "Rotary Cutter" id: 518 - ERID: cc304214-4ba5-48c2-a04a-485970232d7f + ERID: "cc304214-4ba5-48c2-a04a-485970232d7f" isgType: - - '@type': EquipmentISGType - name: Other + - "@type": "EquipmentISGType" + name: "Other" id: 29 - ERID: bcb321b9-521d-4761-9e64-f59816a2ab6b + ERID: "bcb321b9-521d-4761-9e64-f59816a2ab6b" model: - - '@type': EquipmentModel - name: RC-80-H + - "@type": "EquipmentModel" + name: "RC-80-H" certified: true id: 586875 - ERID: f6694870-c322-4000-8f5f-a701ed6eb144 + ERID: "f6694870-c322-4000-8f5f-a701ed6eb144" icon: - - '@type': EquipmentIcon - name: cutters-and-shredders-rotary-cutters + - "@type": "EquipmentIcon" + name: "cutters-and-shredders-rotary-cutters" iconStyle: - primaryColor: #7E7E7E - secondaryColor: #D3D3D3 + primaryColor: null + secondaryColor: null archived: false - mergedBy: userABC - mergedTimeStamp: 2025-02-14T19:13:08.911Z + mergedBy: "userABC" + mergedTimeStamp: "2025-02-14T19:13:08.911Z" isCsc: false id: 7836613 - archivedTimestamp: 2021-03-10T19:19:46.420Z + archivedTimestamp: "2021-03-10T19:19:46.420Z" isCsc: false GetEquipmentById: - description: A collection of Assets + description: "A collection of Assets" content: application/json: schema: - type: object + type: "object" properties: values: - type: array + type: "array" examples: No Header: value: links: - - rel: nextPage - uri: https://equipmentapi.deere.com/isg/equipment?organizationIds=1234&categories=machine&embed=equipment,devices,pairingDetails,icon&pageOffset=200&itemLimit=100 + - rel: "nextPage" + uri: "https://equipmentapi.deere.com/isg/equipment?organizationIds=1234&categories=machine&embed=equipment,devices,pairingDetails,icon&pageOffset=200&itemLimit=100" values: - name: 1H0S680SCE0766303 - isoName: Cates 8360R 055358 - serialNumber: 1H0S680SCE0766303 - engineSerialNumber: RG6135U000500 + name: "1H0S680SCE0766303" + isoName: "Cates 8360R 055358" + serialNumber: "1H0S680SCE0766303" + engineSerialNumber: "RG6135U000500" isSerialNumberCertified: true - modelYear: '2014' + modelYear: "2014" make: - name: JOHN DEERE + name: "JOHN DEERE" certified: true deereOrSubsidiary: true id: "1111" - ERID: db18bdc4-025a-11eb-97e4-0e8d658c1111 + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c1111" type: - name: Combine + name: "Combine" id: 222 - ERID: 80619ff7-11fa-11ee-bb58-0e5cd6a962d7 + ERID: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" isgType: - name: Combine + name: "Combine" id: 2 - ERID: d8dce5b0-cc8d-4c34-afac-27d93793bd86 + ERID: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" model: - name: S680 + name: "S680" certified: true id: 65985 - ERID: f2e7d596-35c6-11e7-af34-123e49453e98 + ERID: "f2e7d596-35c6-11e7-af34-123e49453e98" icon: - name: combine-header-bean + name: "combine-header-bean" iconStyle: primaryColor: "#367C2B" secondaryColor: "#FFDE00" organization: - - '@type': Resource + - "@type": "Resource" id: 1234 telematicsCapable: true archived: false principalId: 217373 organizationRole: - type: Controlling + type: "Controlling" effectiveTS: "2024-03-15T09:00:29.101Z" - event: TRANSFER + event: "TRANSFER" inPossession: true ERID: "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7" alternateIdentifiers: - - type: serialNumber - value: P05415X041850 - - type: serialNumber - value: 1P05415XAN4041850 + - type: "serialNumber" + value: "P05415X041850" + - type: "serialNumber" + value: "1P05415XAN4041850" offsets: variableRepresentationValues: - variable: - type: https://api.deere.com/platform/variableRepresentations/vrLateralControlPointToConnectionOffset - unit: m - valueAsDouble: 0.0 + type: "https://api.deere.com/platform/variableRepresentations/vrLateralControlPointToConnectionOffset" + unit: "m" + valueAsDouble: 0 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrPhysicalImplementWidth - unit: m + type: "https://api.deere.com/platform/variableRepresentations/vrPhysicalImplementWidth" + unit: "m" valueAsDouble: 9.14 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrInlineControlPointToConnectionOffset - unit: m - valueAsDouble: 0.0 + type: "https://api.deere.com/platform/variableRepresentations/vrInlineControlPointToConnectionOffset" + unit: "m" + valueAsDouble: 0 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrLateralRearConnectionPointToConnectionPointOffset - unit: m - valueAsDouble: 0.0 + type: "https://api.deere.com/platform/variableRepresentations/vrLateralRearConnectionPointToConnectionPointOffset" + unit: "m" + valueAsDouble: 0 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrImplementFrontOffset - unit: m - valueAsDouble: 0.0 + type: "https://api.deere.com/platform/variableRepresentations/vrImplementFrontOffset" + unit: "m" + valueAsDouble: 0 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrTrackSpacing - unit: m + type: "https://api.deere.com/platform/variableRepresentations/vrTrackSpacing" + unit: "m" valueAsDouble: 9.144 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrImplementLength - unit: m - valueAsDouble: 0.0 + type: "https://api.deere.com/platform/variableRepresentations/vrImplementLength" + unit: "m" + valueAsDouble: 0 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrImplementTurnRadius - unit: m + type: "https://api.deere.com/platform/variableRepresentations/vrImplementTurnRadius" + unit: "m" valueAsDouble: 9.1 - variable: - type: https://api.deere.com/platform/variableRepresentations/vrEquipmentWidth - unit: m + type: "https://api.deere.com/platform/variableRepresentations/vrEquipmentWidth" + unit: "m" valueAsDouble: 9.14 definedTypeRepresentationValues: - value: - type: https://api.deere.com/platform/definedTypeRepresentations/dtCoverageSetting - valueAsString: dtiCoverageMinimizeSkips + type: "https://api.deere.com/platform/definedTypeRepresentations/dtCoverageSetting" + valueAsString: "dtiCoverageMinimizeSkips" - value: - type: https://api.deere.com/platform/definedTypeRepresentations/dtImplementLateralOffsetType - valueAsString: dtiLateralRight + type: "https://api.deere.com/platform/definedTypeRepresentations/dtImplementLateralOffsetType" + valueAsString: "dtiLateralRight" capabilities: - - type: JDLINK_CONNECTIVITY + - type: "JDLINK_CONNECTIVITY" capable: false inabilityDetails: - - code: RC10.1.3 - type: ACTIVATION - description: Activation required - - type: WIFI_CONNECTIVITY + - code: "RC10.1.3" + type: "ACTIVATION" + description: "Activation required" + - type: "WIFI_CONNECTIVITY" capable: false inabilityDetails: - - code: RC13.7.1 - type: DATA - description: Missing data - - type: CUSTOMER_SIM_CONNECTIVITY + - code: "RC13.7.1" + type: "DATA" + description: "Missing data" + - type: "CUSTOMER_SIM_CONNECTIVITY" capable: false inabilityDetails: - - code: RC14.1.1 - type: ACTIVATION - description: Activation required + - code: "RC14.1.1" + type: "ACTIVATION" + description: "Activation required" pairingDetails: paired: false associationTimestamp: null - disassociationTimestamp: 2024-10-23T22:23:54Z + disassociationTimestamp: "2024-10-23T22:23:54Z" confirmationTimestamp: null location: lat: 37.904531 lon: -89.334754 slope: null devices: - - '@type': TelematicsGateway - serialNumber: PCMAMGA772527, + - "@type": "TelematicsGateway" + serialNumber: "PCMAMGA772527," make: - - '@type': DeviceMake - name: John Deere + - "@type": "DeviceMake" + name: "John Deere" id: 1 - ERID: f8b43e74-3088-4a38-9d66-30aae1ed1a11 + ERID: "f8b43e74-3088-4a38-9d66-30aae1ed1a11" type: - - '@type': DeviceType - name: Modem - commonName: TelematicsGateway + - "@type": "DeviceType" + name: "Modem" + commonName: "TelematicsGateway" id: 1 - ERID: d469a324-2036-11ee-bb58-0e5cd6a962d7 + ERID: "d469a324-2036-11ee-bb58-0e5cd6a962d7" model: - - '@type': DeviceModel - name: JDLink Modem-2G + - "@type": "DeviceModel" + name: "JDLink Modem-2G" id: 1 - ERID: 7698ea15-e634-493d-8d55-1749563b3d22 + ERID: "7698ea15-e634-493d-8d55-1749563b3d22" organization: - - '@type': Resource, + - "@type": "Resource," id: 1234 organizationRole: - type: NonControlling - effectiveTS: 2024-06-19T13:07:46.119Z - event: TRANSFER + type: "NonControlling" + effectiveTS: "2024-06-19T13:07:46.119Z" + event: "TRANSFER" inPossession: false archived: true decommissioned: false stolen: false principalId: 82044 - archivedTimestamp: 2024-06-19T13:07:46Z + archivedTimestamp: "2024-06-19T13:07:46Z" messagesRestricted: false - pairingStatus: PENDING + pairingStatus: "PENDING" orderNumber: 371859 id: 82044 - ERID: fe1b7f0d-f901-11ee-8d6e-0ee07103fef + ERID: "fe1b7f0d-f901-11ee-8d6e-0ee07103fef" mergedEquipment: - - '@type': Machine - name: Tyyui5677 + - "@type": "Machine" + name: "Tyyui5677" make: - - '@type': EquipmentMake - name: BOBCAT + - "@type": "EquipmentMake" + name: "BOBCAT" certified: false deereOrSubsidiary: false id: 232 - ERID: db1a64f3-025a-11eb-97e4-0e8d658c7ba3 + ERID: "db1a64f3-025a-11eb-97e4-0e8d658c7ba3" type: - - '@type': EquipmentType - name: Rotary Cutter + - "@type": "EquipmentType" + name: "Rotary Cutter" id: 518 - ERID: cc304214-4ba5-48c2-a04a-485970232d7f + ERID: "cc304214-4ba5-48c2-a04a-485970232d7f" isgType: - - '@type': EquipmentISGType - name: Other + - "@type": "EquipmentISGType" + name: "Other" id: 29 - ERID: bcb321b9-521d-4761-9e64-f59816a2ab6b + ERID: "bcb321b9-521d-4761-9e64-f59816a2ab6b" model: - - '@type': EquipmentModel - name: RC-80-H + - "@type": "EquipmentModel" + name: "RC-80-H" certified: true id: 586875 - ERID: f6694870-c322-4000-8f5f-a701ed6eb144 + ERID: "f6694870-c322-4000-8f5f-a701ed6eb144" icon: - - '@type': EquipmentIcon - name: cutters-and-shredders-rotary-cutters + - "@type": "EquipmentIcon" + name: "cutters-and-shredders-rotary-cutters" iconStyle: - primaryColor: #7E7E7E - secondaryColor: #D3D3D3 + primaryColor: null + secondaryColor: null archived: false - mergedBy: userABC - mergedTimeStamp: 2025-02-14T19:13:08.911Z + mergedBy: "userABC" + mergedTimeStamp: "2025-02-14T19:13:08.911Z" isCsc: false id: 7836613 - archivedTimestamp: 2021-03-10T19:19:46.420Z + archivedTimestamp: "2021-03-10T19:19:46.420Z" isCsc: false + GetEquipmentByMakeId: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + examples: + No Header: + value: + "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" + GetEquipmentMake: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + properties: + values: + items: + $ref: "#/components/schemas/equipment-make" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentMake" + name: "JOHN DEERE" + certified: false + deereOrSubsidiary: true + id: 1 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" GetEquipmentModelByMakeIdAndTypeIdAndModelId: - description: Equipment Model Details by Equipment Make ID, Equipment Type ID and Equipment Model ID + description: "Equipment Model Details by Equipment Make ID, Equipment Type ID and Equipment Model ID" content: application/json: schema: - type: object + type: "object" properties: values: items: - $ref: '#/components/schemas/equipment-model-no-embed' + $ref: "#/components/schemas/equipment-model-no-embed" examples: No Header: value: - '@type': EquipmentModel - name: '3812 GOOSENECK' - category: Implement + "@type": "EquipmentModel" + name: "3812 GOOSENECK" + category: "Implement" certified: true ERID: "0c4e2f8b-b1d2-4ecd-98a0-8b5495b5c946" id: 744542 GetEquipmentModelName: - description: Equipment Models + description: "Equipment Models" content: application/json: schema: - type: object + type: "object" properties: values: items: - $ref: '#/components/schemas/equipment-model' + $ref: "#/components/schemas/equipment-model" examples: No Header: value: links: [] values: - - '@type': "EquipmentModel" + - "@type": "EquipmentModel" name: "9RX420" category: "Machine" certified: true id: "217373" ERID: "d3d0bd20-e09f-11ee-92e2-0e5cd6a962d7" make: - - '@type': EquipmentMake - name: JOHN DEERE + - "@type": "EquipmentMake" + name: "JOHN DEERE" certified: true deereOrSubsidiary: true id: 1 - ERID: 0e8031fe-fe81-11ea-bec7-124fe3772e59 + ERID: "0e8031fe-fe81-11ea-bec7-124fe3772e59" type: - - '@type': EquipmentType - name: Combine + - "@type": "EquipmentType" + name: "Combine" id: 222 - ERID: 80619ff7-11fa-11ee-bb58-0e5cd6a962d7 + ERID: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" isgType: - - '@type': EquipmentISGType - name: Combine + - "@type": "EquipmentISGType" + name: "Combine" id: 2 - ERID: d8dce5b0-cc8d-4c34-afac-27d93793bd86 - - '@type': "EquipmentModel" + ERID: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + - "@type": "EquipmentModel" name: "9RX -870" category: "Machine" certified: false id: "787077" ERID: "f3d97337-e566-439a-8f6b-4a1c76be055d" make: - - '@type': EquipmentMake - name: JOHN DEERE + - "@type": "EquipmentMake" + name: "JOHN DEERE" certified: false deereOrSubsidiary: true id: 1 - ERID: db18bdc4-025a-11eb-97e4-0e8d658c7ba3 + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" type: - - '@type': EquipmentType - name: Four-wheel Drive Tractor + - "@type": "EquipmentType" + name: "Four-wheel Drive Tractor" id: 145 - ERID: 6e816bfb-955f-4687-a362-1133ab26cef9 + ERID: "6e816bfb-955f-4687-a362-1133ab26cef9" isgType: - - '@type': EquipmentISGType - name: Tractor + - "@type": "EquipmentISGType" + name: "Tractor" id: 1 - ERID: 82115264-9385-460c-bfbe-177a59445fd9 + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + GetEquipmentTypeByEquipmentMakeIdAndEquipmentTypeId: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + properties: + values: + items: + $ref: "#/components/schemas/equipment-type" + examples: + No Header: + value: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + GetEquipmentTypes: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" + GetEquipmentTypesByMakeId: + description: "A collection of Assets" + content: + application/json: + schema: + type: "object" + examples: + No Header: + value: + links: [] + values: + - "@type": "EquipmentType" + name: "Scraper" + ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" + category: "Implement" + marketSegment: "Construction" + allowsCustomModel: true + id: "121" + icon: + "@type": "EquipmentIcon" + name: "generic-fuel-trailer" + iconStyle: + primaryColor: "#7E7E7E" + secondaryColor: "#D3D3D3" UpdateEquipment: - type: object - title: Equipment Creation + type: "object" + title: "Equipment Creation" + properties: + id: + required: true + type: "string" + description: "Unique id" + example: "1 | fcdc83cb-8840-4215-84b5-1769889db932" + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "Must be unique string. Max character count is 30." + required: true + make: + type: "object" + title: "Make of the equipment." + description: "Make of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "1 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + description: "EquipmentMake" + example: "EquipmentMake" + type: + type: "object" + title: "Type of the equipment." + description: "Type of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "2 | 82115264-9385-460c-bfbe-177a59445fd9" + "@type": + type: "string" + description: "EquipmentType" + example: "EquipmentType" + model: + type: "object" + title: "Model of the equipment." + description: "Model of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "3 | 158df9ff-334a-4e0d-86cc-3adca17a9686" + "@type": + type: "string" + description: "EquipmentModel" + example: "EquipmentModel" + icon: + $ref: "#/components/schemas/equipment-icon" + UpdatedEquip: + description: "Update" + content: + application/json: + schema: + type: "object" + examples: + Headers: + description: "204 No Content" + examples: + No Header: + value: + "@type": "Machine" + id: 1 + name: "Equipment Name" + serialNumber: "1T0750LXCNF012345" + make: + - "@type": "EquipmentMake" + id: 1 + type: + - "@type": "EquipmentType" + id: 414 + model: + - "@type": "EquipmentModel" + id: 585917 + icon: + - "@type": "EquipmentIcon" + name: "crawler-loader" + iconStyle: + primaryColor: "#F2A900" + secondaryColor: "#808082" + schemas: + Error: + type: "object" + properties: + message: + type: "string" + description: "An english description of the error" + example: " was invalid because " + code: + type: "string" + description: "A string constant representing the type of error" + example: 400 + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "Machine.serialNumber" + gud: + type: "string" + format: "uuid" + description: "A reference to this encounter of the error, for traceability and troubleshooting" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: null + readOnly: true + Errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + readOnly: true + RecordMetadata: + type: "object" + description: "Data structure for record metadata capturing information about the creation and last update of an entity. + + For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). + + NOTES + + * Some attributes are only visible if the API Client has the required license. + + * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)\n" + properties: + "@type": + type: "string" + default: "RecordMetadata" + example: "RecordMetadata" + createdByUser: + type: "string" + description: "User involved in creating the entity. Only viewable with the RECORD_METADATA license\n" + example: "XYZ_USER" + lastModifiedByUser: + type: "string" + description: "User involved in modifying the entity. Only viewable with the RECORD_METADATA license\n" + example: "XYZ_USER" + userCreationTimestamp: + type: "string" + description: "Timestamp of entity creation" + readOnly: true + example: "2018-04-30T10:23:50.000Z" + userLastModifiedTimestamp: + type: "string" + description: "Timestamp of entity modification" + readOnly: true + example: "2018-05-01T08:11:23.000Z" + createdBySourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that created the entity. At this time, it only applies + + to Displays. Only viewable with the RECORD_METADATA license.\n" + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + lastModifiedSourceNode: + type: "string" + format: "uuid" + description: "This is the specific instance of an application that modified the entity. At this time, it only applies + + to Displays. Only viewable with the RECORD_METADATA license\n" + readOnly: true + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + createdBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that created) via Application Registry lookup. The + + Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) + + will be used if no source application exists. Only viewable with the RECORD_METADATA license.\n" + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + lastModifiedBySourceSystemUri: + type: "string" + description: "Derived off of a client key (application that did last modification) via Application Registry lookup. The + + Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) + + will be used if no source application exists. Only viewable with the RECORD_METADATA license.\n" + readOnly: true + example: "https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5" + abstractMeasurement: + type: "object" + title: "AbstractMeasurement" + properties: + type: + type: "string" + unit: + type: "string" + capability: + type: "object" + title: "Capability" + description: "List of capabilities of the equipment." + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Capability" + description: "Capability" + example: "Capability" + capable: + type: "boolean" + type: + type: "string" + enum: + - "JDLINK_CONNECTIVITY" + - "RDA" + - "WDT" + - "WIFI_CONNECTIVITY" + - "CUSTOMER_SIM_CONNECTIVITY" + - "LEGACY_CONNECTIVITY" + - "PLANNED_WORK" + - "DATA_SYNC_SETUP" + - "CH_REMOTE_ADJUST" + - "BASE_STATION" + - "MY_MACHINE" + - "RDC" + - "REMOTE_START" + inabilityDetails: + type: "array" + items: + $ref: "#/components/schemas/inability-detail" + communication-module: + type: "object" + title: "CommunicationModule" + description: "Represents a communication module, including its serial number, IMEI, IMSI, ICCID, MSISDN, EID, type, service provider, state, and country calling code." + example: + serialNumber: "PCS171B372381" + imei: 123456789012345 + imsi: 310150123456789 + iccid: 89014103211118510000 + msisdn: 15555551234 + eid: 89014103211118510000 + type: "GSM" + serviceProvider: "ATT" + state: "ACTIVE" + countryCallingCode: 1 + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "CommunicationModule" + description: "CommunicationModule" + example: "CommunicationModule" + serialNumber: + type: "string" + description: "Serial number of the communication gateway" + example: "PCS171B372381" + imei: + type: "string" + description: "International Mobile Equipment Identity of the communication module." + example: 123456789012345 + imsi: + type: "string" + description: "International Mobile Subscriber Identity of the communication module." + example: 310150123456789 + iccid: + type: "string" + description: "Integrated Circuit Card Identifier of the communication module." + example: 89014103211118510000 + msisdn: + type: "string" + description: "Mobile Station International Subscriber Directory Number of the communication module." + example: 15555551234 + eid: + type: "string" + description: "Embedded Identity Document of the communication module." + example: 89014103211118510000 + type: + type: "string" + description: "Type of the communication module." + enum: + - "GSM" + - "SATELLITE" + - "CDMA" + - "COS" + example: "GSM" + serviceProvider: + type: "string" + enum: + - "IRIDIUM" + - "ATT" + - "JASPER" + - "VERIZON" + - "COS" + - "COST" + - "CUBIC" + - "ATTIOT" + example: "ATT" + state: + type: "string" + description: "Subscription state of the communication gateway" + enum: + - "NEW" + - "ACTIVE" + - "INACTIVE" + - "EXPIRED" + - "PENDING_ACTIVE" + - "PENDING_INACTIVE" + - "PENDING_EXPIRED" + - "PENDING_VERIFICATION" + - "PENDING_WDT" + - "TERMINATED" + example: "ACTIVE" + countryCallingCode: + type: "string" + description: "Country calling code of the communication module." + example: 1 + createEquipment: + type: "object" + title: "Equipment Creation" + properties: + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "Must be unique string. Max character count is 30." + required: true + model: + required: true + type: "object" + title: "Model of the equipment." + description: "Model of the equipment." + properties: + id: + type: "string" + description: "Unique id" + example: "3 | 158df9ff-334a-4e0d-86cc-3adca17a9686" + required: true + "@type": + type: "string" + description: "EquipmentModel" + example: "EquipmentModel" + required: true + definedTypeRepresentationValue: + type: "object" + title: "DefinedTypeRepresentationValue" + properties: + value: + $ref: "#/components/schemas/measurementAsString" + device: + type: "object" + title: "Device" + description: "Represents a device, including its serial number, certification status, make, type, model, organization, and other attributes." + example: + "@type": "Device" + serialNumber: "PCMA4GF511111" + make: + name: "JOHN DEERE" + id: "1" + ERID: "f8b43e74-3088-4a38-9d66-30aae1ed1111" + type: + name: "Modem" + commonName: "TelematicsGateway" + id: "1" + ERID: "d469a324-2036-11ee-bb58-0e5cd6a91111" + model: + name: "JDLink Modem-4G" + id: "3" + ERID: "f413bba6-9f39-410c-866f-c800bf701111" + firmwareVersion: + name: "40.02.049" + organization: + id: "21111" + organizationRole: + type: "Controlling" + effectiveTS: "2024-04-30T17:53:57Z" + event: "PAIRING" + archived: false + decommissioned: false + stolen: false + principalId: "911111" + equipment: + name: "Cattle 9700 SPFH" + serialNumber: "1Z09700YAKU621111" + isSerialNumberCertified: true + modelYear: "2019" + make: + name: "JOHN DEERE" + certified: true + deereOrSubsidiary: true + id: "1" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c1111" + type: + name: "Forage Harvester" + id: "162" + ERID: "34b07db5-11fb-11ee-8580-0ed5f7261111" + isgType: + name: "Forage Harvester" + id: "6" + ERID: "99edf0e0-4abb-42d3-9798-327439a31111" + model: + name: 9700 + certified: true + id: "581111" + ERID: "2c8c951e-070a-4e1c-824d-72cca6e71111" + principalId: "661111" + archived: false + organization: + id: "22967" + organizationRole: + type: "Controlling" + effectiveTS: "2024-04-30T17:53:56.695Z" + event: "PAIRING" + isCsc: false + id: "661111" + ERID: "23fe3ea0-1f95-4ae6-8e12-968729cd1111" + capabilities: + - type: "JDLINK_CONNECTIVITY" + capable: true + - type: "WIFI_CONNECTIVITY" + capable: true + pairingDetails: + paired: true + associationTimestamp: "2024-09-28T17:30:24Z" + disassociationTimestamp: null + confirmationTimestamp: "2024-10-23T22:17:22Z" + location: + lat: 52.780639 + lon: -122.453222 + slope: null + messagesRestricted: false + pairingStatus: "PAIRED" + orderNumber: "961111" + highFidelityConfigurationVersion: + name: "1Hz_L3X40FT4JDPS0x00_ISG_X8X9SPFH_63978_2024.008.001" + genericConfigurationVersion: + name: "1623F1EF-62C2-4B8B-B5EA-A0FFD6EA76F8" + communicationModules: + - imei: "014642005101111" + imsi: "310170835961111" + iccid: "89011704278359691111" + type: "GSM" + serviceProvider: "Jasper" + state: "Active" + id: "632111" + id: "915111" + ERID: "fb537c94-14f1-11ef-871b-1287bcef1111" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Device" + - "Display" + - "PositionReceiver" + - "TelematicsGateway" + description: "Device | Display | PositionReceiver | TelematicsGateway" + example: "Device" + serialNumber: + type: "string" + description: "Serial number of the device and passed on the query parameter" + example: "PCS171B372381" + isSerialNumberCertified: + type: "boolean" + description: "True if this is an official device (we have PI information about it)." + example: true + make: + $ref: "#/components/schemas/device-make" + type: + $ref: "#/components/schemas/device-type" + model: + $ref: "#/components/schemas/device-model" + organization: + $ref: "#/components/schemas/organization-embed" + ERID: + type: "string" + description: "Unique identifier of the Device." + example: "fcdc83cb-8840-4215-84b5-1769889db932" + firmwareVersion: + $ref: "#/components/schemas/version" + capabilities: + type: "array" + items: + $ref: "#/components/schemas/capability" + equipment: + $ref: "#/components/schemas/equipment" + archived: + type: "boolean" + description: "Indicates if the device is archived." + example: true + decommissioned: + type: "boolean" + description: "Indicates if the device is decommissioned." + example: false + stolen: + type: "boolean" + description: "Indicates if the device is stolen." + example: false + principalId: + type: "string" + description: "Unique id for principal device" + example: 12345 + organizationRole: + $ref: "#/components/schemas/organization-role" + orderNumber: + type: "string" + description: "Order number associated with the device." + example: 987654321 + pairingDetails: + $ref: "#/components/schemas/pairing-details" + archivedTimestamp: + type: "string" + format: "date-time" + description: "Timestamp when the device was archived." + example: "2021-03-10T19:19:46.420Z" + device-make: + type: "object" + title: "DeviceMake" + description: "Represents the make of a device, including its name and unique identifier (ERID)." + example: + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "DeviceMake" + description: "DeviceMake" + example: "DeviceMake" + name: + type: "string" + description: "The name of the device make." + example: "JOHN DEERE" + ERID: + type: "string" + description: "Unique identifier of the device make." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + device-model: + type: "object" + title: "DeviceModel" + description: "Represents the model of a device, including its name, unique identifier (ERID), make, and type." + example: + name: "JDLink Modem-4G" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + make: + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + type: + name: "Modem" + commonName: "TelematicsGateway" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "DeviceModel" + description: "DeviceModel" + example: "DeviceModel" + name: + type: "string" + description: "The name of the device model." + example: "JDLink Modem-4G" + ERID: + type: "string" + description: "Unique identifier of the device model." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + make: + $ref: "#/components/schemas/device-make" + type: + $ref: "#/components/schemas/device-type" + device-type: + type: "object" + title: "DeviceType" + description: "Represents the type of a device, including its name, common name, and unique identifier (ERID)." + example: + name: "Modem" + commonName: "TelematicsGateway" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "DeviceType" + description: "DeviceType" + example: "DeviceType" + name: + type: "string" + description: "The name of the device type." + example: "Modem" + commonName: + type: "string" + description: "The common name of the device type." + example: "TelematicsGateway" + ERID: + type: "string" + description: "Unique identifier of the device type." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + display: + type: "object" + title: "Display" + allOf: + - $ref: "#/components/schemas/device" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Display" + description: "Display" + example: "Display" + monitors: + uniqueItems: true + type: "array" + items: + $ref: "#/components/schemas/display-monitors" + display-monitors: + type: "object" + title: "Monitor" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Monitor" + description: "Monitor" + example: "Monitor" + type: + type: "string" + example: "Monitor_0" + serialNumber: + type: "string" + example: "PCG410A015392" + resolutionWidth: + type: "integer" + example: 800 + resolutionHeight: + type: "integer" + example: 600 + equipment: + type: "object" + title: "Equipment" + description: "Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes." + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Equipment" + - "Machine" + - "Implement" + description: "Equipment | Machine | Implement" + example: "Equipment" + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + isoName: + type: "string" + description: "Unique 64-bit ISO NAME used to identify the controller during address claim." + example: "b00082000422ed1d" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "1RW8360RLCD055358" + engineSerialNumber: + type: "string" + description: "VIN or PIN, more than Serial Number, of the Engine." + example: "RG6090L839275" + isSerialNumberCertified: + type: "boolean" + description: "True if this is an official equipment (we have PI information about it)." + example: true + modelYear: + type: "string" + description: "Year of model." + example: 2019 + make: + $ref: "#/components/schemas/equipment-make-embed" + type: + $ref: "#/components/schemas/equipment-type-embed" + isgType: + $ref: "#/components/schemas/equipment-isg-type-embed" + model: + $ref: "#/components/schemas/equipment-model-embed" + organization: + $ref: "#/components/schemas/organization-embed" + telematicsCapable: + type: "boolean" + description: "Indicates if the equipment is capable of telematics." + example: true + archived: + type: "boolean" + description: "Indicates if the equipment is archived." + example: true + principalId: + type: "string" + description: "Unique id for principal equipment" + example: 12345 + organizationRole: + $ref: "#/components/schemas/organization-role" + ERID: + type: "string" + description: "Unique identifier of the Equipment." + example: "fcdc83cb-8840-4215-84b5-1769889db932" + alternateIdentifiers: + type: "array" + description: "List of alternate identifiers of the Equipment like DE-13, DE-17, ERID..." + items: + $ref: "#/components/schemas/identifier" + icon: + $ref: "#/components/schemas/equipment-icon" + offsets: + $ref: "#/components/schemas/offsets" + devices: + type: "array" + description: "List of devices paired with the equipment." + items: + $ref: "#/components/schemas/device" + capabilities: + type: "array" + description: "List of capabilities of the equipment." + items: + $ref: "#/components/schemas/capability" + pairingDetails: + $ref: "#/components/schemas/pairing-details" + archivedTimestamp: + type: "string" + format: "date-time" + description: "Timestamp when the equipment was archived." + example: "2021-03-10T19:19:46.420Z" + mergedEquipment: + type: "array" + description: "List of equipment that was merged." + items: + $ref: "#/components/schemas/machine" + isCsc: + type: "boolean" + description: "Indicates if the equipment is CSC equipment or not." + example: true + equipment-icon: + type: "object" + title: "EquipmentIcon" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment icon." + example: "JOHN DEERE" + iconStyle: + $ref: "#/components/schemas/icon-style" + equipment-isg-type: + type: "object" + title: "EquipmentIsgType" + description: "Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata." + example: + name: "Tractor" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + allowsCustomModel: true + isgMarketSegment: "Agriculture" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the ISG equipment type." + example: "Tractor" + ERID: + type: "string" + description: "Unique identifier for the ISG equipment type." + example: "82115264-9385-460c-bfbe-177a59445fd9" + category: + type: "string" + description: "The category of the ISG equipment type." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + allowsCustomModel: + type: "boolean" + description: "Indicates if the equipment ISG type allows custom models." + example: true + isgMarketSegment: + type: "string" + description: "The ISG market segment of the equipment ISG type." + enum: + - "Unknown" + - "Agriculture" + - "Construction" + - "Engines & Components" + - "Forestry" + - "Turf" + example: "Agriculture" + deprecated: + type: "boolean" + description: "Indicates if the ISG equipment type is deprecated." + example: false + equipment-isg-type-embed: + type: "object" + title: "EquipmentISGType" + description: "Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentISGType" + example: "EquipmentISGType" + id: + type: "string" + description: "Unique identifier for the ISG equipment type." + example: "2" + name: + type: "string" + description: "The name of the ISG equipment type." + example: "Combine" + ERID: + type: "string" + description: "Unique identifier for the ISG equipment type." + example: "d8dce5b0-cc8d-4c34-afac-27d93793bd86" + equipment-make: + type: "object" + title: "EquipmentMake" + description: "Represents the make of the equipment, including its name, unique identifier, and metadata." + example: + id: 1 + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + certified: true + deereOrSubsidiary: true + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment make." + example: "JOHN DEERE" + ERID: + type: "string" + description: "Unique identifier for the equipment make." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + certified: + type: "boolean" + description: "Indicates if the equipment make is certified." + example: true + deereOrSubsidiary: + type: "boolean" + description: "Indicates if the equipment make is deereOrSubsidiary." + example: true + deprecated: + type: "boolean" + description: "Indicates if the equipment make is deprecated." + example: false + equipment-make-embed: + type: "object" + title: "EquipmentMake" + description: "Represents the make of the equipment, including its name, unique identifier, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentMake" + example: "EquipmentMake" + id: + type: "string" + description: "Unique identifier for the equipment make." + example: "1" + name: + type: "string" + description: "The name of the equipment make." + example: "JOHN DEERE" + ERID: + type: "string" + description: "Unique identifier for the equipment make." + example: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + certified: + type: "boolean" + description: "Indicates if the equipment make is certified." + example: true + deereOrSubsidiary: + type: "boolean" + description: "Indicates if the equipment make is deereOrSubsidiary." + example: true + equipment-model: + type: "object" + title: "EquipmentModel" + description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." + example: + name: "8360R" + ERID: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: "Machine" + deprecated: false + certified: false + make: + name: "JOHN DEERE" + ERID: "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + type: + name: "Two-wheel Drive Tractors - 140 Hp And Above" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + certified: true + marketSegment: "Agriculture" + icon: + url: "https://example.com/icon.png" + description: "Icon representing the equipment type" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + isgType: + name: "Tractor" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + deprecated: false + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + icon: + url: "https://example.com/icon.png" + description: "Icon representing the equipment model" + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment model." + example: "8360R" + ERID: + type: "string" + description: "Unique identifier for the equipment model." + example: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: + type: "string" + description: "The category of the equipment model." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + deprecated: + type: "boolean" + description: "Indicates if the equipment model is deprecated." + example: false + certified: + type: "boolean" + description: "Indicates if the equipment model is certified." + example: false + make: + $ref: "#/components/schemas/equipment-make" + type: + $ref: "#/components/schemas/equipment-type" + isgType: + $ref: "#/components/schemas/equipment-isg-type" + equipment-model-details: + type: "object" + title: "EquipmentModel" + allOf: + - type: "object" + properties: + name: + type: "string" + example: "8360R" + ERID: + type: "string" + example: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: + type: "string" + enum: + - "Machine" + - "Implement" + - "Unknown" + make: + $ref: "#/components/schemas/equipment-make-embed" + type: + $ref: "#/components/schemas/equipment-type-embed" + icon: + $ref: "#/components/schemas/equipment-icon" + equipment-model-embed: + type: "object" + title: "EquipmentModel" + description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentModel" + example: "EquipmentModel" + id: + type: "string" + description: "Unique identifier for the equipment model." + example: "65985" + name: + type: "string" + description: "The name of the equipment model." + example: "S680" + ERID: + type: "string" + description: "Unique identifier for the equipment model." + example: "f2e7d596-35c6-11e7-af34-123e49453e98" + certified: + type: "boolean" + description: "Indicates if the equipment model is certified." + example: true + equipment-model-no-embed: + type: "object" + title: "EquipmentModel" + description: "Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata." + example: + name: "8360R" + ERID: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: "Machine" + certified: false + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment model." + example: "8360R" + ERID: + type: "string" + description: "Unique identifier for the equipment model." + example: "158df9ff-334a-4e0d-86cc-3adca17a9686" + category: + type: "string" + description: "The category of the equipment model." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + certified: + type: "boolean" + description: "Indicates if the equipment model is certified." + example: false + equipment-patch: + type: "object" + title: "PatchDTO" + properties: + operation: + type: "string" + enum: + - "UPDATE" + path: + type: "string" + enum: + - "/organization" + - "/archived" + - "/organizationRole/type" + - "/name" + value: + type: "string" + description: "- For transfer request : value={organizationId} + + - For archive/unarchive request : value=true/false + + - For role update request : value={Controlling} + + - For name update request : value={name}\n" + equipment-type: + type: "object" + title: "EquipmentType" + deprecated: true + description: "Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata." + example: + id: 217 + name: "Two-wheel Drive Tractors - 140 Hp And Above" + ERID: "82115264-9385-460c-bfbe-177a59445fd9" + category: "Machine" + certified: true + marketSegment: "Agriculture" + icon: + url: "https://example.com/icon.png" + description: "Icon representing the equipment type" + deprecated: false + allowsCustomModel: true + recordMetaData: + createdBy: "user123" + createdAt: "2023-10-01T12:00:00Z" + updatedBy: "user456" + updatedAt: "2023-10-02T12:00:00Z" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + name: + type: "string" + description: "The name of the equipment type." + example: "Two-wheel Drive Tractors - 140 Hp And Above" + ERID: + type: "string" + description: "Unique identifier for the equipment type." + example: "82115264-9385-460c-bfbe-177a59445fd9" + category: + type: "string" + description: "The category of the equipment type." + enum: + - "Machine" + - "Implement" + - "Unknown" + example: "Machine" + certified: + type: "boolean" + description: "Indicates if the equipment type is certified." + example: true + allowsCustomModel: + type: "boolean" + description: "Indicates if the equipment type allows custom models." + example: true + marketSegment: + type: "string" + description: "The market segment of the equipment type." + enum: + - "Unknown" + - "Agriculture" + - "Commercial Worksite Products" + - "Construction" + - "Engines & Components" + - "Forestry" + - "Mining" + - "Turf" + example: "Agriculture" + icon: + $ref: "#/components/schemas/equipment-icon" + deprecated: + type: "boolean" + description: "Indicates if the equipment type is deprecated." + example: false + equipment-type-embed: + type: "object" + title: "EquipmentType" + description: "Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata." + properties: + "@type": + type: "string" + description: "EquipmentType" + example: "EquipmentType" + id: + type: "string" + description: "Unique identifier for the equipment type." + example: "222" + name: + type: "string" + description: "The name of the equipment type." + example: "Combine" + ERID: + type: "string" + description: "Unique identifier for the equipment type." + example: "80619ff7-11fa-11ee-bb58-0e5cd6a962d7" + equipmentForList: + type: "object" + title: "Equipment" + description: "Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes." + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Equipment" + - "Machine" + - "Implement" + description: "Equipment | Machine | Implement" + example: "Equipment" + name: + type: "string" + description: "Equipment Name." + example: "Cates 8360R 055358" + isoName: + type: "string" + description: "Unique 64-bit ISO NAME used to identify the controller during address claim." + example: "b00082000422ed1d" + serialNumber: + type: "string" + description: "Serial Number of the Equipment and passed on the query parameter" + example: "1RW8360RLCD055358" + engineSerialNumber: + type: "string" + description: "VIN or PIN, more than Serial Number, of the Engine." + example: "RG6090L839275" + isSerialNumberCertified: + type: "boolean" + description: "True if this is an official equipment (we have PI information about it)." + example: true + modelYear: + type: "string" + description: "Year of model." + example: 2019 + make: + $ref: "#/components/schemas/equipment-make-embed" + type: + $ref: "#/components/schemas/equipment-type-embed" + isgType: + $ref: "#/components/schemas/equipment-isg-type-embed" + model: + $ref: "#/components/schemas/equipment-model-embed" + organization: + $ref: "#/components/schemas/organization-embed" + telematicsCapable: + type: "boolean" + description: "Indicates if the equipment is capable of telematics." + example: true + archived: + type: "boolean" + description: "Indicates if the equipment is archived." + example: true + principalId: + type: "string" + description: "Unique id for principal equipment" + example: 12345 + organizationRole: + $ref: "#/components/schemas/organization-role" + ERID: + type: "string" + description: "Unique identifier of the Equipment." + example: "fcdc83cb-8840-4215-84b5-1769889db932" + alternateIdentifiers: + type: "array" + description: "List of alternate identifiers of the Equipment like DE-13, DE-17, ERID..." + items: + $ref: "#/components/schemas/identifier" + icon: + $ref: "#/components/schemas/equipment-icon" + devices: + type: "array" + description: "List of devices paired with the equipment." + items: + $ref: "#/components/schemas/device" + pairingDetails: + $ref: "#/components/schemas/pairing-details" + archivedTimestamp: + type: "string" + format: "date-time" + description: "Timestamp when the equipment was archived." + example: "2021-03-10T19:19:46.420Z" + mergedEquipment: + type: "array" + description: "List of equipment that was merged." + items: + $ref: "#/components/schemas/machine" + isCsc: + type: "boolean" + description: "Indicates if the equipment is CSC equipment or not." + example: true + icon-style: + type: "object" + title: "IconStyle" + description: "icon style" + properties: + primaryColor: + type: "string" + description: "primary color of the icon style" + secondaryColor: + type: "string" + description: "secondary color of the icon style" + identifier: + type: "object" + title: "Identifier of Equipment" + description: "Identifier of the Equipment like DE-13, DE-17, ERID..." + allOf: + - type: "object" + properties: + type: + required: true + type: "string" + description: "Type of identifier." + enum: + - "serialNumber" + - "ERID" + value: + required: true + type: "string" + description: "Value of identifier." + example: "RW8360R055358" + implement: + type: "object" + title: "Implement" + allOf: + - $ref: "#/components/schemas/equipment" + - type: "object" + properties: + machine: + $ref: "#/components/schemas/machine" + inability-detail: + type: "object" + title: "InabilityDetail" + allOf: + - $ref: "#/components/schemas/resource" + - type: "object" + properties: + code: + type: "string" + example: "RC14.8.1" + type: + type: "string" + example: "REGISTRATION" + description: + type: "string" + example: "SIM registration is required" + link: + type: "object" + title: "Link" + properties: + rel: + type: "string" + example: "nextPage" + uri: + type: "string" + description: "This will be the relative URL. Users will prefix the base url as per their requirements." + example: "/equipment?pageOffset=10&itemSize=10" + machine: + type: "object" + title: "Machine" + allOf: + - $ref: "#/components/schemas/equipment" + - type: "object" + properties: + implements: + uniqueItems: true + type: "array" + items: + $ref: "#/components/schemas/implement" + measurementAsDouble: + type: "object" + title: "MeasurementAsDouble" + description: "measurement as double" + allOf: + - $ref: "#/components/schemas/abstractMeasurement" + - type: "object" + properties: + type: + type: "string" + description: "type of measurement" + unit: + type: "string" + description: "unit of measurement" + valueAsDouble: + type: "number" + format: "double" + description: "measurement value as double" + measurementAsString: + type: "object" + title: "MeasurementAsString" + description: "measurement as string" + allOf: + - $ref: "#/components/schemas/abstractMeasurement" + - type: "object" + properties: + type: + type: "string" + description: "type of measurement" + unit: + type: "string" + description: "unit of measurement" + valueAsString: + type: "string" + description: "measurement value as string" + offsets: + type: "object" + title: "Offsets" + description: "Represents the offsets of a device, including its variable and defined type representation values." + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" + properties: + "@type": + type: "string" + enum: + - "Offsets" + description: "Offsets" + example: "Offsets" + variableRepresentationValues: + type: "array" + items: + $ref: "#/components/schemas/variableRepresentationValue" + definedTypeRepresentationValues: + type: "array" + items: + $ref: "#/components/schemas/definedTypeRepresentationValue" + organization-embed: + type: "object" + title: "Resource" properties: id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" required: true - type: string - description: Unique id - example: 1 | fcdc83cb-8840-4215-84b5-1769889db932 - name: - type: string - description: Equipment Name. - example: Cates 8360R 055358 - serialNumber: - type: string - description: Serial Number of the Equipment and passed on the query parameter - example: Must be unique string. Max character count is 30. - required: true - make: - type: object - title: Make of the equipment. - description: Make of the equipment. - properties: - id: - type: string - description: Unique id - example: 1 | fcdc83cb-8840-4215-84b5-1769889db932 - '@type': - type: string - description: EquipmentMake - example: EquipmentMake + description: "Resource" + example: "Resource" + discriminator: + propertyName: "@type" + organization-role: + type: "object" + title: "OrganizationRole" + description: "Represents the role of an organization, including its type, effective timestamp, and event." + example: + type: "Controlling" + effectiveTS: "2023-10-01T12:00:00Z" + event: "CREATION" + properties: type: - type: object - title: Type of the equipment. - description: Type of the equipment. + type: "string" + description: "The type of the organization role." + enum: + - "Controlling" + - "NonControlling" + example: "Controlling" + effectiveTS: + type: "string" + format: "date-time" + description: "The timestamp when the role becomes effective." + example: "2023-10-01T12:00:00Z" + event: + type: "string" + description: "The event associated with the organization role." + enum: + - "CREATION" + - "TRANSFER" + - "SUBSCRIPTION" + - "PAIRING" + - "ORDER" + - "COMMANDED" + - "DECOMMISSION" + example: "CREATION" + inPossession: + type: "boolean" + example: true + pairing-details: + type: "object" + title: "PairingDetails" + description: "Represents the details of the pairing process, including timestamps and location." + example: + paired: true + associationTimestamp: "2023-10-01T12:00:00Z" + disassociationTimestamp: "2023-10-02T12:00:00Z" + confirmationTimestamp: "2023-10-01T12:30:00Z" + location: + latitude: 40.712776 + longitude: -74.005974 + properties: + paired: + type: "boolean" + description: "Indicates if the equipment is paired." + example: true + associationTimestamp: + type: "string" + format: "date-time" + description: "The timestamp when the equipment was paired." + example: "2023-10-01T12:00:00Z" + disassociationTimestamp: + type: "string" + format: "date-time" + description: "The timestamp when the equipment was un-paired." + example: "2023-10-02T12:00:00Z" + confirmationTimestamp: + type: "string" + format: "date-time" + description: "The timestamp when the pairing was confirmed." + example: "2023-10-01T12:30:00Z" + location: + $ref: "#/components/schemas/point" + point: + type: "object" + title: "Point" + properties: + lat: + type: "number" + format: "double" + lon: + type: "number" + format: "double" + slope: + type: "number" + format: "double" + position-receiver: + type: "object" + title: "PositionReceiver" + allOf: + - $ref: "#/components/schemas/device" + - type: "object" + resource: + type: "object" + title: "Resource" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/link" + id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + description: "Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + example: "Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + required: true + discriminator: + propertyName: "@type" + resource-embed: + type: "object" + title: "Resource" + properties: + id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + required: true + description: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + example: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + discriminator: + propertyName: "@type" + resourcewithoutLinks: + type: "object" + title: "Resource" + properties: + id: + type: "string" + description: "Unique id" + example: "363997 | fcdc83cb-8840-4215-84b5-1769889db932" + "@type": + type: "string" + required: true + description: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + example: "Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other" + discriminator: + propertyName: "@type" + telematics-gateway: + type: "object" + title: "TelematicsGateway" + allOf: + - $ref: "#/components/schemas/device" + - type: "object" properties: - id: - type: string - description: Unique id - example: 2 | 82115264-9385-460c-bfbe-177a59445fd9 - '@type': - type: string - description: EquipmentType - example: EquipmentType - model: - type: object - title: Model of the equipment. - description: Model of the equipment. + pairingStatus: + type: "string" + enum: + - "PAIRED" + - "PENDING_PAIRING" + orderNumber: + type: "string" + highFidelityConfigurationVersion: + $ref: "#/components/schemas/version" + genericConfigurationVersion: + $ref: "#/components/schemas/version" + messagesRestricted: + type: "boolean" + communicationModules: + type: "array" + items: + $ref: "#/components/schemas/communication-module" + variableRepresentationValue: + type: "object" + title: "VariableRepresentationValue" + properties: + variable: + $ref: "#/components/schemas/measurementAsDouble" + version: + type: "object" + title: "Version" + description: "Represents the version of a device or software, including its name." + example: + name: "3.16.1171" + allOf: + - $ref: "#/components/schemas/resource-embed" + - type: "object" properties: - id: - type: string - description: Unique id - example: 3 | 158df9ff-334a-4e0d-86cc-3adca17a9686 - '@type': - type: string - description: EquipmentModel - example: EquipmentModel - icon: - $ref: '#/components/schemas/equipment-icon' - examples: - No Header: - value: - '@type': Machine - id: 1 - name: 'Equipment Name' - serialNumber: '1T0750LXCNF012345' - make: - - '@type': EquipmentMake - id: 1 - type: - - '@type': EquipmentType - id: 414 - model: - - '@type': EquipmentModel - id: 585917 - icon: - - '@type': EquipmentIcon - name: "crawler-loader" - iconStyle: - primaryColor: "#F2A900" - secondaryColor: "#808082" - GetEquipmentMake: - description: A collection of Assets - content: - application/json: - schema: - type: object - properties: - values: - items: - $ref: '#/components/schemas/equipment-make' - examples: - No Header: - value: - links: [] - values: - - '@type': EquipmentMake - name: JOHN DEERE - certified: false - deereOrSubsidiary: true - id: 1 - ERID: 0e8031fe-fe81-11ea-bec7-124fe3772e59 - GetEquipmentByMakeId: - description: A collection of Assets - content: - application/json: - schema: - type: object - examples: - No Header: - value: - '@type': EquipmentMake - name: JOHN DEERE - certified: false - deereOrSubsidiary: true - id: 1 - ERID: 0e8031fe-fe81-11ea-bec7-124fe3772e59 - GetEquipmentTypesByMakeId: - description: A collection of Assets - content: - application/json: - schema: - type: object - examples: - No Header: - value: - links: [ ] - values: - - '@type': EquipmentType - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - '@type': EquipmentIcon - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - GetEquipmentTypes: - description: A collection of Assets - content: - application/json: - schema: - type: object - examples: - No Header: - value: - links: [ ] - values: - - '@type': EquipmentType - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - '@type': EquipmentIcon - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - GetEquipmentTypeByEquipmentMakeIdAndEquipmentTypeId: - description: A collection of Assets - content: - application/json: - schema: - type: object - properties: - values: - items: - $ref: '#/components/schemas/equipment-type' - examples: - No Header: - value: - - '@type': EquipmentType - name: "Scraper" - ERID: "15e10ade-33ae-40a1-9b06-7800c7581a17" - category: "Implement" - marketSegment: "Construction" - allowsCustomModel: true - id: "121" - icon: - '@type': EquipmentIcon - name: "generic-fuel-trailer" - iconStyle: - primaryColor: "#7E7E7E" - secondaryColor: "#D3D3D3" - CreateEquip: - description: Create - content: - application/json: - schema: - type: object - examples: - Headers: - description: '201 Created' - UpdatedEquip: - description: Update - content: - application/json: - schema: - type: object - examples: - Headers: - description: '204 No Content' + "@type": + type: "string" + enum: + - "Version" + description: "Version" + example: "Version" + name: + type: "string" + description: "The name of the version." + example: "3.16.1171" diff --git a/specs/raw/farms.yaml b/specs/raw/farms.yaml index d79cdd7..8a288b3 100644 --- a/specs/raw/farms.yaml +++ b/specs/raw/farms.yaml @@ -1,567 +1,529 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - title: Farms API - version: '3.0' + title: "Farms API" + version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: + /organizations/{orgID}/farms/{id}/fields: + get: + description: "View details on the field to which a specified farm belongs. The response will link to the following resources:
  • boundaries: View the boundaries of this field.
  • clients: View the clients associated with this field.
  • farms: View the farms belonging to this field.
  • owningOrganization: View the organization that owns the field.
  • activeBoundary: View the active boundary of this field.
" + summary: "View a Farm's Field" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Id3" + - $ref: "#/components/parameters/X-deere-signature" + responses: + "200": + description: "Get Field by client Id" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FieldResponse2" + examples: + No Header: + description: "20O OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + total: 1 + values: + - name: "Nautilus" + archived: false + id: "a7cb723f-6707-46fb-a9ff-4e734e3daf58" + lastModifiedTime: "2020-09-21T15:41:15.205Z" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58" + - rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries" + - rel: "clients" + uri: "https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef " /organizations/{orgId}/farms: get: - description: Retrieve all of the farms for an organization - summary: View Farms in an Org - operationId: getAllFarms + description: "Retrieve all of the farms for an organization" + summary: "View Farms in an Org" + operationId: "getAllFarms" parameters: - - $ref: '#/components/parameters/RecordMetadataEmbed' - - $ref: '#/components/parameters/RecordFilter' - - $ref: '#/components/parameters/OrgId' + - $ref: "#/components/parameters/RecordMetadataEmbed" + - $ref: "#/components/parameters/RecordFilter" + - $ref: "#/components/parameters/OrgId" responses: - 200: - $ref: '#/components/responses/FarmsReturned' - 304: - $ref: '#/components/responses/HasNotChanged' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgNotFound' + "200": + $ref: "#/components/responses/FarmsReturned" + "304": + $ref: "#/components/responses/HasNotChanged" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgNotFound" post: parameters: - - $ref: '#/components/parameters/OrgId' - description: Create a farm for a given organization - summary: Create Farm - operationId: createFarm + - $ref: "#/components/parameters/OrgId" + description: "Create a farm for a given organization" + summary: "Create Farm" + operationId: "createFarm" requestBody: - description: The request body used to create or update a farm + description: "The request body used to create or update a farm" content: application/vnd.deere.axiom.v3+json: examples: Create Farm: value: - name: farmName + name: "farmName" archived: false links: - - "@type": Link, - rel: client - links: https://sandboxapi.deere.com/platform/organizations/{orgId}/clients/{clientId} + - "@type": "Link," + rel: "client" + links: "https://sandboxapi.deere.com/platform/organizations/{orgId}/clients/{clientId}" schema: - $ref: '#/components/requestBodies/FarmRequest' + $ref: "#/components/requestBodies/FarmRequest" responses: - 201: - $ref: '#/components/responses/FarmCreatedResponse' - 400: - $ref: '#/components/responses/MalformedRequest' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgNotFound' + "201": + $ref: "#/components/responses/FarmCreatedResponse" + "400": + $ref: "#/components/responses/MalformedRequest" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgNotFound" /organizations/{orgId}/farms/{farmId}: get: - description: Get farm by organization and farmId - summary: View a Farm - operationId: getFarm + description: "Get farm by organization and farmId" + summary: "View a Farm" + operationId: "getFarm" parameters: - - $ref: '#/components/parameters/RecordMetadataEmbed' - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FarmId' + - $ref: "#/components/parameters/RecordMetadataEmbed" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FarmId" responses: - 200: - $ref: '#/components/responses/FarmReturned' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgOrFarmNotFound' + "200": + $ref: "#/components/responses/FarmReturned" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgOrFarmNotFound" put: parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FarmId' - description: Update farm by Id - summary: Update a Farm - operationId: updateFarm + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FarmId" + description: "Update farm by Id" + summary: "Update a Farm" + operationId: "updateFarm" requestBody: - description: The request body used to create or update a farm + description: "The request body used to create or update a farm" content: application/vnd.deere.axiom.v3+json: examples: Update Farm: value: - name: farmName + name: "farmName" archived: false links: - - "@type": Link, - rel: client - links: https://sandboxapi.deere.com/platform/organizations/{orgId}/clients/{clientId} + - "@type": "Link," + rel: "client" + links: "https://sandboxapi.deere.com/platform/organizations/{orgId}/clients/{clientId}" schema: - $ref: '#/components/requestBodies/FarmRequest' + $ref: "#/components/requestBodies/FarmRequest" responses: - 204: - $ref: '#/components/responses/UpdatedResponse' - 400: - $ref: '#/components/responses/MalformedRequest' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgOrFarmNotFound' + "204": + $ref: "#/components/responses/UpdatedResponse" + "400": + $ref: "#/components/responses/MalformedRequest" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgOrFarmNotFound" delete: parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FarmId' - description: Delete a farm by Id - summary: Delete a Farm - operationId: deleteFarm + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FarmId" + description: "Delete a farm by Id" + summary: "Delete a Farm" + operationId: "deleteFarm" responses: - 204: - $ref: '#/components/responses/DeletedResponse' - 403: - $ref: '#/components/responses/DoesNotHaveAccessResponse' - 404: - $ref: '#/components/responses/OrgOrFarmNotFound' + "204": + $ref: "#/components/responses/DeletedResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/OrgOrFarmNotFound" /organizations/{orgId}/farms/{farmId}/clients: get: parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FarmId' - description: Get clients by organization and farmId - summary: View Clients that Own a Farm - operationId: getAllClients - responses: - 200: - $ref: '#/components/responses/ClientsReturned' - 304: - $ref: '#/components/responses/HasNotChanged' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgNotFound' - /organizations/{orgID}/farms/{id}/fields: - get: - description: 'View details on the field to which a specified farm belongs. The response will link to the following resources: -
    -
  • boundaries: View the boundaries of this field.
  • -
  • clients: View the clients associated with this field.
  • -
  • farms: View the farms belonging to this field.
  • -
  • owningOrganization: View the organization that owns the field.
  • -
  • activeBoundary: View the active boundary of this field.
  • -
' - summary: View a Farm's Field - security: - - OAuth2: [ ag1 ] - parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Id3' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FarmId" + description: "Get clients by organization and farmId" + summary: "View Clients that Own a Farm" + operationId: "getAllClients" responses: - 200: - description: Get Field by client Id - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - type: array - items: - $ref: '#/components/schemas/GroupLink' - total: - type: integer - example: 1 - format: int32 - values: - type: array - items: - $ref: '#/components/schemas/FieldResponse2' - examples: - No Header: - description: '20O OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 3b5392615e4b4e1c92013026f47109bb' - value: - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - total: 1 - values: - - name: Nautilus - archived: false - id: a7cb723f-6707-46fb-a9ff-4e734e3daf58 - lastModifiedTime: 2020-09-21T15:41:15.205Z - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58 - - rel: boundaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/boundaries - - rel: clients - uri: >- - https://sandboxapi.deere.comm/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: contributionDefinition - uri: >- - https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - + "200": + $ref: "#/components/responses/ClientsReturned" + "304": + $ref: "#/components/responses/HasNotChanged" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgNotFound" components: parameters: - OrgId: - in: path - name: orgId - description: The id of the organization + FarmId: + in: "path" + name: "farmId" + description: "Farm id" required: true schema: - type: integer - format: int64 - example: 12345 - X-deere-signature: - name: x-deere-signature - in: header - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. - schema: - type: string - example: 9r8392615e4b4e1c92018026f47109bb + type: "string" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" Id3: - name: id - in: path - description: Farm ID + name: "id" + in: "path" + description: "Farm ID" required: true schema: - type: GUID - example: 14e69520-34b2-4e67-b5f1-fffaf49531de - FarmId: - in: path - name: farmId - description: Farm id + type: "GUID" + example: "14e69520-34b2-4e67-b5f1-fffaf49531de" + OrgId: + in: "path" + name: "orgId" + description: "The id of the organization" required: true schema: - type: string - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d + type: "integer" + format: "int64" + example: 12345 + RecordFilter: + name: "recordFilter" + in: "query" + description: "Allows filtering based on archived status" + required: false + example: "archived" + schema: + type: "string" + enum: + - "available" + - "archived" + - "all" + default: "available" RecordMetadataEmbed: - in: query - name: embed - description: Embed additional traceability record metadata to response + in: "query" + name: "embed" + description: "Embed additional traceability record metadata to response" required: false schema: - type: string + type: "string" example: "showRecordMetadata" - RecordFilter: - name: recordFilter - in: query - description: Allows filtering based on archived status - required: false - example: archived + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: string - enum: - - available - - archived - - all - default: available + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" requestBodies: FarmRequest: - $ref: '#/components/schemas/PostFarm' + $ref: "#/components/schemas/PostFarm" responses: ClientsReturned: - description: Array of clients containing links related to assets + description: "Array of clients containing links related to assets" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Clients' + $ref: "#/components/schemas/Clients" examples: No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/6789/farms/d9e5d785-6a0f-4b38-83b9-297a5a87675f/clients + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/d9e5d785-6a0f-4b38-83b9-297a5a87675f/clients" total: 2 values: - - name: Captain Nemo + - name: "Captain Nemo" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" archived: false - - name: Aslan + - name: "Aslan" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" archived: false - FarmsReturned: - description: Array of farms containing links related to assets + DeletedResponse: + description: "Deleted" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/GetFarms' + properties: + total: + type: "integer" + example: 1 + format: "int32" examples: - No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' - value: - links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/6789/farms - total: 2 - values: - - name: FarmName - clientUri: https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274, - archived: false - id: f1161eba-7c82-4a80-9eeb-383451b4c46e - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - + Headers: + description: "204 No Content" + DoesNotHaveAccessResponse: + description: "Does not have access" + DoesNotHaveAccessToOrg: + description: "Invalid access to organization" + FarmCreatedResponse: + description: "created" + headers: + Location: + schema: + description: "The uri of the newly created resource" + type: "string" + format: "url" + example: "https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" FarmReturned: - description: Success + description: "Success" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/GetFarm' + $ref: "#/components/schemas/GetFarm" examples: No Header: - description: '200 OK
- Content-Type: application/vnd.deere.axiom.v3+json
- x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: values: - - name: FarmName - clientUri: https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274, + - name: "FarmName" + clientUri: "https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274," archived: false - id: f1161eba-7c82-4a80-9eeb-383451b4c46e + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - FarmCreatedResponse: - description: created - headers: - Location: - schema: - description: The uri of the newly created resource - type: string - format: url - example: https://sandboxapi.deere.com/platform/organizations/1234/clients/795b80cf-eb03-4c43-a9e1-f46eb0fbf912 - DeletedResponse: - description: Deleted + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + FarmsReturned: + description: "Array of farms containing links related to assets" content: application/vnd.deere.axiom.v3+json: schema: - properties: - total: - type: integer - example: 1 - format: int32 + $ref: "#/components/schemas/GetFarms" examples: - Headers: - description: '204 No Content' - UpdatedResponse: - description: Updated - DoesNotHaveAccessResponse: - description: Does not have access - DoesNotHaveAccessToOrg: - description: Invalid access to organization + No Header: + description: "200 OK
Content-Type: application/vnd.deere.axiom.v3+json
x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms" + total: 2 + values: + - name: "FarmName" + clientUri: "https://sandboxapi.deere.com/platform/organizations/592715/clients/e45d1773-cb82-468-96ac-ba65917dd274," + archived: false + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/farms/f1161eba-7c82-4a80-9eeb-383451b4c46e/clients" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" HasNotChanged: - description: Content has not changed since last call - OrgNotFound: - description: Organization not found - OrgOrFarmNotFound: - description: Organization or farm not found + description: "Content has not changed since last call" MalformedRequest: - description: Request Validation failure. + description: "Request Validation failure." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/MalformedRequestError' - + $ref: "#/components/schemas/MalformedRequestError" + OrgNotFound: + description: "Organization not found" + OrgOrFarmNotFound: + description: "Organization or farm not found" + UpdatedResponse: + description: "Updated" schemas: Clients: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/GroupLink' + $ref: "#/components/schemas/GroupLink" name: - type: string + type: "string" id: - type: string + type: "string" archived: - type: boolean - + type: "boolean" FieldResponse2: properties: x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 3b5392615e4b4e1c92013026f47109bb + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "3b5392615e4b4e1c92013026f47109bb" id: - type: GUID - format: uuid - example: 14e69520-34b2-4e67-b5f1-fffaf49531de - description: Farm ID + type: "GUID" + format: "uuid" + example: "14e69520-34b2-4e67-b5f1-fffaf49531de" + description: "Farm ID" name: - type: string - description: Farm Name - example: Aronnax Farm + type: "string" + description: "Farm Name" + example: "Aronnax Farm" lastModifiedTime: - type: string - description: The last time the farm was modified. - example: 2020-09-21T15:41:15.205Z - - GetFarms: - type: object - properties: - total: - type: integer - example: 1 - format: int32 - links: - type: array - items: - type: object - properties: - rel: - type: string - example: self - uri: - type: string - example: https://apiqa.tal.deere.com/platform/organizations/5555/farms/ - values: - type: array - items: - $ref: '#/components/schemas/GetFarm' - + type: "string" + description: "The last time the farm was modified." + example: "2020-09-21T15:41:15.205Z" GetFarm: - type: object + type: "object" properties: - '@type': - type: string - example: Farm + "@type": + type: "string" + example: "Farm" name: - type: string - example: John Doe - description: Farm Name + type: "string" + example: "John Doe" + description: "Farm Name" id: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" readOnly: true - description: Farm Id + description: "Farm Id" archived: - type: boolean + type: "boolean" example: false - description: Archived Status + description: "Archived Status" clientUri: - type: string - example: https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c - description: Client Uri + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c" + description: "Client Uri" links: - type: array + type: "array" readOnly: true items: - type: object + type: "object" properties: - '@type': - type: string - example: Link + "@type": + type: "string" + example: "Link" rel: - type: string - example: self + type: "string" + example: "self" uri: - type: string - example: https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d - - GroupLink: - description: Link to another resource - type: object - PostFarm: - type: object + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + GetFarms: + type: "object" properties: - name: - required: true - type: string - example: John Doe - archived: - type: boolean - example: false - clientUri: - required: true - description: Link to client resource - type: string - example: https://apiqa.tal.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d - + total: + type: "integer" + example: 1 + format: "int32" + links: + type: "array" + items: + type: "object" + properties: + rel: + type: "string" + example: "self" + uri: + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/" + values: + type: "array" + items: + $ref: "#/components/schemas/GetFarm" + GroupLink: + description: "Link to another resource" + type: "object" MalformedRequestError: - type: object + type: "object" properties: - '@type': - type: string - example: Link + "@type": + type: "string" + example: "Link" rel: - type: string - example: self + type: "string" + example: "self" uri: - type: string - example: Errors + type: "string" + example: "Errors" errors: - type: array + type: "array" items: properties: - '@type': - type: string - example: Error + "@type": + type: "string" + example: "Error" guid: - type: string - format: uuid - example: ed292512-1f3c-4285-83c3-1fb084423f9b + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" message: - type: string - example: This field is required. + type: "string" + example: "This field is required." otherAttributes: - type: object - example: { } + type: "object" + example: {} + PostFarm: + type: "object" + properties: + name: + required: true + type: "string" + example: "John Doe" + archived: + type: "boolean" + example: false + clientUri: + required: true + description: "Link to client resource" + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d" diff --git a/specs/raw/field-operations-api.yaml b/specs/raw/field-operations-api.yaml index 2eb8f88..9d9c4fe 100644 --- a/specs/raw/field-operations-api.yaml +++ b/specs/raw/field-operations-api.yaml @@ -1,428 +1,415 @@ -openapi: 3.0.1 +openapi: "3.0.1" info: - title: Field Operations API - description: Provides field operation retrieval within an organizational context - version: '3.0' + title: "Field Operations API" + description: "Provides field operation retrieval within an organizational context" + version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - partnerapi - - sandboxapi - - apicert - - partnerapicert - - apiqa.tal - - partnerapiqa - - sandboxapiqa - + - "api" + - "partnerapi" + - "sandboxapi" + - "apicert" + - "partnerapicert" + - "apiqa.tal" + - "partnerapiqa" + - "sandboxapiqa" paths: - /organizations/{orgId}/fields/{fieldId}/fieldOperations: + /fieldOperations/{operationId}: get: - summary: List Field Operations - description: 'This resource returns logical data structures representing the agronomic operations performed in a field. - Supported field operation types include Seeding, Application, and Harvest. - A single field operation may potentially span consecutive days depending on the type of operation. - Each field operation may have one or more measurements, listed as links from the field operation itself. - Each field operation will include links to: -
-
    -
  • organization: The organization which owns this data.
  • -
  • field: The field in which this operation was performed.
  • -
  • self: The field operation.
  • -
' + summary: "View a Field Operation" + description: "View a single field operation. The response will include links to:
  • organization: The organization which owns this data.
  • field: The field in which this operation was performed.
  • self: The field operation.
    • " parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - - $ref: '#/components/parameters/CropSeason' - - $ref: '#/components/parameters/FieldOperationType' - - $ref: "#/components/parameters/StartDate" - - $ref: "#/components/parameters/EndDate" - - $ref: '#/components/parameters/FieldEmbed' - - $ref: '#/components/parameters/WorkPlanIds' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/OperationId" + - $ref: "#/components/parameters/FieldEmbed" headers: - - $ref: '#/components/parameters/Accept-UOM-System' - - $ref: '#/components/parameters/Accept-Yield-Preference' + - $ref: "#/components/parameters/Accept-UOM-System" + - $ref: "#/components/parameters/Accept-Yield-Preference" - $ref: "#/components/parameters/RoundMeasurements" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag2" responses: - 200: - $ref: '#/components/responses/FieldOperations' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToFieldOperations' - 404: - $ref: '#/components/responses/RequestedResourceNotFound' - /fieldOperations/{operationId}: + "200": + $ref: "#/components/responses/FieldOperationId" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToFieldOperations" + "404": + $ref: "#/components/responses/InputFieldOperationValueIsInvalid" + /fieldOperations/{operationId}/measurementTypes: get: - summary: View a Field Operation - description: 'View a single field operation. - The response will include links to: -
      -
        -
      • organization: The organization which owns this data.
      • -
      • field: The field in which this operation was performed.
      • -
      • self: The field operation.
      • -
          ' + summary: "Field Operation Measurements" + description: "Field Operations include a variety of measurements collected when the operation is performed in the field. This endpoint returns an array of measurement types available for a given field operation. Two categories of measurements are available today:
          • Target: Target measurements refer to what the machine or implement attempted to perform in the field.
          • Result: Result measurements refer to what the machine or implement actually accomplished in the field.
          For example, the SeedingRateTarget measurement describes the rate at which the equipment attempted to plant seeds, while the SeedingRateResult measurement describes the rate at which seeds were actually planted by the equipment. Target measurements may be consistent throughout the entire operation (the operator may have applied a single rate across an entire field) but result measurements will vary during the operation as they account for machine error, operator error, and environmental factors. The difference in rate and location are easily visible in the associated map image.

          Note: The values included in the responses will depend on their availability as well as the field operation type (Seeding, Application Tank Mix, Application Single Product, Harvest Yield Contour, or Harvest Yield Result). Please refer measurement types. \"carting\" operations as well as construction operations \"constructionmilling\", \"constructionpaving\", \"constructioncompacting\", \"constructioncrushing\", \"constructionstabilizingrecycling\" are not supported at this time." parameters: - - $ref: '#/components/parameters/OperationId' - - $ref: '#/components/parameters/FieldEmbed' + - $ref: "#/components/parameters/OperationId" + - $ref: "#/components/parameters/MeasurementType_MeasurementType" headers: - - $ref: '#/components/parameters/Accept-UOM-System' - - $ref: '#/components/parameters/Accept-Yield-Preference' - - $ref: "#/components/parameters/RoundMeasurements" + - $ref: "#/components/parameters/Accept-UOM-System_MeasurementType" + - $ref: "#/components/parameters/Accept-Yield-Preference_MeasurementType" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag2" responses: - 200: - $ref: '#/components/responses/FieldOperationId' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToFieldOperations' - 404: - $ref: '#/components/responses/InputFieldOperationValueIsInvalid' - + "200": + $ref: "#/components/responses/FieldOperationMeasurement" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToFieldOperationMeasurements" + "404": + $ref: "#/components/responses/InputOrganizationOrFieldOperationIsInvalid" + /fieldOperations/{operationId}/measurementTypes/{measurementType}: + get: + summary: "Field Operation Measurement" + description: "Field Operations include a variety of measurements collected when the operation is performed in the field. This endpoint returns an array of measurement types available for a given field operation. Two categories of measurements are available today:
          • Target: Target measurements refer to what the machine or implement attempted to perform in the field.
          • Result: Result measurements refer to what the machine or implement actually accomplished in the field.
          For example, the SeedingRateTarget measurement describes the rate at which the equipment attempted to plant seeds, while the SeedingRateResult measurement describes the rate at which seeds were actually planted by the equipment. Target measurements may be consistent throughout the entire operation (the operator may have applied a single rate across an entire field) but result measurements will vary during the operation as they account for machine error, operator error, and environmental factors. The difference in rate and location are easily visible in the associated map image.

          Note: The values included in the responses will depend on their availability as well as the field operation type (Seeding, Application Tank Mix, Application Single Product, Harvest Yield Contour, or Harvest Yield Result). To view the different responses for each field operation type, view the Field Operation Measurements documentation above. Please refer measurement types

          Note: This API has two possible accept headers. One will give a response with totals, and the other will give a response with a Base64 encoded image. For the image layer, A map image is available for each measurement offering a visual depiction of the data. Argonomic data points are grouped either by label (such as variety name) or numerical range, and this information provided in the JSON response as a map legend." + parameters: + - $ref: "#/components/parameters/OperationId" + - $ref: "#/components/parameters/MeasurementType_MeasurementType" + headers: + - $ref: "#/components/parameters/Accept-UOM-System_MeasurementType" + - $ref: "#/components/parameters/Accept-Yield-Preference_MeasurementType" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/responses/FieldOperationMeasurementOrImage_MeasurementType" /fieldOps/{operationId}: get: - summary: Asynchronous Shapefile Download - description: 'An ESRI Shapefile is available for each Field Operation. - Please see the shapefiles overview for details on the shapefile format - and how to consume it.

          The expected response codes are:

          -
            -
          • 202 Accepted – The request was received and is being processed. Call back later to check for completion. -
              -
            • This API does not currently support webhooks. To check for completion, repeat the same API call until you get an HTTP 307.
            • -
            • Processing may take up to 30 minutes, depending on the size of data. Applications should poll the API using a backoff loop. Polling intervals should start at 5 seconds and double with each attempt: secondsToWait = 5 * 2 ^ (numberOfAttempts - 1)
            • -
            -
          • -
          • 307 Temporary Redirect – The shapefile is ready to download. This response contains a location header. - The location is a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to the URL in the location header. Do not apply OAuth signing or other authorization to this request - it will cause the call to fail. -
          • -
          • 406 Not Acceptable - A shapefile cannot be generated. -
          • -
          - Note the initial call for a shapefile may receive either a 202 or a 307 response, - depending upon whether an up-to-date file already exists for the specified field operation. -

          For a sample integration, see our Java sample code.' + summary: "Asynchronous Shapefile Download" + description: "An ESRI Shapefile is available for each Field Operation. Please see the shapefiles overview for details on the shapefile format and how to consume it.

          The expected response codes are:

          • 202 Accepted – The request was received and is being processed. Call back later to check for completion.
            • This API does not currently support webhooks. To check for completion, repeat the same API call until you get an HTTP 307.
            • Processing may take up to 30 minutes, depending on the size of data. Applications should poll the API using a backoff loop. Polling intervals should start at 5 seconds and double with each attempt: secondsToWait = 5 * 2 ^ (numberOfAttempts - 1)
          • 307 Temporary Redirect – The shapefile is ready to download. This response contains a location header. The location is a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to the URL in the location header. Do not apply OAuth signing or other authorization to this request - it will cause the call to fail.
          • 406 Not Acceptable - A shapefile cannot be generated.
          Note the initial call for a shapefile may receive either a 202 or a 307 response, depending upon whether an up-to-date file already exists for the specified field operation.

          For a sample integration, see our Java sample code." parameters: - - $ref: '#/components/parameters/OperationId' - - $ref: '#/components/parameters/SplitShapeFile' - - $ref: '#/components/parameters/ShapeType' - - $ref: '#/components/parameters/Resolution' - - $ref: '#/components/parameters/Accept-UOM-System' - - $ref: '#/components/parameters/Accept-Yield-Preference' + - $ref: "#/components/parameters/OperationId" + - $ref: "#/components/parameters/SplitShapeFile" + - $ref: "#/components/parameters/ShapeType" + - $ref: "#/components/parameters/Resolution" + - $ref: "#/components/parameters/Accept-UOM-System" + - $ref: "#/components/parameters/Accept-Yield-Preference" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag2" responses: - 202: - $ref: '#/components/responses/RequestHasBeenAccepted' - 307: - $ref: '#/components/responses/RedirectToPreSignedURL' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToFieldOperations' - 404: - $ref: '#/components/responses/InputFieldOperationValueIsInvalid' - 406: - $ref: '#/components/responses/RequestHasNotBeenAccepted' - + "202": + $ref: "#/components/responses/RequestHasBeenAccepted" + "307": + $ref: "#/components/responses/RedirectToPreSignedURL" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToFieldOperations" + "404": + $ref: "#/components/responses/InputFieldOperationValueIsInvalid" + "406": + $ref: "#/components/responses/RequestHasNotBeenAccepted" + /organizations/{orgId}/fields/{fieldId}/fieldOperations: + get: + summary: "List Field Operations" + description: "This resource returns logical data structures representing the agronomic operations performed in a field. Supported field operation types include Seeding, Application, and Harvest. A single field operation may potentially span consecutive days depending on the type of operation. Each field operation may have one or more measurements, listed as links from the field operation itself. Each field operation will include links to:
          • organization: The organization which owns this data.
          • field: The field in which this operation was performed.
          • self: The field operation.
          " + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/CropSeason" + - $ref: "#/components/parameters/FieldOperationType" + - $ref: "#/components/parameters/StartDate" + - $ref: "#/components/parameters/EndDate" + - $ref: "#/components/parameters/FieldEmbed" + - $ref: "#/components/parameters/WorkPlanIds" + - $ref: "#/components/parameters/X-deere-signature" + headers: + - $ref: "#/components/parameters/Accept-UOM-System" + - $ref: "#/components/parameters/Accept-Yield-Preference" + - $ref: "#/components/parameters/RoundMeasurements" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/responses/FieldOperations" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToFieldOperations" + "404": + $ref: "#/components/responses/RequestedResourceNotFound" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag2: 'ag2' parameters: - OrgId: - name: orgId - in: path - description: Owning Organization ID - required: true + Accept-UOM-System: + name: "Accept-UOM-System" + in: "header" + description: "Unit of measure system to use for numeric values in the shapefiles. Accepted values are \"METRIC\", \"ENGLISH\", and \"MIXED\".If this header is not specified, the unit system will be determined by the organization preference of the owning organization.For all unit systems, the units are consistent with ADAPT's unit system." schema: - type: string - format: int64 - example: 12345 - FieldId: - name: fieldId - in: path - required: true - description: Field ID + type: "string" + example: "METRIC" + Accept-UOM-System_MeasurementType: + name: "Accept-UOM-System" + in: "header" + description: "Desired unit system. Takes ENGLISH or METRIC." schema: - type: GUID - format: guid - example: d01111d6-1fa4-4659-943a-3df4a6b7933c - OperationId: - name: operationId - in: path - required: true - description: Operation ID + type: "string" + example: "ENGLISH" + Accept-Yield-Preference: + name: "Accept-Yield-Preference" + in: "header" + description: "Desired yield representation (unit) type. Accepted values are VOLUME or MASS." + required: false schema: - type: string - example: MTIzNF81NjFiZGY1 - WorkNoteId: - name: workNoteId - in: path - required: true - description: The identifier for a work note. - The work note id will be used to identify unique work notes. + type: "string" + example: "VOLUME" + Accept-Yield-Preference_MeasurementType: + name: "Accept-Yield-Preference" + in: "header" + description: "Desired yield representation (unit) type. Takes VOLUME or MASS." schema: - type: string - format: guid - example: 306d497f-e5e1-4921-8841-3c5f582e3a2e - MeasurementType: - name: measurementType - in: path - description: The measurementType within field operation by machine + type: "string" + example: "MASS" + CompareType: + in: "path" required: true + name: "compareType" + description: "The type of comparison to apply to the current Field Operation Layer. Rules: + + \ * `dataAnalysis` - Build the statistics for the `baseLayer` broken down by the land area for each of the legend values for the `compareLayer`." schema: - $ref: '#/components/schemas/FieldOperationMeasurementTypesEnum' - OperationLayerName: - name: layerName - in: path - description: The operation layer name for a given field operation - required: true + type: "string" + enum: + - "dataAnalysis" + Contour: + name: "contour" + in: "query" + description: "A percentage value representing how much smoothing/contouring will be applied to the image. Higher numbers mean more contouring." schema: - $ref: '#/components/schemas/FieldOperationLayersEnum' - CompareType: - in: path - required: true - name: compareType - description: >- - The type of comparison to apply to the current Field Operation Layer. - Rules: - * `dataAnalysis` - Build the statistics for the `baseLayer` broken down by the land area for each of the legend values for the `compareLayer`. + type: "number" + minimum: 0 + maximum: 100 + example: 50.37 + CropSeason: + in: "query" + name: "cropSeason" + description: "Retrieve operations for a specific crop season (year)." + schema: + $ref: "#/components/schemas/CropSeason" + CropSeasons: + in: "query" + name: "cropSeasons" + description: "Retrieve operations for a specific crop seasons (years)." + schema: + $ref: "#/components/schemas/CropSeasons" + EndDate: + name: "endDate" + in: "query" + description: "Specify the ending date of the seven-day period in ISO-8601 format. Query Filter is inclusive." + schema: + type: "string" + format: "date-time" + example: "2018-04-26T15:18:15.205Z" + FieldEmbed: + in: "query" + name: "embed" + description: "List available operation measurement types and totals." schema: - type: string + type: "array" + items: + type: "string" enum: - - dataAnalysis + - "measurementTypes" + FieldId: + name: "fieldId" + in: "path" + required: true + description: "Field ID" + schema: + type: "GUID" + format: "guid" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + FieldOperationLayerLegendEmbed: + name: "embed" + in: "query" + description: "Include additional subelements in response." + schema: + type: "array" + items: + type: "string" + enum: + - "image" + FieldOperationMachineEmbed: + name: "embed" + in: "query" + description: "Include additional subelements in response." + schema: + type: "array" + items: + type: "string" + enum: + - "machine" FieldOperationType: - in: query - name: fieldOperationType - description: Filter results by field operation type. Takes the values "APPLICATION", "HARVEST", "SEEDING", and "TILLAGE". + in: "query" + name: "fieldOperationType" + description: "Filter results by field operation type. Takes the values \"APPLICATION\", \"CARTING\", \"HARVEST\", \"SEEDING\", and \"TILLAGE\"." schema: - $ref: '#/components/schemas/FieldOperationTypesEnum' + $ref: "#/components/schemas/FieldOperationTypesEnum" FieldOperationTypes: - name: fieldOperationTypes - in: query - description: The type of operations. If the request param is not supplied, no filtering by fieldOperationType will happen + name: "fieldOperationTypes" + in: "query" + description: "The type of operations. If the request param is not supplied, no filtering by fieldOperationType will happen" schema: - type: array + type: "array" items: - $ref: '#/components/schemas/FieldOperationTypesEnum' - FieldEmbed: - in: query - name: embed - description: List available operation measurement types and totals. + $ref: "#/components/schemas/FieldOperationTypesEnum" + FieldOperationsEmbed: + name: "embed" + in: "query" + description: "Include additional subelements in response." + required: false schema: - type: array + type: "array" items: - type: string - enum: - - measurementTypes - WorkPlanIds: - name: workPlanIds - in: query - description: Query by one or more workPlanIds(comma separated) - required: false + type: "string" + enum: + - "measurementTypes" + - "client" + - "farm" + - "field" + - "fieldOperationMachines" + - "workNotes" + - "crops" + - "refreshInProgress" + - "fieldOperationWorkNotes" + - "operationLayers" + MeasurementType: + name: "measurementType" + in: "path" + description: "The measurementType within field operation by machine" + required: true schema: - type: List Of GUID - example: '["d6166574-4ede-404e-8a68-85d4284b869d"]' - X-deere-signature: - name: x-deere-signature - in: header - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. + $ref: "#/components/schemas/FieldOperationMeasurementTypesEnum" + MeasurementType_MeasurementType: + name: "measurementType" + in: "path" + description: "Measurement Type" required: false schema: - type: string - example: 520122365ebb4870a344784570d202c7 + example: "HarvestYield" + type: "string" + OperationId: + name: "operationId" + in: "path" + required: true + description: "Operation ID" + schema: + type: "string" + example: "MTIzNF81NjFiZGY1" + OperationIds: + name: "operationIds" + in: "query" + required: true + description: "The identifier(s) for Field Operation(s). Used when there is the potential for more than one Field Operation to be passed. The identifier(s) will have a different format for HDP vs. IMET Field Operations but, clients should treat this as a generic string and not parse it in any way." + schema: + type: "array" + items: + type: "string" + example: "306d497f-e5e1-4921-8841-3c5f582e3a2e" + OperationLayerName: + name: "layerName" + in: "path" + description: "The operation layer name for a given field operation" + required: true + schema: + $ref: "#/components/schemas/FieldOperationLayersEnum" + OrgId: + name: "orgId" + in: "path" + description: "Owning Organization ID" + required: true + schema: + type: "string" + format: "int64" + example: 12345 + Resolution: + name: "resolution" + in: "query" + description: "Choose a data resolution for the shapefile. Accepted values are \"EachSection\", \"EachSensor\", and \"OneHertz\"." + schema: + type: "string" + example: "EachSensor" + enum: + - "EachSection" + - "EachSensor" + - "OneHertz" RoundMeasurements: description: "Set to true for standard Deere rounded measurements. Set to false for not rounded measurements." - in: header - name: Round-Measurements + in: "header" + name: "Round-Measurements" schema: default: true enum: - true - false - type: boolean - CropSeason: - in: query - name: cropSeason - description: Retrieve operations for a specific crop season (year). - schema: - $ref: '#/components/schemas/CropSeason' - CropSeasons: - in: query - name: cropSeasons - description: Retrieve operations for a specific crop seasons (years). - schema: - $ref: '#/components/schemas/CropSeasons' - SplitShapeFile: - name: splitShapeFile - in: query - description: If true, this will download the shapefile in small 20MB pieces - schema: - type: boolean - example: 'false' + type: "boolean" ShapeType: - name: shapeType - in: query - description: Choose between point-based and polygon-based shapefiles. Accepted values are "Point" and "Polygon". - schema: - type: string - example: Polygon - enum: - - Point - - Polygon - Resolution: - name: resolution - in: query - description: Choose a data resolution for the shapefile. Accepted values are "EachSection", "EachSensor", and "OneHertz". + name: "shapeType" + in: "query" + description: "Choose between point-based and polygon-based shapefiles. Accepted values are \"Point\" and \"Polygon\"." schema: - type: string - example: EachSensor + type: "string" + example: "Polygon" enum: - - EachSection - - EachSensor - - OneHertz - Accept-UOM-System: - name: Accept-UOM-System - in: header - description: Unit of measure system to use for numeric values in the shapefiles. Accepted values are "METRIC", "ENGLISH", and "MIXED".If this header is not specified, the unit system will be determined by the organization preference of the owning organization.For all unit systems, the units are consistent with ADAPT's unit system. - schema: - type: string - example: METRIC - Accept-Yield-Preference: - name: Accept-Yield-Preference - in: header - description: Desired yield representation (unit) type. Accepted values are VOLUME or MASS. - required: false + - "Point" + - "Polygon" + SplitShapeFile: + name: "splitShapeFile" + in: "query" + description: "If true, this will download the shapefile in small 20MB pieces" schema: - type: string - example: VOLUME + type: "boolean" + example: "false" StartDate: - in: query - name: startDate - description: Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive. - schema: - type: string - format: date-time - example: '2018-04-25T15:18:15.205Z' - EndDate: - name: endDate - in: query - description: Specify the ending date of the seven-day period in ISO-8601 format. Query Filter is inclusive. + in: "query" + name: "startDate" + description: "Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive." schema: - type: string - format: date-time - example: '2018-04-26T15:18:15.205Z' - Contour: - name: contour - in: query - description: A percentage value representing how much smoothing/contouring will be applied to the image. - Higher numbers mean more contouring. + type: "string" + format: "date-time" + example: "2018-04-25T15:18:15.205Z" + WorkNoteId: + name: "workNoteId" + in: "path" + required: true + description: "The identifier for a work note. The work note id will be used to identify unique work notes." schema: - type: number - minimum: 0.0 - maximum: 100.0 - example: 50.37 - - FieldOperationsEmbed: - name: embed - in: query - description: Include additional subelements in response. + type: "string" + format: "guid" + example: "306d497f-e5e1-4921-8841-3c5f582e3a2e" + WorkPlanIds: + name: "workPlanIds" + in: "query" + description: "Query by one or more workPlanIds(comma separated)" required: false schema: - type: array - items: - type: string - enum: - [ - 'measurementTypes', - 'client', - 'farm', - 'field', - 'fieldOperationMachines', - 'workNotes', - 'crops', - 'refreshInProgress', - 'fieldOperationWorkNotes', - 'operationLayers' - ] - FieldOperationMachineEmbed: - name: embed - in: query - description: Include additional subelements in response. - schema: - type: array - items: - type: string - enum: ['machine'] - FieldOperationLayerLegendEmbed: - name: embed - in: query - description: Include additional subelements in response. - schema: - type: array - items: - type: string - enum: [ 'image' ] - OperationIds: - name: operationIds - in: query - required: true - description: The identifier(s) for Field Operation(s). Used when there is the potential for more than one Field Operation to be passed. - The identifier(s) will have a different format for HDP vs. IMET Field Operations but, clients should treat this as a generic string and not parse it in any way. + type: "List Of GUID" + example: "[\"d6166574-4ede-404e-8a68-85d4284b869d\"]" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + required: false schema: - type: array - items: - type: string - example: 306d497f-e5e1-4921-8841-3c5f582e3a2e - + type: "string" + example: "520122365ebb4870a344784570d202c7" requestBodies: - FieldOperationLayerImageRequest: - required: true - description: Request body for generating an image for a field operation layer. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/FieldOperationLayerImageRequest' - examples: - RequestImageWithLegend: - summary: Requesting an image using a legend - value: - ranges: - - minimum: 13.15 - maximum: 17.95 - hexColor: '#cc0000' - percent: 0.15 - - minimum: 0.00 - maximum: 13.14 - hexColor: '#cc00aa' - percent: 0.85 - FieldOperationCompareStatisticsRequest: required: true - description: Request to get comparison stats for field operations + description: "Request to get comparison stats for field operations" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldOperationCompareStatisticsRequest' + $ref: "#/components/schemas/FieldOperationCompareStatisticsRequest" examples: YieldByVariety: - summary: Yield by Variety data analysis request - description: This change will also affect statistics for related layers. - The value and unitId are variables. - The change will be applied asynchronously. + summary: "Yield by Variety data analysis request" + description: "This change will also affect statistics for related layers. The value and unitId are variables. The change will be applied asynchronously." value: - - baseLayer: Varieties - compareOperationId: 306d497f-e5e1-4921-8841-3c5f582e3a2e - compareLayer: YieldByMass + - baseLayer: "Varieties" + compareOperationId: "306d497f-e5e1-4921-8841-3c5f582e3a2e" + compareLayer: "YieldByMass" boundary: - type: Polygon + type: "Polygon" coordinates: - - - -10 - -10 @@ -432,2298 +419,2468 @@ components: - 10 - - -10 - -10 - + FieldOperationLayerImageRequest: + required: true + description: "Request body for generating an image for a field operation layer." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FieldOperationLayerImageRequest" + examples: + RequestImageWithLegend: + summary: "Requesting an image using a legend" + value: + ranges: + - minimum: 13.15 + maximum: 17.95 + hexColor: "#cc0000" + percent: 0.15 + - minimum: 0 + maximum: 13.14 + hexColor: "#cc00aa" + percent: 0.85 + FieldOperationWorkNote: + required: true + description: "Payload for the FieldOperationWorkNote to create field operation work note." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + note: + type: "string" + example: "note1" + timestamp: + type: "string" + format: "date-time" + description: "Timestamp of the work note." + example: "2018-08-27T08:08:08.000Z" + gpsLocation: + description: "GPS location where the the work note was taken." + $ref: "#/components/schemas/Point" + FieldOperationWorkNoteUpdate: + required: true + description: "Payload for FieldOperationWorkNote to update field operation work note." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + note: + type: "string" + example: "note1" + SearchFieldOperations: + required: true + description: "Payload for the FieldOperationSearch to retrive field operations for provided organization, field ids and duration." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FieldOperationsSearch" UpdateFieldOperationLayerStatisticsRequest: required: true - description: See the examples for valid manual data edits. - Data edits cannot be combined. - Data edits may have cascading effects on layers and measurements not specified in the request. - For synchronous edits, clients may fetch the Field Operation totals immediately to see the full impact. - For asynchronous edits, clients may poll the Field Operation totals to wait for the specified value to be reflected. - A status API may be added in the future. + description: "See the examples for valid manual data edits. Data edits cannot be combined. Data edits may have cascading effects on layers and measurements not specified in the request. For synchronous edits, clients may fetch the Field Operation totals immediately to see the full impact. For asynchronous edits, clients may poll the Field Operation totals to wait for the specified value to be reflected. A status API may be added in the future." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldOperationLayerStatistics' + $ref: "#/components/schemas/FieldOperationLayerStatistics" examples: YieldByMassEdit: - summary: Post Calibrate Yield Mass - description: This change will also affect statistics for related layers. - The value and unitId are variables. - The change will be applied asynchronously. + summary: "Post Calibrate Yield Mass" + description: "This change will also affect statistics for related layers. The value and unitId are variables. The change will be applied asynchronously." value: - - layerName: YieldByMass + - layerName: "YieldByMass" statistics: totalValue: value: 101.1 - unitId: kg + unitId: "kg" WetMassEdit: - summary: Post Calibrate Wet Mass - description: This change will also affect statistics for related layers. - The value and unitId are variables. - The change will be applied asynchronously. + summary: "Post Calibrate Wet Mass" + description: "This change will also affect statistics for related layers. The value and unitId are variables. The change will be applied asynchronously." value: - - layerName: WetMass + - layerName: "WetMass" statistics: totalValue: value: 9000 - unitId: kg - - layerName: Moisture + unitId: "kg" + - layerName: "Moisture" statistics: averageValue: value: 18 - unitId: prcnt + unitId: "prcnt" AreaWorkedEdit: - summary: Override Area - description: This change will also set the "areaRecorded" value for all layers in the operation. - The value and unitId are variables. - The change will be applied synchronously. + summary: "Override Area" + description: "This change will also set the \"areaRecorded\" value for all layers in the operation. The value and unitId are variables. The change will be applied synchronously." value: - - layerName: AreaWorked + - layerName: "AreaWorked" statistics: totalValue: value: 90 - unitId: ac + unitId: "ac" ResetLayerEdit: - summary: Reset Layer Edit - description: This can be used to reset an edited value back to the original value. - The edited=false indicator must be specified on all layers and measurements that were set in the original edit. - Resets should specify exactly the same layers and values for a single edit above. + summary: "Reset Layer Edit" + description: "This can be used to reset an edited value back to the original value. The edited=false indicator must be specified on all layers and measurements that were set in the original edit. Resets should specify exactly the same layers and values for a single edit above." value: - - layerName: '{{Editable layer name from above examples}}' + - layerName: "{{Editable layer name from above examples}}" statistics: totalValue: edited: false averageValue: edited: false - - UpdateFieldOperationRequest: - required: true - description: Update a field operation. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/UpdateFieldOperation' - UpdateFieldOperationMachinesRequest: required: true - description: Update field operation machines. + description: "Update field operation machines." content: application/vnd.deere.axiom.v3+json: schema: - type: array + type: "array" items: - $ref: '#/components/schemas/UpdateFieldOperationMachine' + $ref: "#/components/schemas/UpdateFieldOperationMachine" examples: CalibrationFactor: - summary: Update machine calibration factors - description: This change will update the calibration factors for multiple machines. + summary: "Update machine calibration factors" + description: "This change will update the calibration factors for multiple machines." value: - - GUID: 98083eaf-2105-4207-8f58-369f50caa277 + - GUID: "98083eaf-2105-4207-8f58-369f50caa277" calibrationFactor: 0.75 - - GUID: 6117580e-0222-4c06-96df-76a53451e69c + - GUID: "6117580e-0222-4c06-96df-76a53451e69c" calibrationFactor: 1.05 - - SearchFieldOperations: - required: true - description: Payload for the FieldOperationSearch to retrive field operations for provided organization, field ids and duration. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/FieldOperationsSearch' - - FieldOperationWorkNote: - required: true - description: Payload for the FieldOperationWorkNote to create field operation work note. - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - properties: - note: - type: string - example: 'note1' - timestamp: - type: string - format: date-time - description: Timestamp of the work note. - example: '2018-08-27T08:08:08.000Z' - gpsLocation: - description: GPS location where the the work note was taken. - $ref: '#/components/schemas/Point' - - FieldOperationWorkNoteUpdate: + UpdateFieldOperationRequest: required: true - description: Payload for FieldOperationWorkNote to update field operation work note. + description: "Update a field operation." content: application/vnd.deere.axiom.v3+json: schema: - type: object - properties: - note: - type: string - example: 'note1' - + $ref: "#/components/schemas/UpdateFieldOperation" responses: + CreatedWorkNote: + description: "Created work note" + headers: + Location: + description: "The uri of the newly created resource" + schema: + type: "string" + format: "uri" CropSeasonSummaries: - description: A collection of field with crop season and FieldOprationType + description: "A collection of field with crop season and FieldOprationType" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array + type: "array" items: - $ref: '#/components/schemas/CropSeasonSummary' - - FieldOperations: - description: A collection of field operations + $ref: "#/components/schemas/CropSeasonSummary" + DoesNotHaveAccessToFieldOperation: + description: "The user has not been provided access to the field operation specified by id." + DoesNotHaveAccessToFieldOperationLayers: + description: "The user has not been provided access to the Field Operation Layers for this organization." + DoesNotHaveAccessToFieldOperationMeasurements: + description: "The user has not been provided access to the Field Operation Measurements for this organization." + DoesNotHaveAccessToFieldOperations: + description: "The user has not been provided access to the field operations for this organization." + FieldOperation: + description: "A field operation object" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/LinkGETFieldOperations' + $ref: "#/components/schemas/LinkGETFieldOperations" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array + type: "array" items: - $ref: '#/components/schemas/FieldOperation' - examples: - No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 520122365ebb4870a344784570d202c7' - value: - links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations - total: 2 - values: - - '@type': FieldOperation - fieldOperationType: Tillage - adaptMachineType: unknown - cropSeason: '2012' - modifiedTime: '2018-05-16T15:04:24.787Z' - startDate: '2012-04-03T14:12:13.000Z' - endDate: '2012-04-06T15:53:37.408Z' - fieldOperationMachines: - - '@type': FieldOperationMachine - erid: 't48a7dd0-as35-44e1-81b4-435d494f7cd5' - machineId: 637795 - operators: - - '@type': 'Operator' - operatorId: 'OPERATOR_ID' - license: 'OPERATOR_LICENSE' - name: 'OPERATOR_NAME' - vin: 'WXYEJKB73894JE3' - id: MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw - links: - - '@type': Link - rel: organization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: field - uri: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw - - '@type': Link - rel: measurementTypes - uri: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes - - '@type': Link - rel: client - uri: https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 - - '@type': Link - rel: farm - uri: https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 - - '@type': Link - rel: workPlans - uri: https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e - - '@type': FieldOperation - fieldOperationType: application - adaptMachineType: unknown - cropSeason: '2013' - modifiedTime: '2014-03-16T15:04:24.797Z' - startDate: '2013-07-03T16:36:08.000Z' - endDate: '2013-07-03T16:47:23.013Z' - products: - '@type': Product - name: Tank Mix - tankMix: true - rate: - '@type': EventMeasurement - value: 12.5 - unitId: gal1ac-1 - carrier: - '@type': Component - name: Water - rate: - '@type': EventMeasurement - value: 12.5 - unitId: gal1ac-1 - components: - - '@type': Component - name: Touchdown Total - rate: - '@type': EventMeasurement - value: 48 - unitId: floz1ac-1 - - '@type': Component - name: FS MaxSupreme - rate: - '@type': EventMeasurement - value: 32 - unitId: floz1ac-1 - id: MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg - links: - - '@type': Link - rel: organization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: field - uri: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg - - '@type': Link - rel: measurementTypes - uri: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg/measurementTypes - - '@type': Link - rel: client - uri: https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 - - '@type': Link - rel: farm - uri: https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 - - '@type': Link - rel: shapeFile - uri: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg - - '@type': Link - rel: shapeFileAsync - uri: https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg - - '@type': Link - rel: workPlans - uri: https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e - FieldOperation: - description: A field operation object + $ref: "#/components/schemas/FieldOperation" + FieldOperationDataAnalysisStatistics: + description: "Field Operation Statistics broken down according to the legend for another context." content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/LinkGETFieldOperations' + $ref: "#/components/schemas/Link" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array + type: "array" items: - $ref: '#/components/schemas/FieldOperation' - - FieldOperationId: - description: A field operation object - content: - application/vnd.deere.axiom.v3+json: - schema: - type: object - properties: + $ref: "#/components/schemas/MapRangeWithLayerStatistics" + examples: + YieldByVariety: + summary: "Yield by Variety statistics" + value: + links: + - rel: "self" + uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + total: 1 + values: + - "@type": "MapRangeWithLayerStatistics" + label: "Variety 1" + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 156.13 + unitId: "bu1ac-1" + - "@type": "MapRangeWithLayerStatistics" + label: "Variety 2" + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 184.17 + unitId: "bu1ac-1" + YieldBySeedingRate: + summary: "Yield by Seeding Rate statistics" + value: + links: + - rel: "self" + uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + total: 1 + values: + - "@type": "MapRangeWithLayerStatistics" + minimum: 13.15 + maximum: 17.95 + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 156.13 + unitId: "bu1ac-1" + - "@type": "MapRangeWithLayerStatistics" + minimum: 17.95 + maximum: 20.05 + statistics: + "@type": "LayerStatistics" + averageValue: + "@type": "EventMeasurement" + value: 184.17 + unitId: "bu1ac-1" + FieldOperationId: + description: "A field operation object" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/LinkGETFieldOperationsId' + $ref: "#/components/schemas/LinkGETFieldOperationsId" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array + type: "array" items: - $ref: '#/components/schemas/FieldOperationId' + $ref: "#/components/schemas/FieldOperationId" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: - '@type': FieldOperation - fieldOperationType: tillage - adaptMachineType: unknown - cropSeason: '2012' - modifiedTime: '2018-05-16T15:04:24.787Z' + "@type": "FieldOperation" + fieldOperationType: "tillage" + adaptMachineType: "unknown" + cropSeason: "2012" + modifiedTime: "2018-05-16T15:04:24.787Z" fieldOperationMachines: - - '@type': FieldOperationMachine - 'GUID': 't48a7dd0-as35-44e1-81b4-435d494f7cd5' - 'erid': 't48a7dd0-as35-44e1-81b4-435d494f7cd5' - 'machineId': 637795 - 'operators': - - '@type': 'Operator' - 'operatorId': 'OPERATOR_ID' - 'license': 'OPERATOR_LICENSE' - 'name': 'OPERATOR_NAME' - 'vin': 'WXYEJKB73894JE3' - id: MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw + - "@type": "FieldOperationMachine" + GUID: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + erid: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + machineId: 637795 + operators: + - "@type": "Operator" + operatorId: "OPERATOR_ID" + license: "OPERATOR_LICENSE" + name: "OPERATOR_NAME" + vin: "WXYEJKB73894JE3" + id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" links: - - '@type': Link - rel: organization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw - - '@type': Link - rel: measurementTypes - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes - - '@type': Link - rel: tillageDepthTarget - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillageDepthTarget - - '@type': Link - rel: tillageDepthResult - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillageDepthResult - - '@type': Link - rel: tillagePressureTarget - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureTarget - - '@type': Link - rel: tillagePressureResult - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult - - '@type': Link - rel: tillageSpeedResult - uri: >- - https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillageSpeedResult - - '@type': Link - rel: client - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 - - '@type': Link - rel: farm - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 - - '@type': Link - rel: workPlans - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e - - FieldOperationMachines: - description: A collection of field operation machines + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" + - "@type": "Link" + rel: "measurementTypes" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + - "@type": "Link" + rel: "tillageDepthTarget" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "tillageDepthResult" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillageDepthResult" + - "@type": "Link" + rel: "tillagePressureTarget" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureTarget" + - "@type": "Link" + rel: "tillagePressureResult" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" + - "@type": "Link" + rel: "tillageSpeedResult" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillageSpeedResult" + - "@type": "Link" + rel: "client" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + - "@type": "Link" + rel: "farm" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + - "@type": "Link" + rel: "workPlans" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + FieldOperationLayerImage: + description: "An Object of Field Operation layer image" + headers: + x-minimum-longitude: + description: "The minimum longitude represented in the image" + schema: + type: "number" + format: "double" + example: -96.776622 + x-minimum-latitude: + description: "The minimum latitude represented in the image" + schema: + type: "number" + format: "double" + example: 40.282002 + x-maximum-longitude: + description: "The maximum longitude represented in the image" + schema: + type: "number" + format: "double" + example: -90.047496 + x-maximum-latitude: + description: "The maximum latitude represented in the image" + schema: + type: "number" + format: "double" + example: 43.542938 + content: + image/png: + x-zally-ignore: + - "D005" + - "D012" + schema: + type: "string" + format: "binary" + FieldOperationLayerLegend: + description: "An Object of Field Operation layer legend" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + id: + $ref: "#/components/schemas/FieldOperationLayersEnum" + unitId: + type: "string" + description: "The unit associated to the quantity measured" + example: "gal1ac-1." + variableRepresentation: + type: "string" + example: "vrSolutionRateLiquid" + ranges: + type: "array" + items: + $ref: "#/components/schemas/MapRange" + image: + description: "embedable base64 encoded PNG image" + type: "object" + properties: + data: + type: "string" + example: "data:image/png;base64,{base64EncodedContent}" + extent: + $ref: "#/components/schemas/MapExtent" + examples: + HarvestYield: + summary: "Harvest yield map image and legends" + value: + id: "YieldByVolume" + unitId: "bu1ac-1" + variableRepresentation: "vrYieldVolumePerArea" + legends: + - "@type": "MapLegendItem" + hexColor: "#cc0000" + percent: 0.15 + minimum: 13.15 + maximum: 17.95 + - "@type": "MapLegendItem" + hexColor: "#cc0011" + percent: 0.15 + minimum: 11.15 + maximum: 19.95 + image: + data: "data:image/png;base64,{base64EncodedContent}" + extent: + minimumLatitude: 41.66470503009207 + maximumLatitude: 41.67086022030498 + minimumLongitude: -93.15582275390625 + maximumLongitude: -93.1475830078125 + FieldOperationLayerStatistics: + description: "An Object of Field Operation Statistics" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array - items: - $ref: '#/components/schemas/FieldOperationMachine' - - FieldOperationWorkNotes: - description: A collection of field operation work notes + $ref: "#/components/schemas/FieldOperationLayerStatistics" + FieldOperationLayers: + description: "An Object of Field Operation Layers" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" total: - description: Number of results in the list - type: integer - format: int64 - example: 10 + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 values: - type: array - items: - $ref: '#/components/schemas/FieldOperationWorkNote' - - FieldOperationWorkNote: - description: A field operation work note object - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/FieldOperationWorkNote' - - FieldOperationMeasurements: - description: A collection of Field Operation Measurements + $ref: "#/components/schemas/FieldOperationLayers" + examples: + HarvestOperation: + summary: "Harvest OperationLayers" + value: + links: + - rel: "self" + uri: "https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" + total: 2 + values: + - "@type": "FieldOperationLayer" + id: "YieldByVolume" + links: + - rel: "LayerImage" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/image" + - rel: "LayerLegend" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/legend" + - "@type": "FieldOperationLayer" + id: "Speed" + links: + - rel: "LayerImage" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/image" + - rel: "LayerLegend" + uri: "https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/legend" + FieldOperationMachines: + description: "A collection of field operation machines" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array + type: "array" items: - $ref: '#/components/schemas/FieldOperationMeasurement' - + $ref: "#/components/schemas/FieldOperationMachine" + FieldOperationMeasurement: + description: "An object of Field Operation Measurements or image" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 FieldOperationMeasurementOrImage: - description: An object of Field Operation Measurements or image + description: "An object of Field Operation Measurements or image" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldOperationMeasurement' + $ref: "#/components/schemas/FieldOperationMeasurement" application/vnd.deere.axiom.v3.image+json: schema: - $ref: '#/components/schemas/FieldOperationPNGImage' + $ref: "#/components/schemas/FieldOperationPNGImage" application/vnd.deere.axiom.v3.location+tif+json: schema: - $ref: '#/components/schemas/FieldOperationGeoTIFFLocation' - - FieldOperationLayerStatistics: - description: An Object of Field Operation Statistics + $ref: "#/components/schemas/FieldOperationGeoTIFFLocation" + FieldOperationMeasurementOrImage_MeasurementType: + description: "An object of Field Operation Measurements or image" content: application/vnd.deere.axiom.v3+json: + note: 123 + summary: "Field Operation Measurement" + description: "Field Operations" schema: - type: object + summary: "Field Operation Measurement" + description: "Field Operations" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/LinksGet" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - $ref: '#/components/schemas/FieldOperationLayerStatistics' - - FieldOperationDataAnalysisStatistics: - description: Field Operation Statistics broken down according to the legend for another context. - content: - application/vnd.deere.axiom.v3+json: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationMeasurementType" + application/vnd.deere.axiom.v3.image+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/LinksGet" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - type: array + type: "array" items: - $ref: '#/components/schemas/MapRangeWithLayerStatistics' + $ref: "#/components/schemas/FieldOperationMeasurement_MeasurementType" examples: - YieldByVariety: - summary: Yield by Variety statistics + application/vnd.deere.axiom.v3+json: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: + "@type": "FieldOperationMeasurement" + measurementName: "TillageDepthTarget" + measurementCategory: "Target" + area: + "@type": "EventMeasurement" + value: 0.72 + unitId: "ha" + averageDepth: + "@type": "EventMeasurement" + value: 15.24 + unitId: "cm" links: - - rel: self - uri: https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5 - total: 1 - values: - - '@type': MapRangeWithLayerStatistics - label: Variety 1 - statistics: - '@type': LayerStatistics - averageValue: - '@type': EventMeasurement - value: 156.13 - unitId: bu1ac-1 - - '@type': MapRangeWithLayerStatistics - label: Variety 2 - statistics: - '@type': LayerStatistics - averageValue: - '@type': EventMeasurement - value: 184.17 - unitId: bu1ac-1 - YieldBySeedingRate: - summary: Yield by Seeding Rate statistics + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "mapImage" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + application/vnd.deere.axiom.v3.image+json: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3.image+json" value: - links: - - rel: self - uri: https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5 - total: 1 - values: - - '@type': MapRangeWithLayerStatistics - minimum: 13.15 - maximum: 17.95 - statistics: - '@type': LayerStatistics - averageValue: - '@type': EventMeasurement - value: 156.13 - unitId: bu1ac-1 - - '@type': MapRangeWithLayerStatistics - minimum: 17.95 - maximum: 20.05 - statistics: - '@type': LayerStatistics - averageValue: - '@type': EventMeasurement - value: 184.17 - unitId: bu1ac-1 - - FieldOperationLayers: - description: An Object of Field Operation Layers + name: "fieldOperationMapImage" + declaredType: "com.deere.api.axiom.generated.v3.FieldOperationMapImage" + scope: "javax.xml.bind.JAXBElement$GlobalScope" + value: + image: "data:image/png;base64..." + legend: + "@type": "MapLegend" + unitId: "cm" + ranges: + - "@type": "MapLegendItem" + label: "15" + hexColor: "#4B0082" + percent: 1 + extent: + "@type": "MapExtent" + minimumLatitude: 41.66625903184001 + maximumLatitude: 41.669542228078 + minimumLongitude: -93.15431597923825 + maximumLongitude: -93.15009035584056 + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + - "@type": "Link" + rel: "measurementType" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + nil: false + globalScope: true + typeSubstituted: false + FieldOperationMeasurements: + description: "A collection of Field Operation Measurements" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 values: - $ref: '#/components/schemas/FieldOperationLayers' - examples: - HarvestOperation: - summary: Harvest OperationLayers - value: - links: - - rel: self - uri: https://api.deere.com/platform/self/e48a7dd0-9af2-44e1-81b4-435d494f7cd5 - total: 2 - values: - - '@type': FieldOperationLayer - id: YieldByVolume - links: - - rel: LayerImage - uri: https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/image - - rel: LayerLegend - uri: https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/YieldByVolume/legend - - '@type': FieldOperationLayer - id: Speed - links: - - rel: LayerImage - uri: https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/image - - rel: LayerLegend - uri: https://api.deere.com/platform/fieldOperations/e48a7dd0-9af2-44e1-81b4-435d494f7cd5/operationLayers/Speed/legend - - FieldOperationLayerLegend: - description: An Object of Field Operation layer legend + type: "array" + items: + $ref: "#/components/schemas/FieldOperationMeasurement" + FieldOperationMeasurements_MeasurementType: + description: "A collection of Field Operation Measurements" content: - application/vnd.deere.axiom.v3+json: + application/vnd.deere.axiom.v3.image+json: schema: - type: object + type: "object" properties: - id: - $ref: '#/components/schemas/FieldOperationLayersEnum' - unitId: - type: string - description: The unit associated to the quantity measured - example: gal1ac-1. - variableRepresentation: - type: string - example: vrSolutionRateLiquid - ranges: - type: array + links: + type: "array" items: - $ref: '#/components/schemas/MapRange' - image: - description: embedable base64 encoded PNG image - type: object - properties: - data: - type: string - example: 'data:image/png;base64,{base64EncodedContent}' - extent: - $ref: '#/components/schemas/MapExtent' + $ref: "#/components/schemas/LinksGet" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationMeasurement_MeasurementType" examples: - HarvestYield: - summary: Harvest yield map image and legends + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: - id: YieldByVolume - unitId: bu1ac-1 - variableRepresentation: vrYieldVolumePerArea - legends: - - '@type': MapLegendItem - hexColor: "#cc0000" - percent: 0.15 - minimum: 13.15 - maximum: 17.95 - - '@type': MapLegendItem - hexColor: "#cc0011" - percent: 0.15 - minimum: 11.15 - maximum: 19.95 - image: - data: 'data:image/png;base64,{base64EncodedContent}' + name: "fieldOperationMapImage" + declaredType: "com.deere.api.axiom.generated.v3.FieldOperationMapImage" + scope: "javax.xml.bind.JAXBElement$GlobalScope" + value: + image: "data:image/png;base64..." + legend: + "@type": "MapLegend" + unitId: "cm" + ranges: + - "@type": "MapLegendItem" + label: "15" + hexColor: "#4B0082" + percent: 1 extent: - minimumLatitude: 41.66470503009207 - maximumLatitude: 41.67086022030498 - minimumLongitude: -93.15582275390625 - maximumLongitude: -93.1475830078125 - - FieldOperationLayerImage: - description: An Object of Field Operation layer image - headers: - x-minimum-longitude: - description: The minimum longitude represented in the image - schema: - type: number - format: double - example: -96.776622 - x-minimum-latitude: - description: The minimum latitude represented in the image - schema: - type: number - format: double - example: 40.282002 - x-maximum-longitude: - description: The maximum longitude represented in the image - schema: - type: number - format: double - example: -90.047496 - x-maximum-latitude: - description: The maximum latitude represented in the image - schema: - type: number - format: double - example: 43.542938 + "@type": "MapExtent" + minimumLatitude: 41.66625903184001 + maximumLatitude: 41.669542228078 + minimumLongitude: -93.15431597923825 + maximumLongitude: -93.15009035584056 + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + - "@type": "Link" + rel: "measurementType" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + nil: false + globalScope: true + typeSubstituted: false + FieldOperationWorkNote: + description: "A field operation work note object" content: - image/png: - x-zally-ignore: [D005, D012] + application/vnd.deere.axiom.v3+json: schema: - type: string - format: binary - - RequestHasBeenAccepted: - description: Accepted + $ref: "#/components/schemas/FieldOperationWorkNote" + FieldOperationWorkNotes: + description: "A collection of field operation work notes" content: application/vnd.deere.axiom.v3+json: schema: - type: object - - UpdatedResponse: - description: Updated successfully - - RequestHasNotBeenAccepted: - description: Not Acceptable. Expected in case of TILLAGE operation. - - RedirectToPreSignedURL: - description: Temporary Redirect. The location will be a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to that URL. Do not include an Authorization header in this request, as the authorization is provided via the pre-signed nature of the URL. - - DoesNotHaveAccessToFieldOperations: - description: The user has not been provided access to the field operations for this organization. - - DoesNotHaveAccessToFieldOperation: - description: The user has not been provided access to the field operation specified by id. - - DoesNotHaveAccessToFieldOperationMeasurements: - description: The user has not been provided access to the Field Operation Measurements for this organization. - - DoesNotHaveAccessToFieldOperationLayers: - description: The user has not been provided access to the Field Operation Layers for this organization. - - InputOrgValueIsInvalid: - description: The specified organization does not exist. - - InputFieldOperationValueIsInvalid: - description: The specified field operation does not exist. - - RequestedOperationNotSupported: - description: The layer you are trying to edit cannot be edited. + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 10 + values: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationWorkNote" + FieldOperations: + description: "A collection of field operations" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Errors' - - InputOrganizationOrFieldOperationIsInvalid: - description: The specified organization or field operation does not exist. - - InputOrganizationOrMeasurementTypeIsInvalid: - description: The specified organization or measurement Type does not exist. - - InputOrganizationOrFieldOperationOrLayerIsInvalid: - description: The specified organization, field operation, or layer does not exist. - - InputOrganizationOrFieldOperationOrMeasurementIsInvalid: - description: The specified organization, field operation, or measurement name does not exist. - - RequestedResourceNotFound: - description: The requested resource was not found. - - CreatedWorkNote: - description: 'Created work note' - headers: - Location: - description: 'The uri of the newly created resource' - schema: - type: string - format: 'uri' - + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/LinkGETFieldOperations" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + type: "array" + items: + $ref: "#/components/schemas/FieldOperation" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 520122365ebb4870a344784570d202c7" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" + total: 2 + values: + - "@type": "FieldOperation" + fieldOperationType: "Tillage" + adaptMachineType: "unknown" + cropSeason: "2012" + modifiedTime: "2018-05-16T15:04:24.787Z" + startDate: "2012-04-03T14:12:13.000Z" + endDate: "2012-04-06T15:53:37.408Z" + fieldOperationMachines: + - "@type": "FieldOperationMachine" + erid: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + machineId: 637795 + operators: + - "@type": "Operator" + operatorId: "OPERATOR_ID" + license: "OPERATOR_LICENSE" + name: "OPERATOR_NAME" + vin: "WXYEJKB73894JE3" + id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" + links: + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw" + - "@type": "Link" + rel: "measurementTypes" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + - "@type": "Link" + rel: "client" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + - "@type": "Link" + rel: "farm" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + - "@type": "Link" + rel: "workPlans" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + - "@type": "FieldOperation" + fieldOperationType: "application" + adaptMachineType: "unknown" + cropSeason: "2013" + modifiedTime: "2014-03-16T15:04:24.797Z" + startDate: "2013-07-03T16:36:08.000Z" + endDate: "2013-07-03T16:47:23.013Z" + products: + "@type": "Product" + name: "Tank Mix" + tankMix: true + rate: + "@type": "EventMeasurement" + value: 12.5 + unitId: "gal1ac-1" + carrier: + "@type": "Component" + name: "Water" + rate: + "@type": "EventMeasurement" + value: 12.5 + unitId: "gal1ac-1" + components: + - "@type": "Component" + name: "Touchdown Total" + rate: + "@type": "EventMeasurement" + value: 48 + unitId: "floz1ac-1" + - "@type": "Component" + name: "FS MaxSupreme" + rate: + "@type": "EventMeasurement" + value: 32 + unitId: "floz1ac-1" + id: "MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + links: + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + - "@type": "Link" + rel: "measurementTypes" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg/measurementTypes" + - "@type": "Link" + rel: "client" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + - "@type": "Link" + rel: "farm" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + - "@type": "Link" + rel: "shapeFile" + uri: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + - "@type": "Link" + rel: "shapeFileAsync" + uri: "https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + - "@type": "Link" + rel: "workPlans" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + InputFieldOperationValueIsInvalid: + description: "The specified field operation does not exist." + InputOrgValueIsInvalid: + description: "The specified organization does not exist." + InputOrganizationOrFieldOperationIsInvalid: + description: "The specified organization or field operation does not exist." + InputOrganizationOrFieldOperationOrLayerIsInvalid: + description: "The specified organization, field operation, or layer does not exist." + InputOrganizationOrFieldOperationOrMeasurementIsInvalid: + description: "The specified organization, field operation, or measurement name does not exist." + InputOrganizationOrMeasurementTypeIsInvalid: + description: "The specified organization or measurement Type does not exist." + RedirectToPreSignedURL: + description: "Temporary Redirect. The location will be a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to that URL. Do not include an Authorization header in this request, as the authorization is provided via the pre-signed nature of the URL." + RequestHasBeenAccepted: + description: "Accepted" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + RequestHasNotBeenAccepted: + description: "Not Acceptable. Expected in case of TILLAGE operation." + RequestedOperationNotSupported: + description: "The layer you are trying to edit cannot be edited." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + RequestedResourceNotFound: + description: "The requested resource was not found." + UpdatedResponse: + description: "Updated successfully" schemas: - Operators: - type: object - description: Operators that performed work using this machine + AgencyRegistrationNumber: + type: "string" + description: "The product identifier managed by regulatory agency. e.g. EPA registration number of product issued by the US Environmental Protection Agency\n" + example: "0084229-00011-AA-0000000" + Client: + type: "object" + description: "The client associated with this FieldOperation. Populated only when the associated embed is requested." properties: - operatorId: - type: string - description: Unique identifier for this operator - example: 657b4391-79b3-4012-a617-7ceba7111ad0 + id: + type: "string" + description: "Globally unique identifier for this client." + example: "66dd9c64-71d7-4904-86f8-e04d40ccf59d" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" name: - type: string - description: Name of the operator - example: John Doe - license: - type: string - description: Operator license number - example: ABC123 - - FieldOperationMachines: - type: object - description: Machines utilized during this operation + type: "string" + description: "The name of the client." + example: "My Custom Client Name" + archived: + type: "boolean" + example: false + Component: + type: "object" + description: "An individual product combined with others in a tank mix." properties: - erid: - type: string - example: t48a7dd0-as35-44e1-81b4-435d494f7cd5 - description: Doc File based Field Operation Machine erid. - Operators: - $ref: '#/components/schemas/Operators' - machineId: - type: integer - description: PrincipalId of the machine - format: int64 - example: 637795 - nullable: true - vin: - type: string - description: VIN of the machine - example: WXYEJKB73894JE3 - - LinkGETFieldOperations: + "@type": + type: "string" + example: "Component" + guid: + type: "string" + description: "Display recorded Component GUID." + example: "fa14f029-831c-456b-a76e-2d3c26207c19" + name: + type: "string" + description: "The general name of the product." + example: "Water" + agencyRegistrationNumber: + $ref: "#/components/schemas/AgencyRegistrationNumber" + rate: + $ref: "#/components/schemas/EventMeasurement" + ConnectMobileEnum: + type: "string" + description: "The type of display" + enum: + - "OneAppMobile" + CropSeason: + type: "integer" + description: "Filter results by crop season." + example: 2016 + CropSeasonSummary: + type: "object" properties: - organization: - example: https://sandboxapi.deere.com/platform/organizations/123456 - description: Organizations Link. - field: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - description: Fields Link. - measurementTypes: - example: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes - description: Field Operation Measurements Link. - measurement: - example: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult - description: zero or more field operation measurements links. These will vary by the type of operation - client: - example: https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 - description: Clients Link. - farm: - example: https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 - description: Farms Link. - shapeFileAsync: - example: https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg - description: Asynchronous Shapefiles Link. - workPlans: - example: https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e - description: Link to work plan associated to the operation. + links: + type: "array" + items: + $ref: "#/components/schemas/FieldLink" + fieldOperationType: + $ref: "#/components/schemas/FieldOperationTypesEnum" + cropSeasons: + $ref: "#/components/schemas/CropSeasons" + CropSeasons: + type: "array" + description: "The crop seasons (year) of the recent operation" + example: + - "2016" + - "2015" + items: + $ref: "#/components/schemas/CropSeason" + CropToken: + type: "string" + description: "- A unique textual identifier for a type of Crop - LinkGETFieldOperationsId: - properties: - organization: - example: https://sandboxapi.deere.com/platform/organizations/123456 - description: Organizations Link. - field: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - description: Fields Link. - measurementTypes: - example: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes - description: Field Operation Measurements Link. - measurement: - example: https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult - description: zero or more field operation measurements links. These will vary by the type of operation - client: - example: https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 - description: Clients Link. - farm: - example: https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 - description: Farms Link. + - EnumList is based on ISG_Shared/blob/master/crops/crops.xml - Link: - type: string + - You may use com.deere.ads.utility.CropTokenLookup in platform to retrieve crop ids.\n" + example: "ALFALFA" + DisplayTypeEnum: + x-zally-ignore: + - "D012" + allOf: + - $ref: "#/components/schemas/JohnDeereDisplayTypeEnum" + - $ref: "#/components/schemas/ConnectMobileEnum" + - $ref: "#/components/schemas/ThirdPartyDisplayTypeEnum" + EridToEridEdit: + type: "object" + description: "Describes an edit that should change the id of any object that matches the fromGuid" properties: - uri: - - - - FieldLink: - type: object - description: A link provides a URI to access resources that are related to the response. + fromGuid: + $ref: "#/components/schemas/ProductErid" + toGuid: + $ref: "#/components/schemas/ProductErid" + Error: + type: "object" properties: - rel: - type: string - description: The relation of the object to the linked resource. - example: field - uri: - type: string - format: uri - description: The URI to the related resource. - example: https://sandboxapi.deere.com/platform/organizations/1234/fields/e48a7dd0-9af2-44e1-81b4-435d494f7cd5 - - FieldOperationTypesEnum: - type: string - description: The type of operation - example: HARVEST - - Client: - type: object - description: The client associated with this FieldOperation. Populated only when the associated embed is requested. + guid: + type: "string" + format: "guid" + example: "11111111-2222-3333-4444-555555555555" + message: + type: "string" + description: "An english description of the error" + example: " was invalid because " + code: + type: "string" + description: "A string constant representing the type of error" + example: 400 + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "example-field" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: "Bad value" + Errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + EventMeasurement: + type: "object" + description: "A general representation of quantity and unit." + example: + "@type": "EventMeasurement" + value: 17.13 + unitId: "gal1ac-1" properties: - id: - type: string - description: Globally unique identifier for this client. - example: 66dd9c64-71d7-4904-86f8-e04d40ccf59d - links: - type: array - items: - $ref: '#/components/schemas/Link' - name: - type: string - description: The name of the client. - example: My Custom Client Name - archived: - type: boolean + "@type": + type: "string" + example: "EventMeasurement" + value: + type: "number" + format: "double" + description: "The quantity represented by this measurement." + unitId: + type: "string" + description: "The unit associated to the quantity measured" + example: "gal1ac-1." + variableRepresentation: + type: "string" + example: "vrSolutionRateLiquid" + edited: + type: "boolean" + description: "Indicates whether a manual data edit was directly applied to this value. If a data edit for a different layer affected this value, it *will not be set*. May not be serialized if false." example: false - + EventMeasurementStats: + type: "object" + description: "Relevant stats for a measurement recorded during the operation." + properties: + "@type": + type: "string" + example: "EventMeasurementStats" + areaRecorded: + $ref: "#/components/schemas/EventMeasurement" + averageValue: + $ref: "#/components/schemas/EventMeasurement" + totalValue: + $ref: "#/components/schemas/EventMeasurement" + minValue: + $ref: "#/components/schemas/EventMeasurement" + maxValue: + $ref: "#/components/schemas/EventMeasurement" + firstValue: + $ref: "#/components/schemas/EventMeasurement" + lastValue: + $ref: "#/components/schemas/EventMeasurement" + EventObservation: + type: "object" + description: "A general representation of an observed value." + properties: + "@type": + type: "string" + example: "EventObservation" + value: + type: "string" + description: "The observed value, e.g. NW wind direction." + example: "NW" + EventObservationStats: + type: "object" + description: "Relevant stats for the values for an observation during the operation." + properties: + areaRecorded: + $ref: "#/components/schemas/EventMeasurement" + firstObservation: + $ref: "#/components/schemas/EventObservation" + lastObservation: + $ref: "#/components/schemas/EventObservation" + predominantObservation: + $ref: "#/components/schemas/EventObservation" Farm: - type: object - description: The farm associated with this FieldOperation. Populated only when the associated embed is requested. + type: "object" + description: "The farm associated with this FieldOperation. Populated only when the associated embed is requested." properties: id: - type: string - description: Globally unique identifier for this farm. - example: 4b781329-2f8c-4a68-98ce-8d5213fc8588 + type: "string" + description: "Globally unique identifier for this farm." + example: "4b781329-2f8c-4a68-98ce-8d5213fc8588" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" name: - type: string - description: The name of the farm. - example: My Custom Farm Name + type: "string" + description: "The name of the farm." + example: "My Custom Farm Name" archived: - type: boolean + type: "boolean" example: false - Field: - type: object - description: The field associated with this FieldOperation. Populated only when the associated embed is requested. + type: "object" + description: "The field associated with this FieldOperation. Populated only when the associated embed is requested." properties: id: - type: string - description: Globally unique identifier for this field. - example: 5ef3b56c-c01d-4ce5-b630-bd1850e39c29 + type: "string" + description: "Globally unique identifier for this field." + example: "5ef3b56c-c01d-4ce5-b630-bd1850e39c29" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/Link" name: - type: string - description: The name of the field. - example: My Custom Field Name + type: "string" + description: "The name of the field." + example: "My Custom Field Name" archived: - type: boolean + type: "boolean" example: false lastModifiedTime: - type: string - format: date-time - example: '2020-09-21T15:41:15.205Z' - - OrgId: - type: integer - description: The organization owning the fields and associated operations - format: int64 - example: 123456 - - TankMixProduct: - type: object - properties: - guid: - $ref: '#/components/schemas/ProductErid' - tankMix: - type: boolean - description: Flag indicating whether the product is a tank mix (true) or a single component (false). - example: true - rate: - $ref: '#/components/schemas/EventMeasurement' - carrier: - $ref: '#/components/schemas/Component' - components: - type: array - items: - $ref: '#/components/schemas/Component' - - NonTankMixProduct: - type: object - properties: - '@type': - type: string - example: Product - guid: - $ref: '#/components/schemas/ProductErid' - productType: - $ref: '#/components/schemas/FieldOperationProductTypesEnum' - name: - type: string - description: | - The general name of the product, or 'Tank Mix' for a product consisting of multiple components in a carrier, - for APPLICATION operations. - example: Priaxor - brand: - type: string - description: The brand name of product. - example: BrandForProducts - agencyRegistrationNumber: - $ref: '#/components/schemas/AgencyRegistrationNumber' - tankMix: - type: boolean - description: Flag indicating whether the product is a tank mix (true) or a single component (false). - example: false - - Component: - type: object - description: An individual product combined with others in a tank mix. - properties: - '@type': - type: string - example: Component - guid: - type: string - description: Display recorded Component GUID. - example: fa14f029-831c-456b-a76e-2d3c26207c19 - name: - type: string - description: The general name of the product. - example: Water - agencyRegistrationNumber: - $ref: '#/components/schemas/AgencyRegistrationNumber' - rate: - $ref: '#/components/schemas/EventMeasurement' - - AgencyRegistrationNumber: - type: string - description: | - The product identifier managed by regulatory agency. e.g. EPA registration number of product issued by the US Environmental Protection Agency - example: 0084229-00011-AA-0000000 - - JohnDeereDisplayTypeEnum: - type: string - description: The type of display - enum: - - GS4_4600 - - GS3_2630 - - GS2_2600 - - GS2_1800 - - GS2_CommandCenter - - ConnectMobileEnum: - type: string - description: The type of display - enum: - - OneAppMobile - - ThirdPartyDisplayTypeEnum: - type: string - description: The type of display - enum: - - IntegraVersa - - ProtobufV36 - - ProtobufV41 - - TrimbleFMX - - Unknown - - DisplayTypeEnum: - x-zally-ignore: [D012] - allOf: - - $ref: '#/components/schemas/JohnDeereDisplayTypeEnum' - - $ref: '#/components/schemas/ConnectMobileEnum' - - $ref: '#/components/schemas/ThirdPartyDisplayTypeEnum' - - CropToken: - type: string - description: | - - A unique textual identifier for a type of Crop - - EnumList is based on ISG_Shared/blob/master/crops/crops.xml - - You may use com.deere.ads.utility.CropTokenLookup in platform to retrieve crop ids. - example: ALFALFA - - CropSeason: - type: integer - description: Filter results by crop season. - example: 2016 - - CropSeasons: - type: array - description: The crop seasons (year) of the recent operation - example: ['2016', '2015'] - items: - $ref: '#/components/schemas/CropSeason' - - CropSeasonSummary: - type: object + type: "string" + format: "date-time" + example: "2020-09-21T15:41:15.205Z" + FieldLink: + type: "object" + description: "A link provides a URI to access resources that are related to the response." properties: - links: - type: array - items: - $ref: '#/components/schemas/FieldLink' - fieldOperationType: - $ref: '#/components/schemas/FieldOperationTypesEnum' - cropSeasons: - $ref: '#/components/schemas/CropSeasons' - - FieldOperationProductTypesEnum: - type: string - description: FieldOperation Product Types TODO Enum - enum: - - OTHER - - CHEMICAL - - SEED - - FEED - - FERTILIZER - - FieldOperationMeasurementTypesEnum: - allOf: - - type: string - description: FieldOperation Measurement Types - - $ref: '#/components/schemas/FieldOperationMeasurementTypesInFullRelease' - - $ref: '#/components/schemas/FieldOperationMeasurementTypesInAgreportsApi' - - FieldOperationMeasurementTypesInFullRelease: - type: string - description: FieldOperation Measurement Types supported in the HDP versions of the endpoints and therefore fully released. - enum: - - SeedingRateTarget - - SeedingRateResult - - SeedingSpeedResult - - SeedingVarietiesTarget - - SeedingVarietiesResult - - ApplicationRateTarget - - ApplicationRateResult - - ApplicationSpeedResult - - HarvestYieldResult - - HarvestYieldContourResult - - HarvestSpecialtyGrossYieldResult - - HarvestWetMassResult - - HarvestMoistureResult - - HarvestTrashResult - - HarvestSpeedResult - - HarvestAdfResult - - HarvestNdfResult - - HarvestCrudeProteinResult - - HarvestStarchResult - - HarvestSugarResult - - TillageDepthResult - - TillagePressureResult - - TillageSpeedResult - - TillageDepthTarget - - TillagePressureTarget - - FieldOperationMeasurementTypesInAgreportsApi: - type: string - description: - FieldOperation Measurement Types supported in the Agreports/DataLake versions of the endpoints. - These are released to some clients but, *will never* be released to all clients. - Similar data will be available from layer and statistics endpoints. - enum: - - ElevationResult - - ApplicationHeightTarget - - FuelRateResult - - WindSpeed - - AirTemperature - - TemperatureDifference - - RelativeHumidity - - SoilTemperature - - RatePrescription - - PressurePrescription - - DepthPrescription - - SeedDepthTarget - - SprayPressure - - InoculantDosing - - LengthOfCut - - GaugeWheelMargin - - DownforceResult - - RideQuality - - SeedSpacingVariation - - GroundContact - - Singulation - - SkyCondition - - SoilMoisture - - TargetQuality - - PrescriptionQuality - - FieldOperationMeasurementCategoryEnum: - type: string - description: FieldOperation Measurement Category - enum: - - Target - - Result - - Prescription - - FieldOperationLayersEnum: - allOf: - - type: string - description: - Possible layerNames used in FieldOperation Layers and statistics. - These are not 1-1 with FieldOperationMeasurementTypesEnum and are designed to be easier to understand. - - $ref: '#/components/schemas/FieldOperationMeasurementLayersEnum' - - $ref: '#/components/schemas/FieldOperationIndexLayersEnum' - - $ref: '#/components/schemas/FieldOperationCompositeLayersEnum' - - FieldOperationMeasurementLayersEnum: - type: string - description: - Layers based on variable rate measurements recorded during the field operation. - They will use EventMeasurementStats for statistics. - enum: - - AreaWorked - - Speed - - Elevation - - FuelRate - - FuelConsumption - - DieselExhaustFluid - - EngineHours - - YieldByVolume - - YieldByMass - - WetMass - - Moisture - - Trash - - AcidDetergentFiber - - NeutralDetergentFiber - - CrudeProtein - - Starch - - Sugar - - RateResult - - RateTarget - - RatePrescription - - InoculantDosing - - LengthOfCut - - GaugeWheelMargin - - DownforceResult - - GroundContact - - RideQuality - - SeedSpacingVariation - - Singulation - - ApplicationHeight - - SprayPressure - - PressureTarget - - PressureResult - - PressurePrescription - - DepthResult - - DepthTarget - - DepthPrescription - - WindSpeed - - AirTemperature - - TemperatureDifference - - RelativeHumidity - - SoilTemperature - - FieldOperationIndexLayersEnum: - type: string - description: - Layers based on defined types recorded or entered during the field operation. - They will use EventObservationStats for statistics. - enum: - - RateResultByProduct - - RateTargetByProduct - - WindDirection - - SkyCondition - - SoilMoisture - - Varieties - - FieldOperationCompositeLayersEnum: - type: string - description: Layers based on defined comparisons of other layers - enum: - - QualityTarget - - QualityPrescription - + rel: + type: "string" + description: "The relation of the object to the linked resource." + example: "field" + uri: + type: "string" + format: "uri" + description: "The URI to the related resource." + example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/e48a7dd0-9af2-44e1-81b4-435d494f7cd5" FieldOperation: - type: object + type: "object" properties: id: - type: string - description: Field Operation ID - example: MjkyMDdfNT + type: "string" + description: "Field Operation ID" + example: "MjkyMDdfNT" x-deere-signature: - type: string - example: '520122365ebb4870a344784570d202c7' - description: 'A new x-deere-signature response header will be included if the response has changed since last api call.' + type: "string" + example: "520122365ebb4870a344784570d202c7" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." fieldOperationType1: - type: string - example: application - description: Field Operation type. + type: "string" + example: "application" + description: "Field Operation type." cropSeason: - type: string + type: "string" example: 2015 - description: Crop season year. + description: "Crop season year." adaptMachineType: - type: string - example: 'unknown' - description: 'The type of machine that generated the field operation. This may be "unknown".' + type: "string" + example: "unknown" + description: "The type of machine that generated the field operation. This may be \"unknown\"." startDate: - type: datetime - format: date-time - description: Starting date and time of this field operation.. - example: '2015-05-29T22:00:19.200Z' + type: "datetime" + format: "date-time" + description: "Starting date and time of this field operation.." + example: "2015-05-29T22:00:19.200Z" endDate: - type: datetime - format: date-time - description: Ending date and time of this field operation. - example: '2015-05-29T22:23:53.746Z' + type: "datetime" + format: "date-time" + description: "Ending date and time of this field operation." + example: "2015-05-29T22:23:53.746Z" modifiedTime: - type: datetime - format: date-time - description: Last time that anything was modified on this field operation. - example: '2016-04-29T22:12:53.446Z' + type: "datetime" + format: "date-time" + description: "Last time that anything was modified on this field operation." + example: "2016-04-29T22:12:53.446Z" cropName: - type: string - format: string - description: Crop Name. - example: CORN_WET + type: "string" + format: "string" + description: "Crop Name." + example: "CORN_WET" varieties: - type: array - example: '[ { "@type": "Product", "productType": "SEED", "name": "aa1", "tankMix": false } ]' - description: List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix + type: "array" + example: "[ { \"@type\": \"Product\", \"productType\": \"SEED\", \"name\": \"aa1\", \"tankMix\": false } ]" + description: "List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix" products: - example: See sample response below. - description: Details of the product applied during this field operation. Includes name, tankmix, rate, carrier, and components data. + example: "See sample response below." + description: "Details of the product applied during this field operation. Includes name, tankmix, rate, carrier, and components data." name: - type: string - example: Tank Mix Use 1 - description: Name of the tank mix + type: "string" + example: "Tank Mix Use 1" + description: "Name of the tank mix" tankMix: - type: boolean + type: "boolean" example: true - description: Boolean flag as to whether the application operation was for a tank mix or not. + description: "Boolean flag as to whether the application operation was for a tank mix or not." rate: - example: See sample response below. - description: Rate of the application. Includes value and unitId2 data. + example: "See sample response below." + description: "Rate of the application. Includes value and unitId2 data." value: - type: number + type: "number" example: 10 - description: Numeric value. + description: "Numeric value." unitId2: - type: string - example: gal1ac-1 - description: Unit of value. + type: "string" + example: "gal1ac-1" + description: "Unit of value." carrier: - example: See sample response below. - description: Data on the product carrier. Includes name and rate. + example: "See sample response below." + description: "Data on the product carrier. Includes name and rate." components: - example: See sample response below. - description: Data on the product component. Includes name and rate. + example: "See sample response below." + description: "Data on the product component. Includes name and rate." fieldOperationMachines: - type: object - $ref: '#/components/schemas/FieldOperationMachines' - + type: "object" + $ref: "#/components/schemas/FieldOperationMachines" + FieldOperationCompareStatisticsRequest: + type: "object" + required: + - "compareOperationIds" + - "baseLayer" + - "compareLayer" + properties: + compareOperationIds: + type: "array" + description: "The field operation ids that we are comparing so for Yield By Variety the target is the Seeding field operation(s)" + items: + type: "string" + example: "17826sd23-e5e1-4921-8841-3c5f582e3a2e" + baseLayer: + $ref: "#/components/schemas/FieldOperationLayersEnum" + compareLayer: + $ref: "#/components/schemas/FieldOperationLayersEnum" + boundary: + $ref: "#/components/schemas/Polygon" + FieldOperationCompositeLayersEnum: + type: "string" + description: "Layers based on defined comparisons of other layers" + enum: + - "QualityTarget" + - "QualityPrescription" + FieldOperationGeoTIFFLocation: + type: "object" + properties: + location: + description: "AWS S3 Presigned URL of Resource. Use gzip for best compression." + type: "string" + format: "uri" + example: "https://s3.us-east-2.amazonaws.com/s3-bucket-path/49f35d8a-ff54-4b83-81c4-0f45b7b47eba" + mapLegend: + $ref: "#/components/schemas/MapLegend" + extent: + $ref: "#/components/schemas/MapExtent" FieldOperationId: - type: object + type: "object" properties: orgId: - type: string - description: The organization ID. + type: "string" + description: "The organization ID." example: 1234 cropSeason: - type: string + type: "string" example: 2015 - description: 'The year in which the grower logically assigned this operation. Note that operational activity may occur outside this calendar year.' + description: "The year in which the grower logically assigned this operation. Note that operational activity may occur outside this calendar year." fieldOperationType1: - type: string - example: Harvest - description: 'A string indicating the type of operation (valid values include: seeding, application, harvest, or tillage).' + type: "string" + example: "Harvest" + description: "A string indicating the type of operation (valid values include: seeding, application, harvest, or tillage)." cropName: - type: string - format: string - description: A string indicating the type of crop used during this operation. Can be omitted based on operation type and original data source. Only available on harvest and seeding operation types. - example: CORN_WET + type: "string" + format: "string" + description: "A string indicating the type of crop used during this operation. Can be omitted based on operation type and original data source. Only available on harvest and seeding operation types." + example: "CORN_WET" modifiedTime: - type: datetime - format: date-time - description: Last time that anything was modified on this field operation. - example: '2018-11-17T11:53:00.000Z' + type: "datetime" + format: "date-time" + description: "Last time that anything was modified on this field operation." + example: "2018-11-17T11:53:00.000Z" varieties: - type: array - example: '[ { "@type": "Product", "productType": "SEED", "name": "aa1", "tankMix": false } ]' - description: List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix + type: "array" + example: "[ { \"@type\": \"Product\", \"productType\": \"SEED\", \"name\": \"aa1\", \"tankMix\": false } ]" + description: "List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix" adaptMachineType: - type: string - example: 'unknown' - description: 'The type of machine that generated the field operation. This may be "unknown".' + type: "string" + example: "unknown" + description: "The type of machine that generated the field operation. This may be \"unknown\"." fieldOperationMachines: - type: object - $ref: '#/components/schemas/FieldOperationMachines' - - UpdateFieldOperation: - type: object + type: "object" + $ref: "#/components/schemas/FieldOperationMachines" + FieldOperationIndexLayersEnum: + type: "string" + description: "Layers based on defined types recorded or entered during the field operation. They will use EventObservationStats for statistics." + enum: + - "RateResultByProduct" + - "RateTargetByProduct" + - "WindDirection" + - "SkyCondition" + - "SoilMoisture" + - "Varieties" + FieldOperationLayer: + type: "object" + required: + - "id" properties: - cropSeason: - $ref: '#/components/schemas/CropSeason' - cropName: - $ref: '#/components/schemas/CropToken' - varieties: - type: array + "@type": + type: "string" + example: "FieldOperationLayer" + id: + $ref: "#/components/schemas/FieldOperationLayersEnum" + links: + type: "array" items: - oneOf: - - $ref: '#/components/schemas/NameToEridEdit' - - $ref: '#/components/schemas/EridToEridEdit' - product: - type: object - properties: - guid: - $ref: '#/components/schemas/ProductErid' - + $ref: "#/components/schemas/Link" + FieldOperationLayerImageRequest: + type: "object" + properties: + ranges: + type: "array" + items: + $ref: "#/components/schemas/MapRange" + FieldOperationLayerStatistics: + description: "Includes the summarized values for all layers on a field operation" + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "FieldOperationLayerStatistics" + links: + description: "Links to associated data." + type: "array" + items: + $ref: "#/components/schemas/Link" + layerName: + $ref: "#/components/schemas/FieldOperationLayersEnum" + statistics: + $ref: "#/components/schemas/LayerStatistics" + FieldOperationLayers: + type: "array" + description: "Describe an reponse of operaton layers" + items: + $ref: "#/components/schemas/FieldOperationLayer" + FieldOperationLayersEnum: + allOf: + - type: "string" + description: "Possible layerNames used in FieldOperation Layers and statistics. These are not 1-1 with FieldOperationMeasurementTypesEnum and are designed to be easier to understand." + - $ref: "#/components/schemas/FieldOperationMeasurementLayersEnum" + - $ref: "#/components/schemas/FieldOperationIndexLayersEnum" + - $ref: "#/components/schemas/FieldOperationCompositeLayersEnum" FieldOperationMachine: - type: object + type: "object" properties: - '@type': - type: string - example: FieldOperationMachine + "@type": + type: "string" + example: "FieldOperationMachine" erid: - type: string - example: t48a7dd0-as35-44e1-81b4-435d494f7cd5 - description: Doc File based Field Operation Machine erid. + type: "string" + example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + description: "Doc File based Field Operation Machine erid." GUID: - type: string - format: guid - example: t48a7dd0-as35-44e1-81b4-435d494f7cd5 - description: Doc File based Field Operation Machine GUID. Deprecated, use erid instead. + type: "string" + format: "guid" + example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + description: "Doc File based Field Operation Machine GUID. Deprecated, use erid instead." make: - type: string - example: JOHN DEERE + type: "string" + example: "JOHN DEERE" modelYear: - type: integer - format: int64 + type: "integer" + format: "int64" example: 2016 model: - type: string - example: 824K + type: "string" + example: "824K" name: - type: string - example: Machine1 + type: "string" + example: "Machine1" vin: - type: string - example: WXYEJKB73894JE3 + type: "string" + example: "WXYEJKB73894JE3" adaptMachineType: - type: string - example: 'combine' + type: "string" + example: "combine" beginEngineHours: - type: integer - format: int64 + type: "integer" + format: "int64" example: 300 - description: The earliest engine hour measurement for a machine participating in the field operation. + description: "The earliest engine hour measurement for a machine participating in the field operation." endEngineHours: - type: integer - format: int64 + type: "integer" + format: "int64" example: 300 - description: The earliest engine hour measurement for a machine participating in the field operation. + description: "The earliest engine hour measurement for a machine participating in the field operation." beginTime: - type: string - format: date-time - description: The starting date of the field operation by machine in ISO-8601 format. - example: '2016-11-17T11:53:00.000Z' - x-zally-ignore: [D010] + type: "string" + format: "date-time" + description: "The starting date of the field operation by machine in ISO-8601 format." + example: "2016-11-17T11:53:00.000Z" + x-zally-ignore: + - "D010" endTime: - type: string - format: date-time - description: The ending date of the field operation by machine in ISO-8601 format. - example: '2016-11-17T11:53:00.000Z' + type: "string" + format: "date-time" + description: "The ending date of the field operation by machine in ISO-8601 format." + example: "2016-11-17T11:53:00.000Z" modifiedTime: - type: string - format: date-time - description: The most recent time the operational data was updated in ISO-8601 format. - example: '2018-11-17T11:53:00.000Z' + type: "string" + format: "date-time" + description: "The most recent time the operational data was updated in ISO-8601 format." + example: "2018-11-17T11:53:00.000Z" cropName: - $ref: '#/components/schemas/CropToken' + $ref: "#/components/schemas/CropToken" products: allOf: - - $ref: '#/components/schemas/TankMixProduct' - - $ref: '#/components/schemas/NonTankMixProduct' + - $ref: "#/components/schemas/TankMixProduct" + - $ref: "#/components/schemas/NonTankMixProduct" calibrationFactor: - type: number - format: double - description: 'The calibration factor for this machine' - example: '1.25' # increase this machine's yield by 25% + type: "number" + format: "double" + description: "The calibration factor for this machine" + example: "1.25" machine: - type: object - description: JDLink machine that is only populated when the 'machine' embed is specified - example: { id: 'someId', serialNumber: '1234567890123'} + type: "object" + description: "JDLink machine that is only populated when the 'machine' embed is specified" + example: + id: "someId" + serialNumber: "1234567890123" operators: - type: array + type: "array" items: - $ref: '#/components/schemas/Operator' + $ref: "#/components/schemas/Operator" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - - UpdateFieldOperationMachine: - type: object + $ref: "#/components/schemas/Link" + FieldOperationMachines: + type: "object" + description: "Machines utilized during this operation" properties: erid: - type: string - example: t48a7dd0-as35-44e1-81b4-435d494f7cd5 - description: Doc File based Field Operation Machine erid. - calibrationFactor: - type: number - format: double - description: 'The calibration factor for this machine' - example: '1.25' # increase this machine's yield by 25% - - FieldOperationWorkNote: - type: object - required: - - id - - note - properties: - '@type': - type: string - example: FieldOperationWorkNote - id: - type: string - format: guid - example: '3df13267-c5ee-4cc3-ab79-7cf013dc1e98' - description: eventId of the work note. - note: - type: string - example: 'note1' - timestamp: - type: string - format: date-time - description: Timestamp of the work note. - example: '2018-08-27T08:08:08.000Z' - gpsLocation: - description: GPS location where the the work note was taken. - $ref: '#/components/schemas/Point' - - MapRangeForIndex: - type: object + type: "string" + example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + description: "Doc File based Field Operation Machine erid." + Operators: + $ref: "#/components/schemas/Operators" + machineId: + type: "integer" + description: "PrincipalId of the machine" + format: "int64" + example: 637795 + nullable: true + vin: + type: "string" + description: "VIN of the machine" + example: "WXYEJKB73894JE3" + FieldOperationMeasurement: + allOf: + - description: "An object representing the measurements the API has decided are relevant to a particular map image." + - $ref: "#/components/schemas/FieldOperationMeasurementInFullRelease" + - $ref: "#/components/schemas/FieldOperationMeasurementFromAgreportsApi" + FieldOperationMeasurementCategoryEnum: + type: "string" + description: "FieldOperation Measurement Category" + enum: + - "Target" + - "Result" + - "Prescription" + FieldOperationMeasurementFromAgreportsApi: + description: "Properties added to FieldOperationMeasurement when trying to add the measurementTypes in FieldOperationMeasurementTypesInAgreportsApi via agreports-api. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints." + type: "object" properties: - '@type': - type: string - example: 'MapLegendItem' - label: - description: The string label for this range. Used for images that are not based on numerical values - type: string - example: 'Variety 1' - hexColor: - description: The color used in the image for this rage - type: string - example: '#cc0000' - percent: - description: The proportion of the field operation matching this range (not actually a percentage). - type: number - format: double - example: 0.15 - key: - description: This is a placeholder for various index key - type: integer - format: int64 - example: 55 - - MapRangeForMeasurement: - type: object + elevation: + $ref: "#/components/schemas/EventMeasurementStats" + fuelRate: + $ref: "#/components/schemas/EventMeasurementStats" + applicationHeight: + $ref: "#/components/schemas/EventMeasurementStats" + windSpeed: + $ref: "#/components/schemas/EventMeasurementStats" + temperature: + $ref: "#/components/schemas/EventMeasurementStats" + temperatureDifference: + $ref: "#/components/schemas/EventMeasurementStats" + humidity: + $ref: "#/components/schemas/EventMeasurementStats" + windDirection: + $ref: "#/components/schemas/EventObservationStats" + skyCondition: + $ref: "#/components/schemas/EventObservationStats" + soilMoisture: + $ref: "#/components/schemas/EventObservationStats" + rate: + $ref: "#/components/schemas/EventMeasurementStats" + pressure: + $ref: "#/components/schemas/EventMeasurementStats" + depth: + $ref: "#/components/schemas/EventMeasurementStats" + dosing: + $ref: "#/components/schemas/EventMeasurementStats" + cutLength: + $ref: "#/components/schemas/EventMeasurementStats" + gaugeWheelMargin: + $ref: "#/components/schemas/EventMeasurementStats" + downforce: + $ref: "#/components/schemas/EventMeasurementStats" + groundContact: + $ref: "#/components/schemas/EventMeasurementStats" + rideQuality: + $ref: "#/components/schemas/EventMeasurementStats" + seedSpacingVariation: + $ref: "#/components/schemas/EventMeasurementStats" + singulation: + $ref: "#/components/schemas/EventMeasurementStats" + doubles: + $ref: "#/components/schemas/EventMeasurementStats" + skips: + $ref: "#/components/schemas/EventMeasurementStats" + yieldVolume: + $ref: "#/components/schemas/EventMeasurementStats" + quality: + $ref: "#/components/schemas/EventMeasurementStats" + FieldOperationMeasurementInFullRelease: + type: "object" + description: "The fully released portion of the FieldOperationMeasurement." properties: - '@type': - type: string - example: 'MapLegendItem' - minimum: - description: The inclusive minimum value included in this range - type: number - format: double - example: 13.15 - maximum: - description: The exclusive maximum value included in this range - type: number - format: double - example: 17.95 - hexColor: - description: The color used in the image for this rage - type: string - example: '#cc0000' - percent: - description: The proportion of the field operation matching this range (not actually a percentage). - type: number - format: double - example: 0.15 - - MapRangeForGeoTiff: - type: object + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + "@type": + type: "string" + example: "FieldOperationMeasurement" + measurementName: + $ref: "#/components/schemas/FieldOperationMeasurementTypesEnum" + measurementCategory: + $ref: "#/components/schemas/FieldOperationMeasurementCategoryEnum" + area: + $ref: "#/components/schemas/EventMeasurement" + yield: + $ref: "#/components/schemas/EventMeasurement" + averageYield: + $ref: "#/components/schemas/EventMeasurement" + averageMoisture: + $ref: "#/components/schemas/EventMeasurement" + wetMass: + $ref: "#/components/schemas/EventMeasurement" + averageWetMass: + $ref: "#/components/schemas/EventMeasurement" + harvestLabAccumulatedWetMass: + $ref: "#/components/schemas/EventMeasurement" + averageSpeed: + $ref: "#/components/schemas/EventMeasurement" + totalMaterial: + $ref: "#/components/schemas/EventMeasurement" + averageMaterial: + $ref: "#/components/schemas/EventMeasurement" + averageDepth: + $ref: "#/components/schemas/EventMeasurement" + averagePressure: + $ref: "#/components/schemas/EventMeasurement" + averageTrash: + $ref: "#/components/schemas/EventMeasurement" + averageAcidDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + averageNeutralDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + averageStarch: + $ref: "#/components/schemas/EventMeasurement" + averageCrudeProtein: + $ref: "#/components/schemas/EventMeasurement" + averageSugar: + $ref: "#/components/schemas/EventMeasurement" + maxAcidDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + maxNeutralDetergentFiber: + $ref: "#/components/schemas/EventMeasurement" + maxStarch: + $ref: "#/components/schemas/EventMeasurement" + maxCrudeProtein: + $ref: "#/components/schemas/EventMeasurement" + maxSugar: + $ref: "#/components/schemas/EventMeasurement" + varietyTotals: + type: "array" + items: + $ref: "#/components/schemas/VarietyTotal" + productTotals: + type: "array" + items: + $ref: "#/components/schemas/ProductTotal" + FieldOperationMeasurementLayersEnum: + type: "string" + description: "Layers based on variable rate measurements recorded during the field operation. They will use EventMeasurementStats for statistics." + enum: + - "AreaWorked" + - "Speed" + - "Elevation" + - "FuelRate" + - "FuelConsumption" + - "DieselExhaustFluid" + - "EngineHours" + - "YieldByVolume" + - "YieldByMass" + - "WetMass" + - "Moisture" + - "Trash" + - "AcidDetergentFiber" + - "NeutralDetergentFiber" + - "CrudeProtein" + - "Starch" + - "Sugar" + - "RateResult" + - "RateTarget" + - "RatePrescription" + - "InoculantDosing" + - "LengthOfCut" + - "GaugeWheelMargin" + - "DownforceResult" + - "GroundContact" + - "RideQuality" + - "SeedSpacingVariation" + - "Singulation" + - "ApplicationHeight" + - "SprayPressure" + - "PressureTarget" + - "PressureResult" + - "PressurePrescription" + - "DepthResult" + - "DepthTarget" + - "DepthPrescription" + - "WindSpeed" + - "AirTemperature" + - "TemperatureDifference" + - "RelativeHumidity" + - "SoilTemperature" + FieldOperationMeasurementType: properties: - '@type': - type: string - example: 'MapLegendItem' - label: - description: The string label for this range. Used for images that are not based on numerical values - type: string - example: 'Variety 1' - key: - description: This is a placeholder for GeoTiff based Index Key - type: integer - format: int64 - example: 1 - - MapRange: - allOf: - - $ref: '#/components/schemas/MapRangeForGeoTiff' - - $ref: '#/components/schemas/MapRangeForIndex' - - $ref: '#/components/schemas/MapRangeForMeasurement' - MapRangeWithLayerStatistics: + measurementName: + type: "string" + example: "TillageDepthTarget" + description: "Measurement Name.
          Note: This response details section correspond to header-application/vnd.deere.axiom.v3+json" + measurementCategory: + type: "string" + example: "Target" + description: "Measurement Category." + area: + example: "See sample response below" + description: "The area covered for this measurement. Includes value, and unitId2." + averageDepth: + example: "See sample response below" + description: "The average depth observed across the area covered. Includes value, and unitId." + value: + type: "integer" + example: 15.24 + description: "Numeric measurement value." + unitId2: + type: "string" + example: "cm" + description: "Unit of measurement." + FieldOperationMeasurementTypesEnum: allOf: - - type: object - - $ref: '#/components/schemas/MapRange' - - description: Field Operation Layer Statistics broken down according to the legend for another context. - properties: - '@type': - type: string - example: 'MapRangeWithLayerStatistics' - statistics: - $ref: '#/components/schemas/LayerStatistics' - - MapLegend: - type: object - description: Describes the breaks and their colors for an image + - type: "string" + description: "FieldOperation Measurement Types" + - $ref: "#/components/schemas/FieldOperationMeasurementTypesInFullRelease" + - $ref: "#/components/schemas/FieldOperationMeasurementTypesInAgreportsApi" + FieldOperationMeasurementTypesInAgreportsApi: + type: "string" + description: "FieldOperation Measurement Types supported in the Agreports/DataLake versions of the endpoints. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints." + enum: + - "ElevationResult" + - "ApplicationHeightTarget" + - "FuelRateResult" + - "WindSpeed" + - "AirTemperature" + - "TemperatureDifference" + - "RelativeHumidity" + - "SoilTemperature" + - "RatePrescription" + - "PressurePrescription" + - "DepthPrescription" + - "SeedDepthTarget" + - "SprayPressure" + - "InoculantDosing" + - "LengthOfCut" + - "GaugeWheelMargin" + - "DownforceResult" + - "RideQuality" + - "SeedSpacingVariation" + - "GroundContact" + - "Singulation" + - "SkyCondition" + - "SoilMoisture" + - "TargetQuality" + - "PrescriptionQuality" + FieldOperationMeasurementTypesInFullRelease: + type: "string" + description: "FieldOperation Measurement Types supported in the HDP versions of the endpoints and therefore fully released." + enum: + - "SeedingRateTarget" + - "SeedingRateResult" + - "SeedingSpeedResult" + - "SeedingVarietiesTarget" + - "SeedingVarietiesResult" + - "ApplicationRateTarget" + - "ApplicationRateResult" + - "ApplicationSpeedResult" + - "HarvestYieldResult" + - "HarvestYieldContourResult" + - "HarvestSpecialtyGrossYieldResult" + - "HarvestWetMassResult" + - "HarvestMoistureResult" + - "HarvestTrashResult" + - "HarvestSpeedResult" + - "HarvestAdfResult" + - "HarvestNdfResult" + - "HarvestCrudeProteinResult" + - "HarvestStarchResult" + - "HarvestSugarResult" + - "TillageDepthResult" + - "TillagePressureResult" + - "TillageSpeedResult" + - "TillageDepthTarget" + - "TillagePressureTarget" + FieldOperationMeasurement_MeasurementType: properties: - '@type': - type: string - example: 'MapLegend' - layerName: - $ref: '#/components/schemas/FieldOperationLayersEnum' - unitId: - description: Units for the legend - type: string - example: lb1ac-1 + name: + example: "fieldOperationMapImage" + type: "string" + description: "Field Operation name.
          Note: This response details section correspond to header-application/vnd.deere.axiom.v3.image+json" + declaredType: + example: "See sample response below." + description: "" + scope: + example: "See sample response below." + description: "" + image: + example: "See sample response below." + type: "Base64 encoded PNG image" + description: "The PNG image file." + legends: + example: "See sample response below." + description: "The legend used to render the map image. Includes unitId2 and ranges." + extent: + example: "See sample response below." + description: "Two coordinates that represent the corners of the image when overlaid onto a Web Mercator projection1. Includes minimumLatitude, minimumLongitude, maximumLatitude, and maximumLongitude." + unitId2: + type: "string" + description: "Numeric values in the legend's ranges are measurements in this unit. The unit depends on the Accept-UOM-System header for the MapImage request." + example: "cm" ranges: - type: array - items: - $ref: '#/components/schemas/MapRange' - - MapExtent: - type: object - description: The GPS extents of a map image - properties: - minimumLatitude: - type: number - format: double - example: 41.66470503009207 - maximumLatitude: - type: number - format: double - example: 41.67086022030498 - minimumLongitude: - type: number - format: double - example: -93.15582275390625 - maximumLongitude: - type: number - format: double - example: -93.1475830078125 - + example: "See sample response below." + description: "The ranges contained in the legend. Includes either a label (for non-numeric ranges), or minimum, maximum, hexColor, and percent." + label: + type: "string" + example: 15 + description: "A label associated with the legend item. May be omitted for ranges with numeric values." + hexColor: + type: "string" + example: "#4B0082" + description: "The HEX color value of the legend item." + percent: + type: "number" + example: 1 + description: "The percentage of agronomic data points that are represented by this legend item. For example, 0.05 means that 5% of the operation's measurements fall into this legend range." + nil: + type: "boolean" + example: "false" + globalScope: + type: "boolean" + example: "true" + typeSubstituted: + type: "boolean" + example: "false" FieldOperationPNGImage: - type: object + type: "object" properties: image: - description: Base64 encoded PNG image - type: string - example: 'data:image/png;base64,{base64EncodedContent}' + description: "Base64 encoded PNG image" + type: "string" + example: "data:image/png;base64,{base64EncodedContent}" mapLegend: - $ref: '#/components/schemas/MapLegend' + $ref: "#/components/schemas/MapLegend" extent: - $ref: '#/components/schemas/MapExtent' - - FieldOperationGeoTIFFLocation: - type: object + $ref: "#/components/schemas/MapExtent" + FieldOperationProductTypesEnum: + type: "string" + description: "FieldOperation Product Types TODO Enum" + enum: + - "OTHER" + - "CHEMICAL" + - "SEED" + - "FEED" + - "FERTILIZER" + FieldOperationSearchErrors: + type: "object" + format: "Errors/FieldOperationContextException" properties: - location: - description: AWS S3 Presigned URL of Resource. Use gzip for best compression. - type: string - format: uri - example: https://s3.us-east-2.amazonaws.com/s3-bucket-path/49f35d8a-ff54-4b83-81c4-0f45b7b47eba - mapLegend: - $ref: '#/components/schemas/MapLegend' - extent: - $ref: '#/components/schemas/MapExtent' - - FieldOperationLayerStatistics: - description: Includes the summarized values for all layers on a field operation - type: array - items: - type: object - properties: - '@type': - type: string - example: FieldOperationLayerStatistics - links: - description: Links to associated data. - type: array - items: - $ref: '#/components/schemas/Link' - layerName: - $ref: '#/components/schemas/FieldOperationLayersEnum' - statistics: - $ref: '#/components/schemas/LayerStatistics' - + guid: + type: "string" + format: "guid" + example: "17826sd23-e5e1-4921-8841-3c5f582e3a2e" + message: + type: "string" + description: "The value that was supplied for this field in the request" + example: "invalid/unsupported geojson" + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + example: + message: "this_part_of_the_request_was_wrong" + properties: + message: + type: "string" + description: "The value that was supplied for this field in the request" + example: "invalid/unsupported geojson" + FieldOperationTypesEnum: + type: "string" + description: "The type of operation" + example: "HARVEST" + FieldOperationWorkNote: + type: "object" + required: + - "id" + - "note" + properties: + "@type": + type: "string" + example: "FieldOperationWorkNote" + id: + type: "string" + format: "guid" + example: "3df13267-c5ee-4cc3-ab79-7cf013dc1e98" + description: "eventId of the work note." + note: + type: "string" + example: "note1" + timestamp: + type: "string" + format: "date-time" + description: "Timestamp of the work note." + example: "2018-08-27T08:08:08.000Z" + gpsLocation: + description: "GPS location where the the work note was taken." + $ref: "#/components/schemas/Point" + FieldOperationsSearch: + type: "object" + properties: + fieldIds: + type: "array" + items: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + fieldOperationTypes: + type: "array" + items: + $ref: "#/components/schemas/FieldOperationTypesEnum" + cropTypes: + type: "array" + items: + $ref: "#/components/schemas/CropToken" + displayTypes: + type: "array" + items: + $ref: "#/components/schemas/DisplayTypeEnum" + startDate: + type: "string" + format: "date-time" + description: "The starting date of the operation in ISO-8601 format." + example: "2018-08-27T08:08:08.000Z" + x-zally-ignore: + - "D010" + endDate: + type: "string" + format: "date-time" + description: "The ending date of the operation in ISO-8601 format." + example: "2019-08-27T08:08:08.000Z" + x-zally-ignore: + - "D010" + embed: + type: "array" + items: + type: "string" + enum: + - "client" + - "farm" + - "field" + - "fieldOperationMachines" + - "measurementTypes" + JohnDeereDisplayTypeEnum: + type: "string" + description: "The type of display" + enum: + - "GS4_4600" + - "GS3_2630" + - "GS2_2600" + - "GS2_1800" + - "GS2_CommandCenter" LayerStatistics: - description: The statistics for a given layer context. - type: object + description: "The statistics for a given layer context." + type: "object" properties: - '@type': - type: string - example: LayerStatistics + "@type": + type: "string" + example: "LayerStatistics" oneOf: - - $ref: '#/components/schemas/EventMeasurementStats' - - $ref: '#/components/schemas/EventObservationStats' - - FieldOperationLayerImageRequest: - type: object + - $ref: "#/components/schemas/EventMeasurementStats" + - $ref: "#/components/schemas/EventObservationStats" + Link: + type: "string" + properties: + uri: null + LinkGETFieldOperations: + properties: + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + description: "Fields Link." + measurementTypes: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + description: "Field Operation Measurements Link." + measurement: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" + description: "zero or more field operation measurements links. These will vary by the type of operation" + client: + example: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + description: "Clients Link." + farm: + example: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + description: "Farms Link." + shapeFileAsync: + example: "https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg" + description: "Asynchronous Shapefiles Link." + workPlans: + example: "https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e" + description: "Link to work plan associated to the operation." + LinkGETFieldOperationsId: + properties: + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + description: "Fields Link." + measurementTypes: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes" + description: "Field Operation Measurements Link." + measurement: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult" + description: "zero or more field operation measurements links. These will vary by the type of operation" + client: + example: "https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0" + description: "Clients Link." + farm: + example: "https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0" + description: "Farms Link." + LinksGet: + properties: + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + description: "Fields Link." + fieldOperation: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA" + description: "Field Operations Link." + measurementType: + example: "https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget" + description: "Field Operation Measurements Link." + MapExtent: + type: "object" + description: "The GPS extents of a map image" + properties: + minimumLatitude: + type: "number" + format: "double" + example: 41.66470503009207 + maximumLatitude: + type: "number" + format: "double" + example: 41.67086022030498 + minimumLongitude: + type: "number" + format: "double" + example: -93.15582275390625 + maximumLongitude: + type: "number" + format: "double" + example: -93.1475830078125 + MapLegend: + type: "object" + description: "Describes the breaks and their colors for an image" properties: + "@type": + type: "string" + example: "MapLegend" + layerName: + $ref: "#/components/schemas/FieldOperationLayersEnum" + unitId: + description: "Units for the legend" + type: "string" + example: "lb1ac-1" ranges: - type: array - items: - $ref: '#/components/schemas/MapRange' - - FieldOperationCompareStatisticsRequest: - type: object - required: - - compareOperationIds - - baseLayer - - compareLayer - properties: - compareOperationIds: - type: array - description: The field operation ids that we are comparing so for Yield By Variety the target is the Seeding field operation(s) + type: "array" items: - type: string - example: 17826sd23-e5e1-4921-8841-3c5f582e3a2e - baseLayer: - $ref: '#/components/schemas/FieldOperationLayersEnum' - compareLayer: - $ref: '#/components/schemas/FieldOperationLayersEnum' - boundary: - $ref: '#/components/schemas/Polygon' - - FieldOperationMeasurement: + $ref: "#/components/schemas/MapRange" + MapRange: allOf: - - description: An object representing the measurements the API has decided are relevant to a particular map image. - - $ref: '#/components/schemas/FieldOperationMeasurementInFullRelease' - - $ref: '#/components/schemas/FieldOperationMeasurementFromAgreportsApi' - - FieldOperationMeasurementInFullRelease: - type: object - description: The fully released portion of the FieldOperationMeasurement. - properties: - links: - type: array - items: - $ref: '#/components/schemas/Link' - '@type': - type: string - example: FieldOperationMeasurement - measurementName: - $ref: '#/components/schemas/FieldOperationMeasurementTypesEnum' - measurementCategory: - $ref: '#/components/schemas/FieldOperationMeasurementCategoryEnum' - area: - $ref: '#/components/schemas/EventMeasurement' - yield: - $ref: '#/components/schemas/EventMeasurement' - averageYield: - $ref: '#/components/schemas/EventMeasurement' - averageMoisture: - $ref: '#/components/schemas/EventMeasurement' - wetMass: - $ref: '#/components/schemas/EventMeasurement' - averageWetMass: - $ref: '#/components/schemas/EventMeasurement' - harvestLabAccumulatedWetMass: - $ref: '#/components/schemas/EventMeasurement' - averageSpeed: - $ref: '#/components/schemas/EventMeasurement' - totalMaterial: - $ref: '#/components/schemas/EventMeasurement' - averageMaterial: - $ref: '#/components/schemas/EventMeasurement' - averageDepth: - $ref: '#/components/schemas/EventMeasurement' - averagePressure: - $ref: '#/components/schemas/EventMeasurement' - averageTrash: - $ref: '#/components/schemas/EventMeasurement' - averageAcidDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' - averageNeutralDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' - averageStarch: - $ref: '#/components/schemas/EventMeasurement' - averageCrudeProtein: - $ref: '#/components/schemas/EventMeasurement' - averageSugar: - $ref: '#/components/schemas/EventMeasurement' - maxAcidDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' - maxNeutralDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' - maxStarch: - $ref: '#/components/schemas/EventMeasurement' - maxCrudeProtein: - $ref: '#/components/schemas/EventMeasurement' - maxSugar: - $ref: '#/components/schemas/EventMeasurement' - varietyTotals: - type: array - items: - $ref: '#/components/schemas/VarietyTotal' - productTotals: - type: array - items: - $ref: '#/components/schemas/ProductTotal' - - FieldOperationMeasurementFromAgreportsApi: - description: - Properties added to FieldOperationMeasurement when trying to add the measurementTypes in FieldOperationMeasurementTypesInAgreportsApi via agreports-api. - These are released to some clients but, *will never* be released to all clients. - Similar data will be available from layer and statistics endpoints. - type: object + - $ref: "#/components/schemas/MapRangeForGeoTiff" + - $ref: "#/components/schemas/MapRangeForIndex" + - $ref: "#/components/schemas/MapRangeForMeasurement" + MapRangeForGeoTiff: + type: "object" properties: - elevation: - $ref: '#/components/schemas/EventMeasurementStats' - fuelRate: - $ref: '#/components/schemas/EventMeasurementStats' - applicationHeight: - $ref: '#/components/schemas/EventMeasurementStats' - windSpeed: - $ref: '#/components/schemas/EventMeasurementStats' - temperature: - $ref: '#/components/schemas/EventMeasurementStats' - temperatureDifference: - $ref: '#/components/schemas/EventMeasurementStats' - humidity: - $ref: '#/components/schemas/EventMeasurementStats' - windDirection: - $ref: '#/components/schemas/EventObservationStats' - skyCondition: - $ref: '#/components/schemas/EventObservationStats' - soilMoisture: - $ref: '#/components/schemas/EventObservationStats' - rate: - $ref: '#/components/schemas/EventMeasurementStats' - pressure: - $ref: '#/components/schemas/EventMeasurementStats' - depth: - $ref: '#/components/schemas/EventMeasurementStats' - dosing: - $ref: '#/components/schemas/EventMeasurementStats' - cutLength: - $ref: '#/components/schemas/EventMeasurementStats' - gaugeWheelMargin: - $ref: '#/components/schemas/EventMeasurementStats' - downforce: - $ref: '#/components/schemas/EventMeasurementStats' - groundContact: - $ref: '#/components/schemas/EventMeasurementStats' - rideQuality: - $ref: '#/components/schemas/EventMeasurementStats' - seedSpacingVariation: - $ref: '#/components/schemas/EventMeasurementStats' - singulation: - $ref: '#/components/schemas/EventMeasurementStats' - doubles: - $ref: '#/components/schemas/EventMeasurementStats' - skips: - $ref: '#/components/schemas/EventMeasurementStats' - yieldVolume: - $ref: '#/components/schemas/EventMeasurementStats' - quality: - $ref: '#/components/schemas/EventMeasurementStats' - - EventMeasurement: - type: object - description: A general representation of quantity and unit. - example: - '@type': EventMeasurement - value: 17.13 - unitId: gal1ac-1 + "@type": + type: "string" + example: "MapLegendItem" + label: + description: "The string label for this range. Used for images that are not based on numerical values" + type: "string" + example: "Variety 1" + key: + description: "This is a placeholder for GeoTiff based Index Key" + type: "integer" + format: "int64" + example: 1 + MapRangeForIndex: + type: "object" properties: - '@type': - type: string - example: EventMeasurement - value: - type: number - format: double - description: The quantity represented by this measurement. - unitId: - type: string - description: The unit associated to the quantity measured - example: gal1ac-1. - variableRepresentation: - type: string - example: vrSolutionRateLiquid - edited: - type: boolean - description: Indicates whether a manual data edit was directly applied to this value. - If a data edit for a different layer affected this value, it *will not be set*. - May not be serialized if false. - example: false - - EventMeasurementStats: - type: object - description: Relevant stats for a measurement recorded during the operation. + "@type": + type: "string" + example: "MapLegendItem" + label: + description: "The string label for this range. Used for images that are not based on numerical values" + type: "string" + example: "Variety 1" + hexColor: + description: "The color used in the image for this rage" + type: "string" + example: "#cc0000" + percent: + description: "The proportion of the field operation matching this range (not actually a percentage)." + type: "number" + format: "double" + example: 0.15 + key: + description: "This is a placeholder for various index key" + type: "integer" + format: "int64" + example: 55 + MapRangeForMeasurement: + type: "object" properties: - '@type': - type: string - example: EventMeasurementStats - areaRecorded: - $ref: '#/components/schemas/EventMeasurement' - averageValue: - $ref: '#/components/schemas/EventMeasurement' - totalValue: - $ref: '#/components/schemas/EventMeasurement' - minValue: - $ref: '#/components/schemas/EventMeasurement' - maxValue: - $ref: '#/components/schemas/EventMeasurement' - firstValue: - $ref: '#/components/schemas/EventMeasurement' - lastValue: - $ref: '#/components/schemas/EventMeasurement' - - EventObservation: - type: object - description: A general representation of an observed value. + "@type": + type: "string" + example: "MapLegendItem" + minimum: + description: "The inclusive minimum value included in this range" + type: "number" + format: "double" + example: 13.15 + maximum: + description: "The exclusive maximum value included in this range" + type: "number" + format: "double" + example: 17.95 + hexColor: + description: "The color used in the image for this rage" + type: "string" + example: "#cc0000" + percent: + description: "The proportion of the field operation matching this range (not actually a percentage)." + type: "number" + format: "double" + example: 0.15 + MapRangeWithLayerStatistics: + allOf: + - type: "object" + - $ref: "#/components/schemas/MapRange" + - description: "Field Operation Layer Statistics broken down according to the legend for another context." + properties: + "@type": + type: "string" + example: "MapRangeWithLayerStatistics" + statistics: + $ref: "#/components/schemas/LayerStatistics" + NameToEridEdit: + type: "object" + description: "Describes an edit that should change the id of any object that matches the name" properties: - '@type': - type: string - example: EventObservation - value: - type: string - description: The observed value, e.g. NW wind direction. - example: NW - - EventObservationStats: - type: object - description: Relevant stats for the values for an observation during the operation. + fromName: + type: "string" + description: "The name to match against" + example: "Variety A" + toGuid: + $ref: "#/components/schemas/ProductErid" + NonTankMixProduct: + type: "object" properties: - areaRecorded: - $ref: '#/components/schemas/EventMeasurement' - firstObservation: - $ref: '#/components/schemas/EventObservation' - lastObservation: - $ref: '#/components/schemas/EventObservation' - predominantObservation: - $ref: '#/components/schemas/EventObservation' + "@type": + type: "string" + example: "Product" + guid: + $ref: "#/components/schemas/ProductErid" + productType: + $ref: "#/components/schemas/FieldOperationProductTypesEnum" + name: + type: "string" + description: "The general name of the product, or 'Tank Mix' for a product consisting of multiple components in a carrier, + for APPLICATION operations.\n" + example: "Priaxor" + brand: + type: "string" + description: "The brand name of product." + example: "BrandForProducts" + agencyRegistrationNumber: + $ref: "#/components/schemas/AgencyRegistrationNumber" + tankMix: + type: "boolean" + description: "Flag indicating whether the product is a tank mix (true) or a single component (false)." + example: false Operator: - type: object + type: "object" properties: - '@type': - type: string - description: Identifies the class Operator - example: Operator + "@type": + type: "string" + description: "Identifies the class Operator" + example: "Operator" guid: - type: string - example: OPERATOR_GUID + type: "string" + example: "OPERATOR_GUID" name: - type: string - example: OPERATOR_NAME + type: "string" + example: "OPERATOR_NAME" license: - type: string - example: OPERATOR_LICENSE - + type: "string" + example: "OPERATOR_LICENSE" + Operators: + type: "object" + description: "Operators that performed work using this machine" + properties: + operatorId: + type: "string" + description: "Unique identifier for this operator" + example: "657b4391-79b3-4012-a617-7ceba7111ad0" + name: + type: "string" + description: "Name of the operator" + example: "John Doe" + license: + type: "string" + description: "Operator license number" + example: "ABC123" + OrgId: + type: "integer" + description: "The organization owning the fields and associated operations" + format: "int64" + example: 123456 Point: - type: object + type: "object" properties: - '@type': - type: string - description: Identifies the class Point - example: Point + "@type": + type: "string" + description: "Identifies the class Point" + example: "Point" lat: - type: number - format: double - description: The latitude of the point + type: "number" + format: "double" + description: "The latitude of the point" example: 54.14 lon: - type: number - format: double - description: The longitude of the point + type: "number" + format: "double" + description: "The longitude of the point" example: -88.786 - Polygon: - type: object + type: "object" required: - - type - - coordinates - description: GeoJSon Polygon. Positions all 2D. + - "type" + - "coordinates" + description: "GeoJSon Polygon. Positions all 2D." externalDocs: - url: https://tools.ietf.org/html/rfc7946#section-3.1.6 + url: "https://tools.ietf.org/html/rfc7946#section-3.1.6" properties: type: - description: | - The type of Geometry. In this case, must be 'Polygon' per GeoJSON - spec. Note that the "coordinates" member is validated to be be an + description: "The type of Geometry. In this case, must be 'Polygon' per GeoJSON + + spec. Note that the \"coordinates\" member is validated to be be an + array of size one. This implies there are no interior rings allowed - currently. - type: string + + currently.\n" + type: "string" enum: - - Polygon + - "Polygon" coordinates: - type: array - description: >- - The number of polygons allowed. Currently 1, implying no interior - rings. If this number is changes, the maxItems should be considered. + type: "array" + description: "The number of polygons allowed. Currently 1, implying no interior rings. If this number is changes, the maxItems should be considered. - From RFC7946: - o For type "Polygon", the "coordinates" member MUST be an array of - linear ring coordinate arrays. + From RFC7946: o For type \"Polygon\", the \"coordinates\" member MUST be an array of linear ring coordinate arrays. - o For Polygons with more than one of these rings, the first MUST be - the exterior ring, and any others MUST be interior rings. The - exterior ring bounds the surface, and the interior rings (if - present) bound holes within the surface. + o For Polygons with more than one of these rings, the first MUST be the exterior ring, and any others MUST be interior rings. The exterior ring bounds the surface, and the interior rings (if present) bound holes within the surface. - Again, note we only allow a single set of coordinates, implying no - interior rings. + Again, note we only allow a single set of coordinates, implying no interior rings." minItems: 1 maxItems: 1 items: - type: array - description: >- - The number of vertices in this polygon. From RFC7946: - o A linear ring is a closed LineString with four or more positions. + type: "array" + description: "The number of vertices in this polygon. From RFC7946: + + \ o A linear ring is a closed LineString with four or more positions. + + + \ o The first and last positions are equivalent, and they MUST contain + + \ identical values; their representation SHOULD also be identical. - o The first and last positions are equivalent, and they MUST contain - identical values; their representation SHOULD also be identical. - o A linear ring is the boundary of a surface or the boundary of a - hole in a surface. + \ o A linear ring is the boundary of a surface or the boundary of a - o A linear ring MUST follow the right-hand rule with respect to the - area it bounds, i.e., exterior rings are counterclockwise, and - holes are clockwise. (also in the spec: parsers SHOULD NOT reject - Polygons that do not follow the right-hand rule.) + \ hole in a surface. - https://tools.ietf.org/html/rfc7946#section-3.1.6 + \ o A linear ring MUST follow the right-hand rule with respect to the + + \ area it bounds, i.e., exterior rings are counterclockwise, and + + \ holes are clockwise. (also in the spec: parsers SHOULD NOT reject + + \ Polygons that do not follow the right-hand rule.) + + + \ https://tools.ietf.org/html/rfc7946#section-3.1.6" minItems: 4 maxItems: 100 items: - type: array - description: >- - The actual coordinates for a vertex of the linear ring. Note that - UTM does not allow additional elements other than long and lat in - this array. + type: "array" + description: "The actual coordinates for a vertex of the linear ring. Note that UTM does not allow additional elements other than long and lat in this array." maxItems: 2 minItems: 2 items: - type: number - format: double + type: "number" + format: "double" example: - 42.3 - -82.5 - + ProductErid: + type: "string" + description: "Recorded Product Erid." + example: "fa14f029-831c-456b-a76e-2d3c26207c19" ProductTotal: - type: object - description: The ProductTotal associated with this FieldOperation. + type: "object" + description: "The ProductTotal associated with this FieldOperation." properties: - '@type': - type: string - example: ProductTotal + "@type": + type: "string" + example: "ProductTotal" productId: - type: string - format: guid - example: '3df13267-c5ee-4cc3-ab79-7cf013dc1e98' + type: "string" + format: "guid" + example: "3df13267-c5ee-4cc3-ab79-7cf013dc1e98" name: - type: string - example: Water + type: "string" + example: "Water" brand: - type: string - example: --- + type: "string" + example: "---" carrier: - type: boolean + type: "boolean" example: true area: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" yield: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageYield: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageMoisture: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" wetMass: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageWetMass: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" harvestLabAccumulatedWetMass: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" totalMaterial: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageMaterial: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageTrash: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageAcidDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageNeutralDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageStarch: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageCrudeProtein: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageSugar: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxAcidDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxNeutralDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxStarch: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxCrudeProtein: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxSugar: - $ref: '#/components/schemas/EventMeasurement' - + $ref: "#/components/schemas/EventMeasurement" + TankMixProduct: + type: "object" + properties: + guid: + $ref: "#/components/schemas/ProductErid" + tankMix: + type: "boolean" + description: "Flag indicating whether the product is a tank mix (true) or a single component (false)." + example: true + rate: + $ref: "#/components/schemas/EventMeasurement" + carrier: + $ref: "#/components/schemas/Component" + components: + type: "array" + items: + $ref: "#/components/schemas/Component" + ThirdPartyDisplayTypeEnum: + type: "string" + description: "The type of display" + enum: + - "IntegraVersa" + - "ProtobufV36" + - "ProtobufV41" + - "TrimbleFMX" + - "Unknown" + UpdateFieldOperation: + type: "object" + properties: + cropSeason: + $ref: "#/components/schemas/CropSeason" + cropName: + $ref: "#/components/schemas/CropToken" + varieties: + type: "array" + items: + oneOf: + - $ref: "#/components/schemas/NameToEridEdit" + - $ref: "#/components/schemas/EridToEridEdit" + product: + type: "object" + properties: + guid: + $ref: "#/components/schemas/ProductErid" + UpdateFieldOperationMachine: + type: "object" + properties: + erid: + type: "string" + example: "t48a7dd0-as35-44e1-81b4-435d494f7cd5" + description: "Doc File based Field Operation Machine erid." + calibrationFactor: + type: "number" + format: "double" + description: "The calibration factor for this machine" + example: "1.25" VarietyTotal: - type: object - description: The VarietyTotal associated with this FieldOperation. + type: "object" + description: "The VarietyTotal associated with this FieldOperation." properties: - '@type': - type: string - example: VarietyTotal + "@type": + type: "string" + example: "VarietyTotal" varietyId: - type: string - format: guid - example: '3df13267-c5ee-4cc3-ab79-7cf013dc1e98' + type: "string" + format: "guid" + example: "3df13267-c5ee-4cc3-ab79-7cf013dc1e98" name: - type: string - example: 2D351 + type: "string" + example: "2D351" brand: - type: string - example: 'Mycogen Corp.' + type: "string" + example: "Mycogen Corp." area: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" yield: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageYield: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageMoisture: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" wetMass: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageWetMass: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" harvestLabAccumulatedWetMass: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" totalMaterial: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageMaterial: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageTrash: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageAcidDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageNeutralDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageStarch: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageCrudeProtein: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" averageSugar: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxAcidDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxNeutralDetergentFiber: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxStarch: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxCrudeProtein: - $ref: '#/components/schemas/EventMeasurement' + $ref: "#/components/schemas/EventMeasurement" maxSugar: - $ref: '#/components/schemas/EventMeasurement' - - Errors: - type: array - items: - $ref: '#/components/schemas/Error' - - Error: - type: object - properties: - guid: - type: string - format: guid - example: 11111111-2222-3333-4444-555555555555 - message: - type: string - description: An english description of the error - example: was invalid because - code: - type: string - description: A string constant representing the type of error - example: 400 - field: - type: string - description: The name of the property or parameter deemed invalid - example: example-field - invalidValue: - type: string - description: The value that was supplied for this field in the request - example: Bad value - FieldOperationSearchErrors: - type: object - format: Errors/FieldOperationContextException - properties: - guid: - type: string - format: guid - example: 17826sd23-e5e1-4921-8841-3c5f582e3a2e - message: - type: string - description: The value that was supplied for this field in the request - example: 'invalid/unsupported geojson' - errors: - type: array - items: - type: object - format: Error/ConstraintViolation - example: {message: 'this_part_of_the_request_was_wrong'} - properties: - message: - type: string - description: The value that was supplied for this field in the request - example: 'invalid/unsupported geojson' - - FieldOperationsSearch: - type: object - properties: - fieldIds: - type: array - items: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d - fieldOperationTypes: - type: array - items: - $ref: '#/components/schemas/FieldOperationTypesEnum' - cropTypes: - type: array - items: - $ref: '#/components/schemas/CropToken' - displayTypes: - type: array - items: - $ref: '#/components/schemas/DisplayTypeEnum' - startDate: - type: string - format: date-time - description: The starting date of the operation in ISO-8601 format. - example: '2018-08-27T08:08:08.000Z' - x-zally-ignore: [D010] - endDate: - type: string - format: date-time - description: The ending date of the operation in ISO-8601 format. - example: '2019-08-27T08:08:08.000Z' - x-zally-ignore: [D010] - embed: - type: array - items: - type: string - enum: - - client - - farm - - field - - fieldOperationMachines - - measurementTypes - - ProductErid: - type: string - description: Recorded Product Erid. - example: fa14f029-831c-456b-a76e-2d3c26207c19 - - NameToEridEdit: - type: object - description: Describes an edit that should change the id of any object that matches the name - properties: - fromName: - type: string - description: The name to match against - example: 'Variety A' - toGuid: - $ref: '#/components/schemas/ProductErid' - - EridToEridEdit: - type: object - description: Describes an edit that should change the id of any object that matches the fromGuid - properties: - fromGuid: - $ref: '#/components/schemas/ProductErid' - toGuid: - $ref: '#/components/schemas/ProductErid' - - FieldOperationLayers: - type: array - description: Describe an reponse of operaton layers - items: - $ref: '#/components/schemas/FieldOperationLayer' - - FieldOperationLayer: - type: object - required: - - id - properties: - '@type': - type: string - example: FieldOperationLayer - id: - $ref: '#/components/schemas/FieldOperationLayersEnum' - links: - type: array - items: - $ref: '#/components/schemas/Link' + $ref: "#/components/schemas/EventMeasurement" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag2: "ag2" +x-source-documents: + - endPointName: "field-operation" + id: 27 + - endPointName: "measurement-type" + id: 28 diff --git a/specs/raw/fields.yaml b/specs/raw/fields.yaml index 47eec73..ec4fa10 100644 --- a/specs/raw/fields.yaml +++ b/specs/raw/fields.yaml @@ -1,56 +1,77 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - title: Fields API - version: '3.0' + title: "Fields API" + version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: + /organizations/{orgID}/fields/{id}/clients: + get: + description: "View details about the client that owns the field. The response will link to the following resources:
          • fields: View the field the client belongs to.
          • farms: View the farms belonging to the client.
          • owningOrganization: View the org that owns the field.
          " + summary: "View Clients that Own a Field" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/X-deere-signature" + responses: + "200": + $ref: "#/components/responses/getFieldResponse" /organizations/{orgId}/fields: get: - summary: Retrieve all of the Fields for an Organization - description: Retrieve all of the Fields for an Organization + summary: "Retrieve all of the Fields for an Organization" + description: "Retrieve all of the Fields for an Organization" parameters: - - $ref: '#/components/parameters/ClientName' - - $ref: '#/components/parameters/FarmName' - - $ref: '#/components/parameters/FieldName' - - $ref: '#/components/parameters/FieldsEmbed' - - $ref: '#/components/parameters/recordFilter' - - $ref: '#/components/parameters/UnitOfMeasureHeader' - - $ref: '#/components/parameters/OrgId' + - $ref: "#/components/parameters/ClientName" + - $ref: "#/components/parameters/FarmName" + - $ref: "#/components/parameters/FieldName" + - $ref: "#/components/parameters/FieldsEmbed" + - $ref: "#/components/parameters/recordFilter" + - $ref: "#/components/parameters/UnitOfMeasureHeader" + - $ref: "#/components/parameters/OrgId" responses: - 200: - $ref: '#/components/responses/FieldsReturned' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgNotFound' + "200": + $ref: "#/components/responses/FieldsReturned" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgNotFound" post: parameters: - - $ref: '#/components/parameters/OrgId' - summary: Create field for an Organization - description: | - This API is used to create a new field resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization. The client and farm names in the request body may be either new or existing names. + - $ref: "#/components/parameters/OrgId" + summary: "Create field for an Organization" + description: "This API is used to create a new field resource within the target organization. In order to do this, the authenticated user must have Locations Level 3 permission within the target organization. The client and farm names in the request body may be either new or existing names. + This is to support the following scenarios: - * adding a new field to an existing client/farm - * adding a new farm and field to an existing client - * adding a brand new client/farm/field + + \ * adding a new field to an existing client/farm + + \ * adding a new farm and field to an existing client + + \ * adding a brand new client/farm/field + Client-specified identifiers: - * An identifier may be specified for the new field - * An identifier may be specified for new clients/farms - * If associating to an existing client/farm, the existing guids may be specified in place of the name - Note: All fields are created with an 'available' status. + \ * An identifier may be specified for the new field + + \ * An identifier may be specified for new clients/farms + + \ * If associating to an existing client/farm, the existing guids may be specified in place of the name + + Note: All fields are created with an 'available' status.\n" requestBody: required: true content: @@ -58,67 +79,67 @@ paths: examples: Create new field (Existing farm and client): value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - id: ExistingFarmId + - id: "ExistingFarmId" clients: clients: - - id: ExistingClientId + - id: "ExistingClientId" Create new field and farm (Existing client): value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - name: UniqueFarmName + - name: "UniqueFarmName" clients: clients: - - id: ExistingClientId + - id: "ExistingClientId" Create new field, farm and client: value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - name: UniqueFarmName + - name: "UniqueFarmName" clients: clients: - - name: UniqueClientName + - name: "UniqueClientName" schema: - $ref: '#/components/requestBodies/ASingleField' + $ref: "#/components/requestBodies/ASingleField" responses: - 201: - $ref: '#/components/responses/Created' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgNotFound' - 400: - $ref: '#/components/responses/ValidationErrorForCreate' + "201": + $ref: "#/components/responses/Created" + "400": + $ref: "#/components/responses/ValidationErrorForCreate" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgNotFound" /organizations/{orgId}/fields/{fieldId}: get: - summary: Get field by organization and fieldId - description: Get field by organization and fieldId + summary: "Get field by organization and fieldId" + description: "Get field by organization and fieldId" parameters: - - $ref: '#/components/parameters/FieldEmbed' - - $ref: '#/components/parameters/UnitOfMeasureHeader' - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' + - $ref: "#/components/parameters/FieldEmbed" + - $ref: "#/components/parameters/UnitOfMeasureHeader" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" responses: - 200: - $ref: '#/components/responses/FieldReturned' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgOrFieldNotFound' + "200": + $ref: "#/components/responses/FieldReturned" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgOrFieldNotFound" put: parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - summary: Update field - description: Update the field name, the archived status, or the associated client or farm. If the client and/or farm does not exist, it will be created. + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + summary: "Update field" + description: "Update the field name, the archived status, or the associated client or farm. If the client and/or farm does not exist, it will be created." requestBody: required: true content: @@ -126,1307 +147,1356 @@ paths: examples: Create new field (Existing farm and client): value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - id: ExistingFarmId + - id: "ExistingFarmId" clients: clients: - - id: ExistingClientId + - id: "ExistingClientId" Create new field and farm (Existing client): value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - name: UniqueFarmName + - name: "UniqueFarmName" clients: clients: - - id: ExistingClientId + - id: "ExistingClientId" Create new field, farm and client: value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - name: UniqueFarmName + - name: "UniqueFarmName" clients: clients: - - name: UniqueClientName + - name: "UniqueClientName" schema: - $ref: '#/components/requestBodies/ASingleField' + $ref: "#/components/requestBodies/ASingleField" responses: - 204: - $ref: '#/components/responses/Updated' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgOrFieldNotFound' - 400: - $ref: '#/components/responses/ValidationErrorForUpdate' + "204": + $ref: "#/components/responses/Updated" + "400": + $ref: "#/components/responses/ValidationErrorForUpdate" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgOrFieldNotFound" delete: parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - summary: Delete Field by organization and fieldId - description: Delete Field by organization and fieldId + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + summary: "Delete Field by organization and fieldId" + description: "Delete Field by organization and fieldId" responses: - 204: - $ref: '#/components/responses/Deleted' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgOrFieldNotFound' + "204": + $ref: "#/components/responses/Deleted" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgOrFieldNotFound" /organizations/{orgId}/fields/{fieldId}/farms: get: - summary: Get Farm by organization and fieldId - description: | - This api is designed to get farms within an organization and for provided fieldId - parameters: - - $ref: '#/components/parameters/FieldEmbed' - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - responses: - 200: - $ref: '#/components/responses/FarmsReturned' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/OrgOrFieldNotFound' - /organizations/{orgID}/fields/{id}/clients: - get: - description: 'View details about the client that owns the field. The response will link to the following resources:
          -
          • fields: View the field the client belongs to.
          • -
          • farms: View the farms belonging to the client.
          • -
          • owningOrganization: View the org that owns the field.
          ' - summary: View Clients that Own a Field - security: - - OAuth2: [ ag1 ] + summary: "Get Farm by organization and fieldId" + description: "This api is designed to get farms within an organization and for provided fieldId\n" parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/FieldEmbed" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" responses: - 200: - $ref: '#/components/responses/getFieldResponse' + "200": + $ref: "#/components/responses/FarmsReturned" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/OrgOrFieldNotFound" components: + examples: + getFieldNoEmbed: + value: + "@type": "Field" + name: "---" + id: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + - "@type": "Link" + rel: "clients" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients" + - "@type": "Link" + rel: "notes" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes" + - "@type": "Link" + rel: "farms" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457" + - "@type": "Link" + rel: "boundaries" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" + - "@type": "Link" + rel: "simplifiedBoundaries" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true" + - "@type": "Link" + rel: "addBoundary" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" + - "@type": "Link" + rel: "activeBoundary" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries/a34bfb73-7a36-4d93-9a24-9814a86f0f5d" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations" + - "@type": "Link" + rel: "guidanceLines" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" + - "@type": "Link" + rel: "addGuidanceTrack" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" + - "@type": "Link" + rel: "deleteField" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + - "@type": "Link" + rel: "editField" + uri: "https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + getFieldsNoEmbed: + value: "{ + + \ \"links\":[ + + \ { + + \ \"rel\":\"self\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields\" + + \ }, + + \ { + + \ \"rel\":\"nextPage\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields;start=10;count=10\" + + \ } + + \ ], + + \ \"total\":1, + + \ \"values\":[ + + \ { + + \ \"@type\":\"Field\", + + \ \"name\":\"---\", + + \ \"id\":\"9369f3f6-2428-4bba-bf64-0a19cdaf007d\", + + \ \"links\":[ + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"self\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"clients\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"notes\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"farms\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"owningOrganization\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"boundaries\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"simplifiedBoundaries\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"addBoundary\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"fieldOperation\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"guidanceLines\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"addGuidanceTrack\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"deleteField\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" + + \ }, + + \ { + + \ \"@type\":\"Link\", + + \ \"rel\":\"editField\", + + \ \"uri\":\"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d\" + + \ } + + \ ] + + \ } + + \ ] + + }\n" parameters: - OrgId: - in: path - name: orgId - description: The ID of the organization - required: true - schema: - type: integer - format: int64 - X-deere-signature: - name: x-deere-signature - in: header - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. - schema: - type: string - example: 9r8392615e4b4e1c92018026f47109bb ClientName: - in: query - name: clientName - description: client name + in: "query" + name: "clientName" + description: "client name" + required: false + schema: + type: "string" + ContextOrganizationId: + in: "query" + name: "contextOrganizationId" + description: "Context Organization ID" required: false schema: - type: string + type: "string" FarmName: - in: query - name: farmName - description: farm name + in: "query" + name: "farmName" + description: "farm name" required: false schema: - type: string - FieldName: - in: query - name: fieldName - description: field name + type: "string" + FieldEmbed: + in: "query" + name: "embed" + description: "list of objects to include" required: false schema: - type: string - recordFilter: - in: query - name: recordFilter - description: Filters by resource state (whether or not the resource is archived) + type: "array" + items: + type: "string" + enum: + - "farms" + - "clients" + - "guidanceLines" + - "accessPoints" + FieldId: + in: "path" + name: "fieldId" + description: "field guid" + required: true + schema: + type: "string" + FieldName: + in: "query" + name: "fieldName" + description: "field name" required: false schema: - type: string - enum: - - AVAILABLE - - ARCHIVED - - ALL - default: AVAILABLE + type: "string" FieldsEmbed: - in: query - name: embed - description: list of objects to include + in: "query" + name: "embed" + description: "list of objects to include" required: false schema: - type: array + type: "array" items: - type: string + type: "string" enum: - - farms - - clients - - boundaries - - activeBoundary - - simplifiedBoundaries - - guidanceLines - - accessPoints - - notes - FieldEmbed: - in: query - name: embed - description: list of objects to include - required: false + - "farms" + - "clients" + - "boundaries" + - "activeBoundary" + - "simplifiedBoundaries" + - "guidanceLines" + - "accessPoints" + - "notes" + OrgId: + in: "path" + name: "orgId" + description: "The ID of the organization" + required: true schema: - type: array - items: - type: string - enum: - - farms - - clients - - guidanceLines - - accessPoints - ContextOrganizationId: - in: query - name: contextOrganizationId - description: Context Organization ID + type: "integer" + format: "int64" + UnitOfMeasureHeader: + in: "header" + name: "Accept-UOM-System" + description: "Indicates a preference for returned measurements to be in English vs Metric" required: false schema: - type: string - FieldId: - in: path - name: fieldId - description: field guid - required: true + type: "string" + enum: + - "METRIC" + - "ENGLISH" + default: "METRIC" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: string - UnitOfMeasureHeader: - in: header - name: Accept-UOM-System - description: Indicates a preference for returned measurements to be in English vs Metric + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" + recordFilter: + in: "query" + name: "recordFilter" + description: "Filters by resource state (whether or not the resource is archived)" required: false schema: - type: string + type: "string" enum: - - METRIC - - ENGLISH - default: METRIC - + - "AVAILABLE" + - "ARCHIVED" + - "ALL" + default: "AVAILABLE" requestBodies: ASingleField: - $ref: '#/components/schemas/CreateUpdateField' + $ref: "#/components/schemas/CreateUpdateField" FieldGuidSearches: required: true content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldGuidSearches' - + $ref: "#/components/schemas/FieldGuidSearches" responses: + Created: + description: "Field successfully created" + headers: + Location: + schema: + type: "string" + format: "uri" + description: "The uri of the newly created resource" + Deleted: + description: "Field deleted. If the client and farm has only this field the client and farm will be deleted" + content: + application/vnd:deere:axiom:v3+json: + examples: + Headers: + description: "204 No Content" + DoesNotHaveAccessToOrg: + description: "Invalid access to organization" FarmsReturned: - description: Array of farms + description: "Array of farms" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/GetFarms' + $ref: "#/components/schemas/GetFarms" examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json
          - x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/fields/c36a7ed3-3b96-4112-986d-a5760e871d2e/farms + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/fields/c36a7ed3-3b96-4112-986d-a5760e871d2e/farms" total: 1 values: - - type: Farm - name: farmName + - type: "Farm" + name: "farmName" archived: false - clientUri: https://sandboxapi.deere.com/platform/organizations/592711/clients/061c0fb9-533-4537-9eaa-a4ed0bc13500 + clientUri: "https://sandboxapi.deere.com/platform/organizations/592711/clients/061c0fb9-533-4537-9eaa-a4ed0bc13500" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e - FieldsReturned: - description: Array of fields containing links related to fields + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" + FieldReturned: + description: "Success" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldsResponse' + $ref: "#/components/schemas/FieldResponse" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392615e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: + "@type": "Field" + name: "01" + archived: false + id: "d61b83f4-3a12-431e-8010-596f2466dc27" + lastModifiedTime: "2020-09-21T15:41:15.205Z" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/123456/fields - total: 1 - values: - - '@type': Field - name: '01' - archived: false - id: d61b83f4-3a12-431e-8010-596f2466dc27 - lastModifiedTime: 2020-09-21T15:41:15.205Z - links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - - '@type': Link - rel: clients - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/clients - - '@type': Link - rel: notes - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes - - '@type': Link - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/farms - - '@type': Link - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: boundaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries - - '@type': Link - rel: simplifiedBoundaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true - - '@type': Link - rel: activeBoundary - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - /boundaries/e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d - - '@type': Link - rel: fieldOperation - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - /fieldOperations - - '@type': Link - rel: mapLayerSummaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries - - '@type': Link - rel: contributionDefinition - uri: >- - https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - getFieldResponse: - description: Get Field by client Id + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "clients" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/clients" + - "@type": "Link" + rel: "notes" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" + - "@type": "Link" + rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc2/farms" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries" + - "@type": "Link" + rel: "simplifiedBoundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" + - "@type": "Link" + rel: "activeBoundary" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries/e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" + - "@type": "Link" + rel: "mapLayerSummaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" + - "@type": "Link" + rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" + FieldsReturned: + description: "Array of fields containing links related to fields" content: application/vnd.deere.axiom.v3+json: schema: - properties: - links: - type: array - items: - $ref: '#/components/schemas/GroupLink' - total: - type: integer - example: 1 - format: int32 - values: - type: array - items: - $ref: '#/components/schemas/FieldResponse' + $ref: "#/components/schemas/FieldsResponse" examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json
          - x-deere-signature: 5a5392615e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields" total: 1 values: - - name: Aslan + - "@type": "Field" + name: "01" + archived: false + id: "d61b83f4-3a12-431e-8010-596f2466dc27" + lastModifiedTime: "2020-09-21T15:41:15.205Z" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e - - rel: fields - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields - - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/6789 - id: f1161eba-7c82-4a80-9eeb-383451b4c46e - + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27" + - "@type": "Link" + rel: "clients" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/clients" + - "@type": "Link" + rel: "notes" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" + - "@type": "Link" + rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/farms" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "boundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries" + - "@type": "Link" + rel: "simplifiedBoundaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" + - "@type": "Link" + rel: "activeBoundary" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 /boundaries/e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d" + - "@type": "Link" + rel: "fieldOperation" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 /fieldOperations" + - "@type": "Link" + rel: "mapLayerSummaries" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" + - "@type": "Link" + rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" FieldsReturnedWithPartialSuccessHeader: - description: Array of fields with header for partial success. + description: "Array of fields with header for partial success." headers: FIELDS-NOT-FOUND: schema: - type: string - format: array - example: [9369f3f6-2428-492a-bf64-0a19cdaf007d, 8759f3f6-2428-434a-bf64-0a19cdaf0236] - description: A string list of fieldIds requested which were not returned - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/FieldsResponse' - FieldReturned: - description: Success + type: "string" + format: "array" + example: + - "9369f3f6-2428-492a-bf64-0a19cdaf007d" + - "8759f3f6-2428-434a-bf64-0a19cdaf0236" + description: "A string list of fieldIds requested which were not returned" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldResponse' - examples: - No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' - value: - '@type': Field - name: '01' - archived: false - id: d61b83f4-3a12-431e-8010-596f2466dc27 - lastModifiedTime: 2020-09-21T15:41:15.205Z - links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 - - '@type': Link - rel: clients - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/clients - - '@type': Link - rel: notes - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes - - '@type': Link - rel: farms - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc2/farms - - '@type': Link - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - '@type': Link - rel: boundaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries - - '@type': Link - rel: simplifiedBoundaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true - - '@type': Link - rel: activeBoundary - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries/e7ab3a06-06ca-4d34-8cb7-6fd2a3640a3d - - '@type': Link - rel: fieldOperation - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations - - '@type': Link - rel: mapLayerSummaries - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries - - '@type': Link - rel: contributionDefinition - uri: >- - https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - DoesNotHaveAccessToOrg: - description: Invalid access to organization + $ref: "#/components/schemas/FieldsResponse" OrgNotFound: - description: Organization not found + description: "Organization not found" OrgOrFieldNotFound: - description: Organization or Field not found - Created: - description: Field successfully created - headers: - Location: - schema: - type: string - format: uri - description: The uri of the newly created resource - + description: "Organization or Field not found" Updated: - description: Field successfully updated + description: "Field successfully updated" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/FieldsPost' + $ref: "#/components/schemas/FieldsPost" examples: Update field (Existing farm and client): value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - id: ExistingFarmId + - id: "ExistingFarmId" clients: clients: - - id: ExistingClientId + - id: "ExistingClientId" Update field and create farm (Existing client): value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - name: UniqueFarmName + - name: "UniqueFarmName" clients: clients: - - id: ExistingClientId + - id: "ExistingClientId" Update field, create new farm and client: value: - name: UniqueFieldName + name: "UniqueFieldName" archived: false farms: farms: - - name: UniqueFarmName + - name: "UniqueFarmName" clients: clients: - - name: UniqueClientName - Deleted: - description: Field deleted. If the client and farm has only this field the client and farm will be deleted + - name: "UniqueClientName" + ValidationErrorForCreate: + description: "The possible errors are: + + \ * CFF_CLIENT_ID_ALREADY_EXISTS + + \ * CFF_BAD_CLIENT_ID + + \ * CFF_CLIENT_ID_NAME_CONFLICT + + \ * CFF_CLIENT_ID_NOT_FOUND + + \ * CFF_CLIENT_NAME_ALREADY_EXISTS + + \ * CFF_EMPTY_CLIENT_NAME + + \ * CFF_CLIENT_NAME_EXCEEDS_255_CHARS + + \ * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT + + \ * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT + + \ * CFF_FARM_ID_ALREADY_EXISTS + + \ * CFF_BAD_FARM_ID + + \ * CFF_FARM_ID_NAME_CONFLICT + + \ * CFF_FARM_ID_NOT_FOUND + + \ * CFF_FARM_NAME_ALREADY_EXISTS + + \ * CFF_EMPTY_FARM_NAME + + \ * CFF_FARM_NAME_EXCEEDS_255_CHARS + + \ * CFF_ALREADY_EXISTS_ACTIVE + + \ * CFF_ALREADY_EXISTS_ARCHIVED + + \ * CFF_ALREADY_EXISTS_MERGED + + \ * CFF_FIELD_ID_ALREADY_EXISTS + + \ * CFF_BAD_FIELD_ID + + \ * CFF_FIELD_NAME_ALREADY_EXISTS + + \ * CFF_EMPTY_FIELD_NAME + + \ * CFF_FIELD_NAME_EXCEEDS_255_CHARS + + \ * CFF_MISSING_REQUEST_BODY + + \ * CFF_OUTDATED_REQUEST + + \ * CFF_USER_LAST_MODIFIED_CLIPPED\n" + ValidationErrorForUpdate: + description: "The possible errors are: + + \ * CFF_CLIENT_ID_ALREADY_EXISTS + + \ * CFF_BAD_CLIENT_ID + + \ * CFF_CLIENT_ID_NAME_CONFLICT + + \ * CFF_CLIENT_ID_NOT_FOUND + + \ * CFF_CLIENT_NAME_ALREADY_EXISTS + + \ * CFF_EMPTY_CLIENT_NAME + + \ * CFF_CLIENT_NAME_EXCEEDS_255_CHARS + + \ * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT + + \ * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT + + \ * CFF_FARM_ID_ALREADY_EXISTS + + \ * CFF_BAD_FARM_ID + + \ * CFF_FARM_ID_NAME_CONFLICT + + \ * CFF_FARM_ID_NOT_FOUND + + \ * CFF_FARM_NAME_ALREADY_EXISTS + + \ * CFF_EMPTY_FARM_NAME + + \ * CFF_FARM_NAME_EXCEEDS_255_CHARS + + \ * CFF_ALREADY_EXISTS_ACTIVE + + \ * CFF_ALREADY_EXISTS_ARCHIVED + + \ * CFF_ALREADY_EXISTS_MERGED + + \ * CFF_FIELD_ID_ALREADY_EXISTS + + \ * CFF_BAD_FIELD_ID + + \ * CFF_FIELD_NAME_ALREADY_EXISTS + + \ * CFF_EMPTY_FIELD_NAME + + \ * CFF_FIELD_NAME_EXCEEDS_255_CHARS + + \ * CFF_MISSING_REQUEST_BODY + + \ * CFF_OUTDATED_REQUEST + + \ * CFF_USER_LAST_MODIFIED_CLIPPED\n" + getFieldResponse: + description: "Get Field by client Id" content: - application/vnd:deere:axiom:v3+json: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GroupLink" + total: + type: "integer" + example: 1 + format: "int32" + values: + type: "array" + items: + $ref: "#/components/schemas/FieldResponse" examples: - Headers: - description: '204 No Content' - ValidationErrorForUpdate: - description: | - The possible errors are: - * CFF_CLIENT_ID_ALREADY_EXISTS - * CFF_BAD_CLIENT_ID - * CFF_CLIENT_ID_NAME_CONFLICT - * CFF_CLIENT_ID_NOT_FOUND - * CFF_CLIENT_NAME_ALREADY_EXISTS - * CFF_EMPTY_CLIENT_NAME - * CFF_CLIENT_NAME_EXCEEDS_255_CHARS - * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT - * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT - * CFF_FARM_ID_ALREADY_EXISTS - * CFF_BAD_FARM_ID - * CFF_FARM_ID_NAME_CONFLICT - * CFF_FARM_ID_NOT_FOUND - * CFF_FARM_NAME_ALREADY_EXISTS - * CFF_EMPTY_FARM_NAME - * CFF_FARM_NAME_EXCEEDS_255_CHARS - * CFF_ALREADY_EXISTS_ACTIVE - * CFF_ALREADY_EXISTS_ARCHIVED - * CFF_ALREADY_EXISTS_MERGED - * CFF_FIELD_ID_ALREADY_EXISTS - * CFF_BAD_FIELD_ID - * CFF_FIELD_NAME_ALREADY_EXISTS - * CFF_EMPTY_FIELD_NAME - * CFF_FIELD_NAME_EXCEEDS_255_CHARS - * CFF_MISSING_REQUEST_BODY - * CFF_OUTDATED_REQUEST - * CFF_USER_LAST_MODIFIED_CLIPPED - ValidationErrorForCreate: - description: | - The possible errors are: - * CFF_CLIENT_ID_ALREADY_EXISTS - * CFF_BAD_CLIENT_ID - * CFF_CLIENT_ID_NAME_CONFLICT - * CFF_CLIENT_ID_NOT_FOUND - * CFF_CLIENT_NAME_ALREADY_EXISTS - * CFF_EMPTY_CLIENT_NAME - * CFF_CLIENT_NAME_EXCEEDS_255_CHARS - * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT - * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT - * CFF_FARM_ID_ALREADY_EXISTS - * CFF_BAD_FARM_ID - * CFF_FARM_ID_NAME_CONFLICT - * CFF_FARM_ID_NOT_FOUND - * CFF_FARM_NAME_ALREADY_EXISTS - * CFF_EMPTY_FARM_NAME - * CFF_FARM_NAME_EXCEEDS_255_CHARS - * CFF_ALREADY_EXISTS_ACTIVE - * CFF_ALREADY_EXISTS_ARCHIVED - * CFF_ALREADY_EXISTS_MERGED - * CFF_FIELD_ID_ALREADY_EXISTS - * CFF_BAD_FIELD_ID - * CFF_FIELD_NAME_ALREADY_EXISTS - * CFF_EMPTY_FIELD_NAME - * CFF_FIELD_NAME_EXCEEDS_255_CHARS - * CFF_MISSING_REQUEST_BODY - * CFF_OUTDATED_REQUEST - * CFF_USER_LAST_MODIFIED_CLIPPED + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 5a5392615e4b4e1c92013026f47109bb" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/fields/a7cb723f-6707-46fb-a9ff-4e734e3daf58/clients" + total: 1 + values: + - name: "Aslan" + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e" + - rel: "fields" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/fields" + - rel: "farms" + uri: "https://sandboxapi.deere.com/platform/organizations/6789/clients/f1161eba-7c82-4a80-9eeb-383451b4c46e/farms" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/6789" + id: "f1161eba-7c82-4a80-9eeb-383451b4c46e" schemas: - FieldsResponse: - type: object + ABLine: + type: "object" + properties: + "@Type": + type: "string" + example: "AbLine" + heading: + type: "number" + example: 356.5847091769351 + aPoint: + $ref: "#/components/schemas/Point" + AccessPoint: + type: "object" properties: + id: + type: "string" + format: "uri" + description: + type: "string" + direction: + type: "string" + isEntry: + type: "boolean" + isExit: + type: "boolean" + location: + $ref: "#/components/schemas/Point" + name: + type: "string" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - totals: - type: integer - values: - type: array + $ref: "#/components/schemas/Link" + Author: + type: "object" + properties: + "@Type": + type: "string" + example: "User" + accountName: + type: "string" + example: "scoutcarla1" + givenName: + type: "string" + example: "scoutcarla1" + familyName: + type: "string" + example: "scoutcarla1" + Boundary: + type: "object" + properties: + "@Type": + type: "string" + example: "Boundary" + name: + type: "string" + example: "Auto-Generated 2014 Harvest" + sourceType: + type: "string" + example: "Auto" + modifiedTime: + type: "string" + format: "date-time" + example: "2016-11-17T11:53:00.000Z" + area: + $ref: "#/components/schemas/MeasurementAsDouble" + workableArea: + $ref: "#/components/schemas/MeasurementAsDouble" + multipolygons: + type: "array" + items: + $ref: "#/components/schemas/Polygon" + extent: + $ref: "#/components/schemas/Extent" + id: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + active: + type: "boolean" + description: "Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries." + irrigated: + type: "boolean" + description: "Indicates whether the contained area is irrigated" + Client: + type: "object" + properties: + "@Type": + type: "string" + example: "Client" + name: + type: "string" + example: "---" + id: + type: "string" + format: "uri" + example: "68b887c7-1ac2-40a4-b70b-117a8ec34abf" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + Clients: + type: "object" + properties: + "@Type": + type: "string" + example: "Clients" + clients: + type: "array" + items: + $ref: "#/components/schemas/Client" + CreateUpdateClient: + type: "object" + properties: + "@Type": + type: "string" + example: "Client" + name: + type: "string" + example: "SouthEast End_Client" + CreateUpdateFarm: + type: "object" + properties: + "@Type": + type: "string" + example: "Farm" + name: + type: "string" + example: "SouthEast End" + CreateUpdateField: + description: "Place holder for Matt to create the field object to be created or updated." + type: "object" + properties: + "@Type": + type: "string" + example: "Field" + name: + type: "string" + example: "Land_Demo_1" + archived: + type: "boolean" + example: true + Farms: + type: "object" + properties: + "@Type": + type: "string" + example: "Farms" + farms: + type: "array" + items: + $ref: "#/components/schemas/CreateUpdateFarm" + Clients: + type: "object" + properties: + "@Type": + type: "string" + example: "Clients" + clients: + type: "array" + items: + $ref: "#/components/schemas/CreateUpdateClient" + Extent: + type: "object" + properties: + "@Type": + type: "string" + example: "Extent" + topLeft: + $ref: "#/components/schemas/Point" + bottomRight: + $ref: "#/components/schemas/Point" + Farm: + type: "object" + properties: + "@Type": + type: "string" + example: "Farm" + name: + type: "string" + example: "---" + id: + type: "string" + format: "uri" + example: "1efb4de1-fe41-42bc-bbb3-d128a432cafd" + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + Farms: + type: "object" + properties: + "@Type": + type: "string" + example: "Farms" + farms: + type: "array" + items: + $ref: "#/components/schemas/Farm" + FieldGuidSearches: + type: "object" + properties: + "@Type": + type: "string" + example: "FieldGuidSearches" + fieldIds: + type: "array" + items: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + clientName: + type: "string" + example: "client" + farmName: + type: "string" + example: "farm" + fieldName: + type: "string" + example: "field" + embeds: + type: "array" items: - $ref: '#/components/schemas/FieldResponse' + type: "string" + enum: + - "farms" + - "clients" + - "boundaries" + - "activeBoundary" + - "simplifiedBoundaries" + - "metadataOnlyBoundaries" + - "guidanceLines" + - "shapes" + - "accessPoints" + - "notes" + status: + type: "string" + enum: + - "AVAILABLE" + - "ARCHIVED" + - "ALL" FieldResponse: - type: object + type: "object" properties: - '@Type': - type: string - example: Field + "@Type": + type: "string" + example: "Field" name: - type: string - example: --- + type: "string" + example: "---" farms: - $ref: '#/components/schemas/Farms' + $ref: "#/components/schemas/Farms" clients: - $ref: '#/components/schemas/Clients' + $ref: "#/components/schemas/Clients" boundaries: - type: array + type: "array" items: - $ref: '#/components/schemas/Boundary' + $ref: "#/components/schemas/Boundary" accessPoints: - type: array + type: "array" items: - $ref: '#/components/schemas/AccessPoint' + $ref: "#/components/schemas/AccessPoint" minItems: 0 guidanceLines: - type: array + type: "array" items: - $ref: '#/components/schemas/GuidanceLines' + $ref: "#/components/schemas/GuidanceLines" minItems: 0 archived: - type: boolean + type: "boolean" example: true flags: - type: array + type: "array" items: - $ref: '#/components/schemas/Flag' + $ref: "#/components/schemas/Flag" minItems: 0 id: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - Farms: - type: object - properties: - '@Type': - type: string - example: Farms - farms: - type: array - items: - $ref: '#/components/schemas/Farm' - Farm: - type: object + $ref: "#/components/schemas/Link" + FieldsPost: properties: - '@Type': - type: string - example: Farm name: - type: string - example: --- - id: - type: string - format: uri - example: 1efb4de1-fe41-42bc-bbb3-d128a432cafd + example: "UniqueFieldName" + type: "string" + description: "New Field Name" + archived: + example: "false" + type: "string" + description: "Archived status (false = active)" + farms.name: + example: "FarmName" + type: "string" + description: "Existing or Unique (new) farm name" + farms.id: + example: "e61b83f4-3a12-431e-8010-596f2466dc27" + type: "GUID" + description: "Farm ID" + clients.name: + example: "ClientName" + type: "string" + description: "Existing or Unique (new) client name" + clients.id: + example: "e61b83f4-3a12-431e-8010-596f2466dc27" + type: "GUID" + description: "Client ID" + FieldsResponse: + type: "object" + properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - CreateUpdateFarm: - type: object - properties: - '@Type': - type: string - example: Farm - name: - type: string - example: SouthEast End - Clients: - type: object - properties: - '@Type': - type: string - example: Clients - clients: - type: array + $ref: "#/components/schemas/Link" + totals: + type: "integer" + values: + type: "array" items: - $ref: '#/components/schemas/Client' - Client: - type: object + $ref: "#/components/schemas/FieldResponse" + Flag: + type: "object" properties: - '@Type': - type: string - example: Client - name: - type: string - example: --- + "@Type": + type: "string" + example: "GenericNote" + createdDate: + type: "string" + format: "date-time" + example: "2016-08-19T18:48:48.886Z" + lastModifiedDate: + type: "string" + format: "date-time" + example: "2016-08-19T18:48:48.886Z" + text: + type: "string" + example: "some text" + metadata: + type: "array" + items: + $ref: "#/components/schemas/MetaData" + author: + type: "array" + items: + $ref: "#/components/schemas/Author" + geometry: + $ref: "#/components/schemas/Geometry" + noteType: + type: "string" + example: "SCOUT" id: - type: string - format: uri - example: 68b887c7-1ac2-40a4-b70b-117a8ec34abf + type: "string" + format: "uri" + example: "4e7a1fa7-9db9-45ea-94d3-e45b2fa43c2a" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - GroupLink: - description: Link to another resource - type: object + $ref: "#/components/schemas/Link" + Geometry: + type: "object" properties: - boundaries: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/boundaries - description: Boundaries Link. - clients: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/clients - description: Clients Link. - farms: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/farms - description: Farms Link. - owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/123456 - description: Organizations Link. - notes: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes - description: Notes Link. - simplifiedBoundaries: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true - description: Boundaries Link. - fieldOperation: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations - description: Field Operations Link. - mapLayerSummaries: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries - description: Map Layer Summaries Link. - contributionDefinition: - example: https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - description: Contribution Definition Link - FieldsPost: + coordinates: + type: "array" + items: + type: "string" + example: "-93.76592004432253, 41.643866385621365" + type: + type: "string" + example: "Point" + GetFarm: + type: "object" properties: + "@type": + type: "string" + example: "Farm" name: - example: UniqueFieldName - type: string - description: New Field Name + type: "string" + example: "John Doe" + id: + type: "string" + format: "uuid" + example: "9369f3f6-2428-4bba-bf64-0a19cdaf007d" + readOnly: true archived: - example: 'false' - type: string - description: Archived status (false = active) - farms.name: - example: FarmName - type: string - description: Existing or Unique (new) farm name - farms.id: - example: e61b83f4-3a12-431e-8010-596f2466dc27 - type: GUID - description: Farm ID - clients.name: - example: ClientName - type: string - description: Existing or Unique (new) client name - clients.id: - example: e61b83f4-3a12-431e-8010-596f2466dc27 - type: GUID - description: Client ID + type: "boolean" + example: false + clientUri: + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c" + links: + type: "array" + readOnly: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + rel: + type: "string" + example: "self" + uri: + type: "string" + example: "https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d" GetFarms: - type: object + type: "object" properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" links: - type: array + type: "array" items: - type: object + type: "object" properties: rel: - type: string - example: self + type: "string" + example: "self" uri: - type: string - description: Platform uri to fetch farm details - example: https://sandboxapi.deere.com/platform/organizations/5555/fields/222/farms + type: "string" + description: "Platform uri to fetch farm details" + example: "https://sandboxapi.deere.com/platform/organizations/5555/fields/222/farms" values: - type: array - items: - $ref: '#/components/schemas/GetFarm' - CreateUpdateClient: - type: object - properties: - '@Type': - type: string - example: Client - name: - type: string - example: SouthEast End_Client - Boundary: - type: object - properties: - '@Type': - type: string - example: Boundary - name: - type: string - example: Auto-Generated 2014 Harvest - sourceType: - type: string - example: Auto - modifiedTime: - type: string - format: date-time - example: '2016-11-17T11:53:00.000Z' - area: - $ref: '#/components/schemas/MeasurementAsDouble' - workableArea: - $ref: '#/components/schemas/MeasurementAsDouble' - multipolygons: - type: array + type: "array" items: - $ref: '#/components/schemas/Polygon' - extent: - $ref: '#/components/schemas/Extent' - id: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d - links: - type: array - items: - $ref: '#/components/schemas/Link' - active: - type: boolean - description: >- - Whether or not this boundary is currently in use. A field with - associated boundaries will have exactly one active boundary; however, - a field may also exist with no boundaries. - irrigated: - type: boolean - description: Indicates whether the contained area is irrigated - AccessPoint: - type: object + $ref: "#/components/schemas/GetFarm" + GroupLink: + description: "Link to another resource" + type: "object" properties: - id: - type: string - format: uri - description: - type: string - direction: - type: string - isEntry: - type: boolean - isExit: - type: boolean - location: - $ref: '#/components/schemas/Point' - name: - type: string - links: - type: array - items: - $ref: '#/components/schemas/Link' + boundaries: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/boundaries" + description: "Boundaries Link." + clients: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/clients" + description: "Clients Link." + farms: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/farms" + description: "Farms Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + notes: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes" + description: "Notes Link." + simplifiedBoundaries: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true" + description: "Boundaries Link." + fieldOperation: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations" + description: "Field Operations Link." + mapLayerSummaries: + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries" + description: "Map Layer Summaries Link." + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef" + description: "Contribution Definition Link" GuidanceLines: allOf: - - $ref: '#/components/schemas/ABLine' - - type: object + - $ref: "#/components/schemas/ABLine" + - type: "object" properties: bPoint: - $ref: '#/components/schemas/Point' + $ref: "#/components/schemas/Point" eastShift: - $ref: '#/components/schemas/MeasurementAsDouble' + $ref: "#/components/schemas/MeasurementAsDouble" northShift: - $ref: '#/components/schemas/MeasurementAsDouble' + $ref: "#/components/schemas/MeasurementAsDouble" tramOffset: - type: integer + type: "integer" example: 0 tramSpacing: - type: integer + type: "integer" example: 0 savedMethod: - type: string - example: dtiABLineMethodBPoint + type: "string" + example: "dtiABLineMethodBPoint" id: - type: string - format: uri - example: 5a62177b33df3c0e2cc85dc2 + type: "string" + format: "uri" + example: "5a62177b33df3c0e2cc85dc2" guid: - type: string - format: uri - example: c2878a14-f9f4-4eaf-b7ef-24f3da95d337 + type: "string" + format: "uri" + example: "c2878a14-f9f4-4eaf-b7ef-24f3da95d337" name: - type: string - example: Fleece + type: "string" + example: "Fleece" lastModifiedTime: - type: string - format: date-time - example: 2018-03-05T14:56:57.295Z + type: "string" + format: "date-time" + example: "2018-03-05T14:56:57.295Z" status: - type: string - example: ACTIVE + type: "string" + example: "ACTIVE" locked: - type: boolean + type: "boolean" links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - Flag: - type: object + $ref: "#/components/schemas/Link" + Link: + description: "Link to another resource" + type: "object" properties: - '@Type': - type: string - example: GenericNote - createdDate: - type: string - format: date-time - example: "2016-08-19T18:48:48.886Z" - lastModifiedDate: - type: string - format: date-time - example: "2016-08-19T18:48:48.886Z" - text: - type: string - example: some text - metadata: - type: array - items: - $ref: '#/components/schemas/MetaData' - author: - type: array - items: - $ref: '#/components/schemas/Author' - geometry: - $ref: '#/components/schemas/Geometry' - noteType: - type: string - example: SCOUT - id: - type: string - format: uri - example: 4e7a1fa7-9db9-45ea-94d3-e45b2fa43c2a - links: - type: array - items: - $ref: '#/components/schemas/Link' + rel: + required: true + type: "string" + example: "self" + uri: + required: true + type: "string" + example: "https://sandboxapi.deere.com/platform/users/USER" + MeasurementAsDouble: + type: "object" + properties: + "@Type": + type: "string" + example: "MeasurementAsDouble" + valueAsDouble: + type: "number" + format: "double" + example: 7.502938 + vrDomainId: + type: "string" + example: "vrEastShiftComponent" + unit: + type: "string" + description: "The unit of measure for this value" + example: "ha" MetaData: - type: object + type: "object" properties: - '@Type': - type: string - example: Metadata + "@Type": + type: "string" + example: "Metadata" name: - type: string - example: EARLY_GROWTH_EMERGENCE + type: "string" + example: "EARLY_GROWTH_EMERGENCE" value: - type: integer + type: "integer" example: 9 - Author: - type: object - properties: - '@Type': - type: string - example: User - accountName: - type: string - example: scoutcarla1 - givenName: - type: string - example: scoutcarla1 - familyName: - type: string - example: scoutcarla1 - Geometry: - type: object - properties: - coordinates: - type: array - items: - type: string - example: -93.76592004432253, 41.643866385621365 - type: - type: string - example: Point - ABLine: - type: object + Point: + type: "object" properties: - '@Type': - type: string - example: AbLine - heading: - type: number - example: 356.5847091769351 - aPoint: - $ref: '#/components/schemas/Point' + "@Type": + type: "string" + example: "Point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 43.6187 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: 116.2146 Polygon: properties: - '@Type': - type: string - example: Polygon + "@Type": + type: "string" + example: "Polygon" rings: - type: array + type: "array" items: - $ref: '#/components/schemas/Ring' + $ref: "#/components/schemas/Ring" Ring: - type: object + type: "object" properties: - '@Type': - type: string - example: Ring + "@Type": + type: "string" + example: "Ring" points: - type: array + type: "array" items: - $ref: '#/components/schemas/Point' + $ref: "#/components/schemas/Point" type: - type: string - example: exterior + type: "string" + example: "exterior" passable: - type: boolean - Point: - type: object - properties: - '@Type': - type: string - example: Point - lat: - type: number - format: double - description: The latitude of the point - example: 43.6187 - lon: - type: number - format: double - description: The longitude of the point - example: 116.2146 - Extent: - type: object - properties: - '@Type': - type: string - example: Extent - topLeft: - $ref: '#/components/schemas/Point' - bottomRight: - $ref: '#/components/schemas/Point' - MeasurementAsDouble: - type: object - properties: - '@Type': - type: string - example: MeasurementAsDouble - valueAsDouble: - type: number - format: double - example: 7.502938 - vrDomainId: - type: string - example: vrEastShiftComponent - unit: - type: string - description: The unit of measure for this value - example: ha - Link: - description: Link to another resource - type: object - properties: - rel: - required: true - type: string - example: self - uri: - required: true - type: string - example: https://sandboxapi.deere.com/platform/users/USER - FieldGuidSearches: - type: object - properties: - '@Type': - type: string - example: FieldGuidSearches - fieldIds: - type: array - items: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d - clientName: - type: string - example: client - farmName: - type: string - example: farm - fieldName: - type: string - example: field - embeds: - type: array - items: - type: string - enum: - - farms - - clients - - boundaries - - activeBoundary - - simplifiedBoundaries - - metadataOnlyBoundaries - - guidanceLines - - shapes - - accessPoints - - notes - status: - type: string - enum: - - AVAILABLE - - ARCHIVED - - ALL - GetFarm: - type: object - properties: - '@type': - type: string - example: Farm - name: - type: string - example: John Doe - id: - type: string - format: uuid - example: 9369f3f6-2428-4bba-bf64-0a19cdaf007d - readOnly: true - archived: - type: boolean - example: false - clientUri: - type: string - example: https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c - links: - type: array - readOnly: true - items: - type: object - properties: - '@type': - type: string - example: Link - rel: - type: string - example: self - uri: - type: string - example: https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d - CreateUpdateField: - description: Place holder for Matt to create the field object to be created or updated. - type: object - properties: - '@Type': - type: string - example: Field - name: - type: string - example: Land_Demo_1 - archived: - type: boolean - example: true - Farms: - type: object - properties: - '@Type': - type: string - example: Farms - farms: - type: array - items: - $ref: '#/components/schemas/CreateUpdateFarm' - Clients: - type: object - properties: - '@Type': - type: string - example: Clients - clients: - type: array - items: - $ref: '#/components/schemas/CreateUpdateClient' - - examples: - getFieldsNoEmbed: - value: > - { - "links":[ - { - "rel":"self", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields" - }, - { - "rel":"nextPage", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields;start=10;count=10" - } - ], - "total":1, - "values":[ - { - "@type":"Field", - "name":"---", - "id":"9369f3f6-2428-4bba-bf64-0a19cdaf007d", - "links":[ - { - "@type":"Link", - "rel":"self", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - }, - { - "@type":"Link", - "rel":"clients", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients" - }, - { - "@type":"Link", - "rel":"notes", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes" - }, - { - "@type":"Link", - "rel":"farms", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms" - }, - { - "@type":"Link", - "rel":"owningOrganization", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457" - }, - { - "@type":"Link", - "rel":"boundaries", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" - }, - { - "@type":"Link", - "rel":"simplifiedBoundaries", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true" - }, - { - "@type":"Link", - "rel":"addBoundary", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" - }, - { - "@type":"Link", - "rel":"fieldOperation", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations" - }, - { - "@type":"Link", - "rel":"guidanceLines", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" - }, - { - "@type":"Link", - "rel":"addGuidanceTrack", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" - }, - { - "@type":"Link", - "rel":"deleteField", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - }, - { - "@type":"Link", - "rel":"editField", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - } - ] - } - ] - } - getFieldNoEmbed: - value: - { - "@type":"Field", - "name":"---", - "id":"9369f3f6-2428-4bba-bf64-0a19cdaf007d", - "links":[ - { - "@type":"Link", - "rel":"self", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - }, - { - "@type":"Link", - "rel":"clients", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/clients" - }, - { - "@type":"Link", - "rel":"notes", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/notes" - }, - { - "@type":"Link", - "rel":"farms", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/farms" - }, - { - "@type":"Link", - "rel":"owningOrganization", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457" - }, - { - "@type":"Link", - "rel":"boundaries", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" - }, - { - "@type":"Link", - "rel":"simplifiedBoundaries", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries?simple=true" - }, - { - "@type":"Link", - "rel":"addBoundary", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries" - }, - { - "@type":"Link", - "rel":"activeBoundary", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/boundaries/a34bfb73-7a36-4d93-9a24-9814a86f0f5d" - }, - { - "@type":"Link", - "rel":"fieldOperation", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/fieldOperations" - }, - { - "@type":"Link", - "rel":"guidanceLines", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" - }, - { - "@type":"Link", - "rel":"addGuidanceTrack", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d/guidanceLines" - }, - { - "@type":"Link", - "rel":"deleteField", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - }, - { - "@type":"Link", - "rel":"editField", - "uri":"https://apiqa.tal.deere.com/platform/organizations/251457/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" - } - ] - } + type: "boolean" diff --git a/specs/raw/files.yaml b/specs/raw/files.yaml index 098ae92..f7e2ce2 100644 --- a/specs/raw/files.yaml +++ b/specs/raw/files.yaml @@ -1,801 +1,1173 @@ -openapi: 3.0.0 +openapi: "3.0.0" info: - description: This is file management service for managing files - version: 4.0.0 - title: Files + description: "This is file management service for managing files" + version: "4.0.0" + title: "Files" servers: - - url: 'https://api.deere.com/platform' - description: 'Production API endpoint' - - - url: 'https://apicert.deere.com/platform' - description: 'Certification API endpoint' - - - url: 'https://apiqa.tal.deere.com/platform' - description: 'Quality API endpoint' - - - url: 'https://apidev.tal.deere.com/platform' - description: 'Development API endpoint' + - url: "https://api.deere.com/platform" + description: "Production API endpoint" + - url: "https://apicert.deere.com/platform" + description: "Certification API endpoint" + - url: "https://apiqa.tal.deere.com/platform" + description: "Quality API endpoint" + - url: "https://apidev.tal.deere.com/platform" + description: "Development API endpoint" paths: - '/files': + /fileTransfers: get: - summary: List Files - description: 'This resource retrieves the list of available files. For each file, the response will link to the following resources: -
            -
          • owningOrganization: View the org that owns the file.
          • -
          • partnerships: View the partners this file is shared with.
          • -
          ' + summary: "List File Transfer Requests" + description: "This resource allows the client to check the status of a file transfer request that has already been submitted. The response will contain links to the following resources:
          • file: View the file for which the transfer was requested.
          • machine: View the machine to which the transfer was requested.
          " + parameters: + - $ref: "#/components/parameters/Source2" + - $ref: "#/components/parameters/X-deere-signature_FileTransfers" security: - - OAuth2: [ files, ag3 ] + - OAuth2: + - "files" + responses: + "200": + description: "File Transfer." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/FileLinkGet" + values: + items: + $ref: "#/components/schemas/FileValue" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers" + total: 2 + values: + - file: + name: "transferedFile1.zip" + type: "SETUP" + createdTime: "2014-01-13T12:15:51.159Z" + modifiedTime: "2014-01-13T12:16:09.443Z" + nativeSize: 927025 + source: "FitzwilliamDarcy" + status: "READY" + archived: false + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/7456" + id: "51234" + source: "HOST" + transferInitiationTime: "2014-01-13T12:16:15.924Z" + lastUpdatedTime: "2014-01-13T12:16:15.924Z" + status: "WDT_IN_PROCESS" + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/612" + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/1523" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/6234" + id: "4799048" + - file: + name: "transferedFile2.zip" + type: "SETUP" + createdTime: "2015-01-17T15:15:55.732Z" + modifiedTime: "2015-01-17T15:15:56.242Z" + nativeSize: 6813 + source: "LydiaBennett" + status: "READY" + archived: false + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/12345" + id: "1219063" + source: "HOST" + transferInitiationTime: "2013-01-17T15:18:41.512Z" + lastUpdatedTime: "2013-05-02T20:06:43.732Z" + status: "WDT_OPERATOR_REJECTED" + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/615" + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/243" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/7354" + id: "1219096" + /fileTransfers/{id}: + get: + summary: "View a File Transfer Request" + description: "This resource allows the client to check the status of a file transfer request that has already been submitted. The response will contain links to the following resources:
          • file: View the file for which the transfer was requested.
          • machine: View the machine to which the transfer was requested.
          " parameters: - - $ref: '#/components/parameters/FilterOptional' - - $ref: '#/components/parameters/FileTypeOptional' - - $ref: '#/components/parameters/Transferable' - - $ref: '#/components/parameters/X-deere-signatureOptional' + - $ref: "#/components/parameters/Source" + - $ref: "#/components/parameters/Id" + security: + - OAuth2: + - "files" responses: - '200': - $ref: '#/components/responses/FileListResponse' - '400': - description: Invalid filter value. - '403': - description: Invalid to access files for organization. - '/files/{fileId}': + "200": + description: "File Transfer by ID." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/FileTransfersLinkGet" + values: + items: + $ref: "#/components/schemas/FileTransfersValue" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + file: + name: "transferredFile1.zip" + type: "SETUP" + createdTime: "2015-06-09T09:42:55.817Z" + modifiedTime: "2015-06-09T09:43:01.693Z" + nativeSize: 9440 + source: "FitzwilliamDarcy" + status: "READY" + archived: false + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/15234" + id: "15234" + source: "HOST" + transferInitiationTime: "2015-06-09T09:43:01.381Z" + lastUpdatedTime: "2015-06-09T09:43:01.384Z" + status: "WDT_IN_PROCESS" + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/15234" + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/8237" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/61243" + id: "571637605" + /files: + get: + summary: "List Files" + description: "This resource retrieves the list of available files. For each file, the response will link to the following resources:
          • owningOrganization: View the org that owns the file.
          • partnerships: View the partners this file is shared with.
          " + security: + - OAuth2: + - "files" + - "ag3" + parameters: + - $ref: "#/components/parameters/FilterOptional" + - $ref: "#/components/parameters/FileTypeOptional" + - $ref: "#/components/parameters/Transferable" + - $ref: "#/components/parameters/X-deere-signatureOptional" + responses: + "200": + $ref: "#/components/responses/FileListResponse" + "400": + description: "Invalid filter value." + "403": + description: "Invalid to access files for organization." + /files/{fileId}: get: - summary: View/Download A File - description: "This resource allows the client to view or download a file. -

          Note: Only files smaller than 50 MB can be downloaded at once. Larger files will need to be downloaded in chunks. To download in chunks, you can use the Range request header, or the offset and size request parameters. If both are used, the request header will take precedence.

          + summary: "View/Download A File" + description: "This resource allows the client to view or download a file.

          Note: Only files smaller than 50 MB can be downloaded at once. Larger files will need to be downloaded in chunks. To download in chunks, you can use the Range request header, or the offset and size request parameters. If both are used, the request header will take precedence.

          -

          To view a file's metadata, choose the application/vnd.deere.axiom.v3+json Accept Header. To download the file to the client software, choose a /zip or octet-stream Accept Header. The following example will show a GET call to view a files metadata. The response will contain links to the following resources: -

            -
          • owningOrganization: View the org that owns the file.
          • -
          • partnerships: View a list of the partnerships through which the file is shared, if applicable.
          • -
          • initiateFileTransfer: Request to send this file to a specified machine.
          • -
          • wdtCapableMachines: View a list of machines in the org which can receive this file.
          • -
          -

          " - note: 'Request Header -

          To download the file in chunks of bytes, you can use the range header with the following form: Range:bytes=startIndex-endIndex

          -

          Sample Header: Range:bytes=0-1000

          ' +

          To view a file's metadata, choose the application/vnd.deere.axiom.v3+json Accept Header. To download the file to the client software, choose a /zip or octet-stream Accept Header. The following example will show a GET call to view a files metadata. The response will contain links to the following resources:

          • owningOrganization: View the org that owns the file.
          • partnerships: View a list of the partnerships through which the file is shared, if applicable.
          • initiateFileTransfer: Request to send this file to a specified machine.
          • wdtCapableMachines: View a list of machines in the org which can receive this file.

          " + note: "Request Header

          To download the file in chunks of bytes, you can use the range header with the following form: Range:bytes=startIndex-endIndex

          Sample Header: Range:bytes=0-1000

          " parameters: - - $ref: '#/components/parameters/Offset' - - $ref: '#/components/parameters/Size' - - $ref: '#/components/parameters/FileId' + - $ref: "#/components/parameters/Offset" + - $ref: "#/components/parameters/Size" + - $ref: "#/components/parameters/FileId" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: {} security: - - OAuth2: [ files, ag3 ] + - OAuth2: + - "files" + - "ag3" responses: - '200': - $ref: '#/components/responses/FileIdGet' - '403': - description: Unauthorized to access file - '404': - description: File is not present + "200": + $ref: "#/components/responses/FileIdGet" + "403": + description: "Unauthorized to access file" + "404": + description: "File is not present" put: - summary: Upload/Update A File + summary: "Upload/Update A File" security: - - OAuth2: [ files, ag3 ] - description: 'This resource allows the client to upload or update a file. The client must create a file ID before uploading a file.' - note: 'Note: In your sample request for uploading a file, the content-type can be any of the following: -
            -
          • application/octet-stream
          • -
          • application/zip
          • -
          • application/x-zip
          • -
          • application/x-zip-compressed
          • -
          • multipart/form-data
          • -
          • multipart/mixed
          • -
          - ' + - OAuth2: + - "files" + - "ag3" + description: "This resource allows the client to upload or update a file. The client must create a file ID before uploading a file." + note: "Note: In your sample request for uploading a file, the content-type can be any of the following:
          • application/octet-stream
          • application/zip
          • application/x-zip
          • application/x-zip-compressed
          • multipart/form-data
          • multipart/mixed
          " requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/EditableFileDetails' + $ref: "#/components/schemas/EditableFileDetails" Upload a file: examples: Upload a file: - description: - 'PUT: https://sandboxapi.deere.com/platform/files/fileID -
          -
          Accept: application/vnd.deere.axiom.v3+json -
          Authorization: OAuth realm="",oauth_timestamp="REDACTED", oauth_nonce="REDACTED", oauth_consumer_key="REDACTED", oauth_token="REDACTED", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_signature="REDACTED" -
          Content-Type: application/octet-stream' - + description: "PUT: https://sandboxapi.deere.com/platform/files/fileID

          Accept: application/vnd.deere.axiom.v3+json
          Authorization: OAuth realm=\"\",oauth_timestamp=\"REDACTED\", oauth_nonce=\"REDACTED\", oauth_consumer_key=\"REDACTED\", oauth_token=\"REDACTED\", oauth_version=\"1.0\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"REDACTED\"
          Content-Type: application/octet-stream" Update a file: examples: Update a file: - description: 'PUT https://partnerapi.deere.com/platform/files/fileID -
          -
          Accept: application/vnd.deere.axiom.v3+json -
          Authorization: { -
          Bearer -
          } -
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "PUT https://partnerapi.deere.com/platform/files/fileID

          Accept: application/vnd.deere.axiom.v3+json
          Authorization: {
          Bearer
          }
          Content-Type: application/vnd.deere.axiom.v3+json" value: - id: 'fileID' + id: "fileID" archived: true delayProcessing: false - application/vnd.deere.axiom.v3+xml: schema: - $ref: '#/components/schemas/EditableFileDetails' - + $ref: "#/components/schemas/EditableFileDetails" responses: - 200: - description: Successful operation + "200": + description: "Successful operation" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 - 204: - description: Created. No Content + format: "int32" + "204": + description: "Created. No Content" content: application/vnd.deere.axiom.v3+json: schema: - properties: { } + properties: {} examples: Headers: - description: '204 No Content -
          -
          Pragma: no-cache -
          Date: Wed, 23 Jul 2014 18:04:00 GMT -
          Server: Apache-Coyote/1.1 -
          X-Deere-Handling-Server: ldxtc1 -
          X-Deere-Elapsed-Ms: 645 -
          Transfer-Encoding: chunked -
          Content-Language: en-US -
          Content-Type: application/vnd.deere.axiom.v3+json;charset=UTF-8 -
          Cache-Control: no-cache, no-store, max-age=0 -
          Connection: Keep-Alive -
          Keep-Alive: timeout=5, max=100 -
          Expires: Thu, 01 Jan 1970 00:00:00 GMT' - '400': - description: Invalid file name or cannot delay processing after processing has begun - '403': - description: Unauthorized to update file. - '404': - description: File is not present. + description: "204 No Content

          Pragma: no-cache
          Date: Wed, 23 Jul 2014 18:04:00 GMT
          Server: Apache-Coyote/1.1
          X-Deere-Handling-Server: ldxtc1
          X-Deere-Elapsed-Ms: 645
          Transfer-Encoding: chunked
          Content-Language: en-US
          Content-Type: application/vnd.deere.axiom.v3+json;charset=UTF-8
          Cache-Control: no-cache, no-store, max-age=0
          Connection: Keep-Alive
          Keep-Alive: timeout=5, max=100
          Expires: Thu, 01 Jan 1970 00:00:00 GMT" + "400": + description: "Invalid file name or cannot delay processing after processing has begun" + "403": + description: "Unauthorized to update file." + "404": + description: "File is not present." statusCode: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PutFiles' - '/organizations/{orgId}/files': + $ref: "#/components/schemas/PutFiles" + /organizations/{orgId}/fileTransfers: + post: + summary: "Submit a File Transfer Request" + description: "This resource allows you to select a file and machine, and use the client software to submit a file transfer request. After that, MyJohnDeere API v3's infrastructure transfers the selected file to the selected machine, where it becomes available for the machine operator to use. The response links to the following resources:
          • file: The file for which the transfer is being requested.
          • machine: The machine to which the transfer is being requested.
          " + note: "Note there is a 800MB file size limit. Files larger than 800MB cannot be transferred using this API." + parameters: + - $ref: "#/components/parameters/OrgId2" + security: + - OAuth2: + - "files" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FileTransfersPost" + examples: + Example with file and equipment link: + summary: "Example with file and equipment link" + value: + links: + - rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/{fileId}" + - rel: "equipment" + uri: "https://equipmentapi.deere.com/isg/equipment?principalIds={machinePrincipalId}" + responses: + "200": + description: "File Transfer." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + $ref: "#/components/schemas/PostFileTransfersResponse" get: - summary: List an Org's Files - description: "View a list of an org's files. This resource allows for pagination. For each returned file, the response will link to the following resources: -

          -

            -
          • owningOrganization: View the org that owns the file.
          • -
          • partnerships: View the partnerships through which the file is shared, if applicable.
          • -
          • initiateFileTransfer: Submit a transfer request for the specified file.
          • -
          • machinesEligibleToReceiveFile: List of WDT-capable machines that the specified file can be sent to.
          • -
          • sendFileToMachine: The same as \"initiateFileTransfer.\"
          • -
          • wdtCapableMachines: The same as \"machinesEligibleToReceiveFile.\"
          • -
          -

          " - + summary: "Get File Transfer List by Organization" + description: "This resource will retrieve list of all File Transfer by an Organization. The response will contain links to the following resources:
          • file: View the file for which the transfer was requested.
          • machine: View the machine to which the transfer was requested.
          " + note: "Please Note: This API does not support eTags." parameters: - - $ref: '#/components/parameters/Filter' - - $ref: '#/components/parameters/StartDate' - - $ref: '#/components/parameters/EndDate' - - $ref: '#/components/parameters/FileType' - - $ref: '#/components/parameters/Archived' - - $ref: '#/components/parameters/Status' - - $ref: '#/components/parameters/OrganizationID3' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Source" security: - - OAuth2: [ files, ag3 ] + - OAuth2: + - "files" responses: - '200': - $ref: '#/components/responses/FileListResponse' - - '400': - description: Invalid filter value. - '403': - description: Unauthorized to access any file type. - '404': - description: Organization id does not exist. - + "200": + description: "File Transfer." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + items: + $ref: "#/components/schemas/FileTransfersLinkGet" + values: + items: + $ref: "#/components/schemas/FileTransfersValue" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fileTransfers?source=ORGANIZATION" + total: 2 + values: + - "@type": "FileTransfer" + file: + "@type": "File" + name: "1H0S670SAE0765947_032020180053.zip" + type: "SETUP" + createdTime: "2018-03-20T05:53:47.476Z" + modifiedTime: "2018-03-20T21:10:41.325Z" + nativeSize: 80480 + source: "1H0S670SAE0765947" + status: "READY" + archived: false + id: "73391610" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/73391611" + source: "HOST" + transferInitiationTime: "2018-03-20T18:52:22.155Z" + lastUpdatedTime: "2018-03-20T21:11:35.519Z" + status: "WDT_AVAILABLE_TO_DISPLAY" + id: "73416642" + links: + - "@type": "Link" + rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/73391611" + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/8257" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/2551" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/73416642" + - "@type": "FileTransfer" + file: + "@type": "File" + name: "1H0S670SAE0765947_032020180053.zip" + type: "SETUP" + createdTime: "2018-03-20T05:53:47.476Z" + modifiedTime: "2018-03-20T21:10:41.325Z" + nativeSize: 80480 + source: "1H0S670SAE0765947" + status: "READY" + archived: false + id: "73391610" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/73391610" + source: "HOST" + transferInitiationTime: "2018-03-20T18:52:22.071Z" + lastUpdatedTime: "2018-03-20T21:11:34.379Z" + status: "WDT_AVAILABLE_TO_DISPLAY" + id: "73416640" + links: + - "@type": "Link" + rel: "file" + uri: "https://sandboxapi.deere.com/platform/files/73391611" + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/8257" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/2551" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileTransfers/73416640" + /organizations/{orgId}/files: + get: + summary: "List an Org's Files" + description: "View a list of an org's files. This resource allows for pagination. For each returned file, the response will link to the following resources:

          • owningOrganization: View the org that owns the file.
          • partnerships: View the partnerships through which the file is shared, if applicable.
          • initiateFileTransfer: Submit a transfer request for the specified file.
          • machinesEligibleToReceiveFile: List of WDT-capable machines that the specified file can be sent to.
          • sendFileToMachine: The same as \"initiateFileTransfer.\"
          • wdtCapableMachines: The same as \"machinesEligibleToReceiveFile.\"

          " + parameters: + - $ref: "#/components/parameters/Filter" + - $ref: "#/components/parameters/StartDate" + - $ref: "#/components/parameters/EndDate" + - $ref: "#/components/parameters/FileType" + - $ref: "#/components/parameters/Archived" + - $ref: "#/components/parameters/Status" + - $ref: "#/components/parameters/OrganizationID3" + - $ref: "#/components/parameters/X-deere-signature" + security: + - OAuth2: + - "files" + - "ag3" + responses: + "200": + $ref: "#/components/responses/FileListResponse" + "400": + description: "Invalid filter value." + "403": + description: "Unauthorized to access any file type." + "404": + description: "Organization id does not exist." post: - summary: Create A File ID - - description: 'The POST call below shows the creation of file id "55" in organization "73" in Operation Center. The response "location" header will return the new file ID in the link returned. The client software will then use the new file ID, to upload the file.' + summary: "Create A File ID" + description: "The POST call below shows the creation of file id \"55\" in organization \"73\" in Operation Center. The response \"location\" header will return the new file ID in the link returned. The client software will then use the new file ID, to upload the file." security: - - OAuth2: [ files, ag3 ] + - OAuth2: + - "files" + - "ag3" requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PostableFileDetails' + $ref: "#/components/schemas/PostableFileDetails" examples: No Header: value: - name: 'back40Seeding.zip' - + name: "back40Seeding.zip" application/vnd.deere.axiom.v3+xml: schema: - $ref: '#/components/schemas/PostableFileDetails' + $ref: "#/components/schemas/PostableFileDetails" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" parameters: - - $ref: '#/components/parameters/OrganizationID2' - - $ref: '#/components/parameters/Name' - - $ref: '#/components/parameters/DelayProcessing' - - $ref: '#/components/parameters/Links' - + - $ref: "#/components/parameters/OrganizationID2" + - $ref: "#/components/parameters/Name" + - $ref: "#/components/parameters/DelayProcessing" + - $ref: "#/components/parameters/Links" responses: - 201: - description: Created + "201": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: - 'HTTP/1.1: 201 Created -
          -
          Date: Wed, 31 Aug 2016 16:18:22 GMT -
          Content-Encoding: gzip -
          X-Deere-Handling-Server: ldxx90tc5 -
          X-Frame-Options: SAMEORIGIN -
          X-Deere-Elapsed-Ms: 257 -
          Vary: Accept-Encoding -
          Content-Type: text/plain -
          Location: https://sandboxapi.deere.com/platform/files/55 -
          Cache-Control: max-age=0, no-cache -
          Connection: keep-alive -
          Content-Length: 20 -
          Expires: Wed, 31 Aug 2016 16:18:22 GMT' - '400': - description: | - Invalid file name. File name must be 5-69 characters: + description: "HTTP/1.1: 201 Created

          Date: Wed, 31 Aug 2016 16:18:22 GMT
          Content-Encoding: gzip
          X-Deere-Handling-Server: ldxx90tc5
          X-Frame-Options: SAMEORIGIN
          X-Deere-Elapsed-Ms: 257
          Vary: Accept-Encoding
          Content-Type: text/plain
          Location: https://sandboxapi.deere.com/platform/files/55
          Cache-Control: max-age=0, no-cache
          Connection: keep-alive
          Content-Length: 20
          Expires: Wed, 31 Aug 2016 16:18:22 GMT" + "400": + description: "Invalid file name. File name must be 5-69 characters: + + alphanumeric + + . + + , - + \- + + + \\- + + _ - Also when invalid file type. - '403': - description: >- - Unauthorized to create file. Also when organization has not opted in - to Operational Data Processing. - '404': - description: Organization does not exists. + + Also when invalid file type.\n" + "403": + description: "Unauthorized to create file. Also when organization has not opted in to Operational Data Processing." + "404": + description: "Organization does not exists." statusCode: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PostFiles' + $ref: "#/components/schemas/PostFiles" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - files: 'files' - ag3: 'ag3' parameters: - OrganizationID: - in: path - name: orgId - description: Organization - required: true - schema: - type: string - default: 'N/A' - example: 73 - OrganizationID2: - in: path - name: orgId - description: Organization - required: true + Archived: + name: "archived" + in: "query" + description: "Allows client to filter files according to whether they have been archived. TRUE returns only archived files." schema: - type: string - example: 73 - OrganizationID3: - in: path - name: orgId - description: Organization - required: true + type: "boolean" + default: "false" + example: "true" + DelayProcessing: + name: "delayProcessing" + in: "body" + description: "Set to false to force the file to be processed if it would otherwise delay processing. Can only be used with a copyFrom link." schema: - type: string - default: 'N/A' - example: '5343535' - Filter: - in: query - name: filter - description: Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host. - required: false + type: "boolean" + example: "false" + EndDate: + name: "endDate" + in: "query" + description: "Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the ISO 8601 standard" schema: - type: string - default: 'ALL' - format: int64 - example: MACHINE - FilterOptional: - in: query - name: filter - description: Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host. - required: Optional + type: "dateTime" + default: "N/A" + example: "2015-02-03T10:42:24.282Z" + FileId: + name: "fileId" + in: "path" + description: "File Id." + required: true schema: - type: string - default: 'ALL' - format: int64 - example: MACHINE + type: "string" + default: "N/A" + example: 577499742 FileType: - in: query - name: 'fileType1' - description: Takes a number that identifies the file type. + in: "query" + name: "fileType1" + description: "Takes a number that identifies the file type." required: false schema: - type: integer - default: 'N/A' - example: '0' + type: "integer" + default: "N/A" + example: "0" FileTypeOptional: - in: query - name: 'fileType1' - description: Takes the file type number. - required: Optional + in: "query" + name: "fileType1" + description: "Takes the file type number." + required: "Optional" schema: - type: integer - default: 'N/A' - example: '0' - X-deere-signature: - name: x-deere-signature - in: header + type: "integer" + default: "N/A" + example: "0" + Filter: + in: "query" + name: "filter" + description: "Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host." required: false - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. schema: - type: string - example: 520122365ebb4870a344784570d202c7 - X-deere-signatureOptional: - name: x-deere-signature - in: header - required: Optional - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. + type: "string" + default: "ALL" + format: "int64" + example: "MACHINE" + FilterOptional: + in: "query" + name: "filter" + description: "Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host." + required: "Optional" schema: - type: string - example: 520122365ebb4870a344784570d202c7 - Transferable: - in: query - name: transferable - description: Filters by whether a file is transferable - required: Optional + type: "string" + default: "ALL" + format: "int64" + example: "MACHINE" + Id: + name: "id" + in: "path" + description: "File Transfer ID" + required: true schema: - type: boolean - default: 'N/A' - example: 'true' + type: "string" + default: "N/A" + example: 1628996 + Links: + name: "links" + description: "Currently only supports a copyFrom rel, which can be passed to copy another file into the destination organization." + in: "body" + schema: + type: "Array of Links" + example: "[{\"rel\": \"copyFrom\", \"uri\": \"/files/12345\"}]" + Name: + name: "name" + in: "body" + description: "File name." + required: true + schema: + example: "back40Seeding.zip" + type: "string" Offset: - name: offset - in: '' - description: Allows client to download file in chunks. -1 will download entire file. For smaller pieces, enter offset point (in bytes) in this parameter. + name: "offset" + in: "" + description: "Allows client to download file in chunks. -1 will download entire file. For smaller pieces, enter offset point (in bytes) in this parameter." required: true schema: - type: integer - default: 'N/A' + type: "integer" + default: "N/A" example: -1 + OrgId: + name: "orgId" + in: "path" + description: "Organization" + required: true + schema: + type: "string" + default: "N/A" + example: 1234 + OrgId2: + name: "orgId" + in: "path" + description: "Organization" + required: true + schema: + type: "string" + example: 1234 + OrganizationID: + in: "path" + name: "orgId" + description: "Organization" + required: true + schema: + type: "string" + default: "N/A" + example: 73 + OrganizationID2: + in: "path" + name: "orgId" + description: "Organization" + required: true + schema: + type: "string" + example: 73 + OrganizationID3: + in: "path" + name: "orgId" + description: "Organization" + required: true + schema: + type: "string" + default: "N/A" + example: "5343535" Size: - name: size - in: '' - description: Allows client to download file in chunks. -1 will download entire file. For smaller pieces, enter size (in bytes) in this parameter. + name: "size" + in: "" + description: "Allows client to download file in chunks. -1 will download entire file. For smaller pieces, enter size (in bytes) in this parameter." required: true schema: - type: integer - default: 'N/A' + type: "integer" + default: "N/A" example: -1 - FileId: - name: fileId - in: path - description: File Id. - required: true + Source: + name: "source" + in: "query" + description: "The source of the file transfer. Takes the values ORGANIZATION or MACHINE." schema: - type: string - default: 'N/A' - example: 577499742 - StartDate: - name: startDate - in: query - description: 'Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the ISO 8601 standard.' + type: "string" + default: "N/A" + example: "ORGANIZATION" + Source2: + name: "source" + in: "query" + description: "The source of the file transfer. Takes the values ORGANIZATION or MACHINE." schema: - type: datetime - default: 'N/A' - example: 2013-01-04T14:08:51.104Z - EndDate: - name: endDate - in: query - description: 'Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the ISO 8601 standard' + type: "string" + example: "ORGANIZATION" + StartDate: + name: "startDate" + in: "query" + description: "Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the ISO 8601 standard." schema: - type: dateTime - default: 'N/A' - example: 2015-02-03T10:42:24.282Z + type: "datetime" + default: "N/A" + example: "2013-01-04T14:08:51.104Z" Status: - name: status - in: query - description: Allows client to filter files according to whether they are transferable to machines. Takes TRANSFERABLE and NON_TRANSFERABLE. + name: "status" + in: "query" + description: "Allows client to filter files according to whether they are transferable to machines. Takes TRANSFERABLE and NON_TRANSFERABLE." schema: - type: string - default: 'N/A' - example: TRANSFERABLE - Archived: - name: archived - in: query - description: Allows client to filter files according to whether they have been archived. TRUE returns only archived files. + type: "string" + default: "N/A" + example: "TRANSFERABLE" + Transferable: + in: "query" + name: "transferable" + description: "Filters by whether a file is transferable" + required: "Optional" schema: - type: boolean - default: 'false' - example: 'true' - Name: - name: name - in: body - description: File name. - required: true + type: "boolean" + default: "N/A" + example: "true" + X-deere-signature: + name: "x-deere-signature" + in: "header" + required: false + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - example: back40Seeding.zip - type: string - DelayProcessing: - name: delayProcessing - in: body - description: Set to false to force the file to be processed if it would otherwise delay processing. Can only be used with a copyFrom link. + type: "string" + example: "520122365ebb4870a344784570d202c7" + X-deere-signatureOptional: + name: "x-deere-signature" + in: "header" + required: "Optional" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: boolean - example: 'false' - Links: - name: links - description: Currently only supports a copyFrom rel, which can be passed to copy another file into the destination organization. - in: body + type: "string" + example: "520122365ebb4870a344784570d202c7" + X-deere-signature_FileTransfers: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." schema: - type: Array of Links - example: '[{"rel": "copyFrom", "uri": "/files/12345"}]' - + type: "string" + example: "877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000" responses: - FileListResponse: - description: Successful operation + FileIdGet: + description: "Successful operation" content: + application/zip: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/octet-stream: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/x-zip: + schema: + description: "Based on value of embed request param one of the above response object is returned" + application/x-zip-compressed: + schema: + description: "Based on value of embed request param one of the above response object is returned" + multipart/mixed: + schema: + description: "Based on value of embed request param one of the above response object is returned" application/vnd.deere.axiom.v3+json: schema: + description: "Based on value of embed request param one of the above response object is returned" properties: links: - type: array items: - $ref: '#/components/schemas/FilesLink' - total: - type: number - format: double - description: 'Total number of files matching the request' - example: 123 + $ref: "#/components/schemas/FilesLink" values: items: - $ref: '#/components/schemas/FilesGet' + $ref: "#/components/schemas/ValueFileIdGet" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 520122365ebb4870a344784570d202c7' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: + id: "577499742" + name: "back40.zip" + type: "SETUP" + createdTime: "2015-02-03T10:42:24.282Z" + modifiedTime: "2015-02-03T10:42:24.282Z" + nativeSize: "72946" + source: "JohnDoe" + transferPending: "false" + visibleViaShare: "owned" + shared: "false" + status: "UPLOAD_PENDING" + archived: "false" + assigned: "false" + new: "false" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/files - total: 1 - values: - links: - - rel: self - uri: https://sandboxapi.deere.com/platform/files - total: 1 - values: - - links: - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: partnerships - uri: https://sandboxapi.deere.com/platform/files/466578633/partnerships - - rel: self - uri: https://sandboxapi.deere.com/platform/files/466578633 - id: '577499742' - name: back40.zip - type: SETUP - createdTime: '2013-01-04T14:08:51.104Z' - modifiedTime: '2013-01-04T14:08:51.104Z' - nativeSize: '72946' - source: JohnDoe - transferPending: 'false' - visibleViaShare: owned - shared: 'false' - status: UPLOAD_PENDING - archived: 'false' - assigned: 'false' - new: 'false' - FileIdGet: - description: Successful operation + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/2101" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/466578633" + FileListResponse: + description: "Successful operation" content: - application/zip: - schema: - description: 'Based on value of embed request param one of the above response object is returned' - application/octet-stream: - schema: - description: 'Based on value of embed request param one of the above response object is returned' - application/x-zip: - schema: - description: 'Based on value of embed request param one of the above response object is returned' - application/x-zip-compressed: - schema: - description: 'Based on value of embed request param one of the above response object is returned' - multipart/mixed: - schema: - description: 'Based on value of embed request param one of the above response object is returned' application/vnd.deere.axiom.v3+json: schema: - description: 'Based on value of embed request param one of the above response object is returned' properties: links: + type: "array" items: - $ref: '#/components/schemas/FilesLink' + $ref: "#/components/schemas/FilesLink" + total: + type: "number" + format: "double" + description: "Total number of files matching the request" + example: 123 values: items: - $ref: '#/components/schemas/ValueFileIdGet' + $ref: "#/components/schemas/FilesGet" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 520122365ebb4870a344784570d202c7" value: - id: '577499742' - name: back40.zip - type: SETUP - createdTime: '2015-02-03T10:42:24.282Z' - modifiedTime: '2015-02-03T10:42:24.282Z' - nativeSize: '72946' - source: JohnDoe - transferPending: 'false' - visibleViaShare: owned - shared: 'false' - status: UPLOAD_PENDING - archived: 'false' - assigned: 'false' - new: 'false' links: - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/2101 - - rel: self - uri: https://sandboxapi.deere.com/platform/files/466578633 - + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files" + total: 1 + values: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files" + total: 1 + values: + - links: + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "partnerships" + uri: "https://sandboxapi.deere.com/platform/files/466578633/partnerships" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/files/466578633" + id: "577499742" + name: "back40.zip" + type: "SETUP" + createdTime: "2013-01-04T14:08:51.104Z" + modifiedTime: "2013-01-04T14:08:51.104Z" + nativeSize: "72946" + source: "JohnDoe" + transferPending: "false" + visibleViaShare: "owned" + shared: "false" + status: "UPLOAD_PENDING" + archived: "false" + assigned: "false" + new: "false" schemas: - FileType: - type: string - enum: - - SETUP - - PRESCRIPTION - - INVALID - - UNKNOWN - - DOC - - JDBACKUP - - HIC - - TIMBERLINK - - EXPORT - - TIMBERMATIC - - PDF - - ISO_SETUP - - BOUNDARY - - EXCEL - example: SETUP - - PostableFileDetails: - allOf: - - $ref: '#/components/schemas/EditableFileDetails' - - type: 'object' - properties: - type: - $ref: '#/components/schemas/FileType' - source: - type: string - description: 'The source of the file (e.g., the display type or user that uploaded it)' - example: 'myUserName' - contextMetadata: - type: object - description: 'Contextual metadata for the file, such as frequency, report type, machines, and fields' - example: - frequency: "DAILY" - reportType: "CONNECTIVITY" - machines: - - "eb8a4a58-9d94-4c98-ae56-09331aa0ff50" - - "3341fe33-4825-464b-8442-3f17fa876cd1" - fields: - - "3341fe33-4825-464b-8442-3f17fa876cd1" - - "3341fe33-4825-464b-8442-3f17fa876cd1" - customMetadata: - type: object - description: 'Additional custom metadata for the file' - example: - time_range_start: "2025-07-01T00:00:00Z" - time_range_end: "2025-07-28T00:00:00Z" - locale: "en-US" - time_zone: "UTC" - unit_of_measure: "XYZ" - user_type: "Admin" - schedule_id: "124jsg" EditableFileDetails: - type: 'object' + type: "object" properties: name: - type: string - example: RW8360R907628_12062012.zip + type: "string" + example: "RW8360R907628_12062012.zip" archived: - type: boolean - description: Indicates whether the file has been archived. + type: "boolean" + description: "Indicates whether the file has been archived." example: false delayProcessing: - type: 'boolean' - description: 'If set to true, then processing of the file will be delayed until this is toggled to false.' + type: "boolean" + description: "If set to true, then processing of the file will be delayed until this is toggled to false." example: false - FilesLink: + FileLinkGet: + properties: + file: + example: "https://sandboxapi.deere.com/platform/files/612" + description: "Files Link." + machine: + example: "https://sandboxapi.deere.com/platform/machines/1523" + description: "Machines Link." + FileTransfersLink: properties: + file: + example: "https://sandboxapi.deere.com/platform/files/fileID" + description: "Files Link." + machine: + example: "https://sandboxapi.deere.com/platform/machines/machineID" + description: "Machines Link." + FileTransfersLinkAPIInteractions: + properties: + Status: + description: "Status." + location: + description: "The url of the created resources" + schema: + type: "string" + example: "https://sandboxapi.deere.com/platform/FileTransfer/7482" + FileTransfersLinkGet: + properties: + file: + example: "https://sandboxapi.deere.com/platform/files/15234" + description: "Files Link." + machine: + example: "https://sandboxapi.deere.com/platform/machines/8237" + description: "Machines Link." owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/1234 - description: Organization Link. - partnerships: - example: https://sandboxapi.deere.com/platform/files/466578633/partnerships - description: Partnership Link. + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organization Link." + FileTransfersPost: + type: "object" + properties: + links: + type: "array" + items: + type: "object" + properties: + rel: + type: "string" + enum: + - "file" + - "equipment" + required: true + uri: + type: "string" + format: "uri" + required: true + FileTransfersValue: + properties: + file: + description: "Information on the transferred file, including name, type, created type, modified time, native size, source, status, and whether it was archived." + example: "See sample response below." + type: "---" + id: + type: "string" + description: "File Transfer ID" + example: 1628996 + source: + type: "string" + description: "File source. If the request parameter value for source is MACHINE, this response value will also be MACHINE. If the request parameter value for source is ORGANIZATION, this response value will be HOST." + example: "HOST" + transferInitiationTime: + type: "datetime" + description: "Timestamp of when the file transfer was initiated.All timestamps are formatted according to the ISO 8601 standard." + example: "2015-06-09T09:43:01.381Z" + lastUpdatedTime: + type: "datetime" + description: "Timestamp of when the file transfer was last updated.All timestamps are formatted according to the ISO 8601 standard." + example: "2015-06-09T09:43:01.384Z" + status1: + type: "string" + description: "Status of the file transfer." + example: "WDT_AVAILABLE_TO_DISPLAY" + FileType: + type: "string" + enum: + - "SETUP" + - "PRESCRIPTION" + - "INVALID" + - "UNKNOWN" + - "DOC" + - "JDBACKUP" + - "HIC" + - "TIMBERLINK" + - "EXPORT" + - "TIMBERMATIC" + - "PDF" + - "ISO_SETUP" + - "BOUNDARY" + - "EXCEL" + example: "SETUP" + FileValue: + properties: + x-deere-signature: + type: "string" + example: "877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + file: + description: "Information on the transferred file, including name, type, created type, modified time, native size, source, status, and whether it was archived." + example: "See sample response below." + type: "object" + id: + type: "string" + default: "N/A" + description: "File Transfer ID" + example: 51234 + source: + type: "string" + default: "N/A" + description: "File source. If the request parameter value for source is MACHINE, this response value will also be MACHINE. If the request parameter value for source is ORGANIZATION, this response value will be HOST." + example: "HOST" + transferInitiationTime: + type: "string" + description: "Timestamp of when the file transfer was initiated.All timestamps are formatted according to the ISO 8601 standard." + example: "2018-03-20T18:52:22.155Z" + lastUpdatedTime: + type: "string" + description: "Timestamp of when the file transfer was last updated.All timestamps are formatted according to the ISO 8601 standard." + example: "2018-03-20T21:11:35.519Z" + status1: + type: "string" + description: "Status of the file transfer." + example: "WDT_IN_PROCESS" FilesGet: - type: 'object' + type: "object" properties: x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: 520122365ebb4870a344784570d202c7 + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "520122365ebb4870a344784570d202c7" id: - type: string + type: "string" example: 577499742 - description: The id of the file. + description: "The id of the file." name: - type: string - example: back40.zip - description: The name of the file. + type: "string" + example: "back40.zip" + description: "The name of the file." type1: - type: string - description: The type of the file. - example: SETUP + type: "string" + description: "The type of the file." + example: "SETUP" createdTime2: - type: 'datetime' - format: 'date-time' - example: '2015-02-03T10:42:24.282Z' - description: Time at which the file was created. + type: "datetime" + format: "date-time" + example: "2015-02-03T10:42:24.282Z" + description: "Time at which the file was created." modifiedTime2: - x-zally-ignore: [D010] - type: 'datetime' - format: 'date-time' - description: 'Time at which the file was last modified.' - example: '2015-02-03T10:42:24.282Z' + x-zally-ignore: + - "D010" + type: "datetime" + format: "date-time" + description: "Time at which the file was last modified." + example: "2015-02-03T10:42:24.282Z" nativeSize: - type: integer - format: 'int64' - description: Size of the file. + type: "integer" + format: "int64" + description: "Size of the file." example: 72946 source: - type: string - example: JohnDoe - description: Account with which the file was created. + type: "string" + example: "JohnDoe" + description: "Account with which the file was created." transferPending: - type: boolean - example: 'false' - description: Indicates whether the file is currently in a pending transfer to a machine. + type: "boolean" + example: "false" + description: "Indicates whether the file is currently in a pending transfer to a machine." visibleViaShare: - type: string - example: owned - description: Indicates whether you own the file, or it was shared with you. The value will be either "owned" or "manual". + type: "string" + example: "owned" + description: "Indicates whether you own the file, or it was shared with you. The value will be either \"owned\" or \"manual\"." shared: - type: boolean - example: 'false' - description: Indicates whether the file is shared with another org. + type: "boolean" + example: "false" + description: "Indicates whether the file is shared with another org." status: - type: string - example: UPLOAD_PENDING - description: 'Indicates whether the file can be transferred to a machine. Possible values are: Upload Pending, Ready, and In Progress.' + type: "string" + example: "UPLOAD_PENDING" + description: "Indicates whether the file can be transferred to a machine. Possible values are: Upload Pending, Ready, and In Progress." archived: - type: boolean - example: 'false' - description: Indicates whether the file has been archived. + type: "boolean" + example: "false" + description: "Indicates whether the file has been archived." newDEPRECATED: - type: boolean - example: 'false' - description: Indicates whether the file is new. + type: "boolean" + example: "false" + description: "Indicates whether the file is new." format: - type: string - example: IntegraVersaPlugin - description: Indicates the plugin type. + type: "string" + example: "IntegraVersaPlugin" + description: "Indicates the plugin type." manufacturer: - type: string - example: AgLeader - description: Indicates the manufacturer. + type: "string" + example: "AgLeader" + description: "Indicates the manufacturer." + FilesLink: + properties: + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organization Link." + partnerships: + example: "https://sandboxapi.deere.com/platform/files/466578633/partnerships" + description: "Partnership Link." + PostFileTransfersResponse: + description: "File Transfers Post Api Response." + properties: + Location: + description: "The URL of the created resource." + type: "string" + example: "https://sandboxapi.deere.com/platform/fileTransfers/7482" + PostFiles: + properties: + "201": + description: "The file was successfully created." + example: "Created" + "400": + description: "File names must be between 5 and 69 characters and may only contain international alphanumeric characters, spaces, and any of the following: \".,-_\". Specifically, it must match the following Unicode regular expression: ^[\\p{N}\\p{L}.,_ \\-]+$" + example: "
          • Must be between 5 and 69 characters
          • Should not contain invalid characters.
          " + PostableFileDetails: + allOf: + - $ref: "#/components/schemas/EditableFileDetails" + - type: "object" + properties: + type: + $ref: "#/components/schemas/FileType" + source: + type: "string" + description: "The source of the file (e.g., the display type or user that uploaded it)" + example: "myUserName" + contextMetadata: + type: "object" + description: "Contextual metadata for the file, such as frequency, report type, machines, and fields" + example: + frequency: "DAILY" + reportType: "CONNECTIVITY" + machines: + - "eb8a4a58-9d94-4c98-ae56-09331aa0ff50" + - "3341fe33-4825-464b-8442-3f17fa876cd1" + fields: + - "3341fe33-4825-464b-8442-3f17fa876cd1" + - "3341fe33-4825-464b-8442-3f17fa876cd1" + customMetadata: + type: "object" + description: "Additional custom metadata for the file" + example: + time_range_start: "2025-07-01T00:00:00Z" + time_range_end: "2025-07-28T00:00:00Z" + locale: "en-US" + time_zone: "UTC" + unit_of_measure: "XYZ" + user_type: "Admin" + schedule_id: "124jsg" + PutFiles: + properties: + "204": + description: "The file was updated." + example: "No Content" + "400": + description: "File names must be between 1 and 45 characters and may only contain international alphanumeric characters, spaces, and any of the following: \".,-_\". Specifically, it must match the following Unicode regular expression: ^[\\p{N}\\p{L}.,_ \\-]+$" + example: "
          • Must be between 1 and 45 characters
          • Should not contain invalid characters.
          " ValueFileIdGet: - type: 'object' + type: "object" properties: id: - type: string + type: "string" example: 577499742 - description: The id of the file. + description: "The id of the file." name: - type: string - example: back40.zip - description: The name of the file. + type: "string" + example: "back40.zip" + description: "The name of the file." type1: - type: string - description: The type of the file. - example: SETUP + type: "string" + description: "The type of the file." + example: "SETUP" createdTime2: - type: 'datetime' - format: 'date-time' - example: '2015-02-03T10:42:24.282Z' - description: Time at which the file was created. + type: "datetime" + format: "date-time" + example: "2015-02-03T10:42:24.282Z" + description: "Time at which the file was created." modifiedTime2: - x-zally-ignore: [ D010 ] - type: 'datetime' - format: 'date-time' - description: 'Time at which the file was last modified.' - example: '2015-02-03T10:42:24.282Z' + x-zally-ignore: + - "D010" + type: "datetime" + format: "date-time" + description: "Time at which the file was last modified." + example: "2015-02-03T10:42:24.282Z" nativeSize: - type: integer - format: 'int64' - description: Size of the file. + type: "integer" + format: "int64" + description: "Size of the file." example: 72946 source: - type: string - example: JohnDoe - description: Account with which the file was created. + type: "string" + example: "JohnDoe" + description: "Account with which the file was created." transferPending: - type: boolean - example: 'false' - description: Indicates whether the file is currently in a pending transfer to a machine. + type: "boolean" + example: "false" + description: "Indicates whether the file is currently in a pending transfer to a machine." visibleViaShare: - type: string - example: owned - description: Indicates whether you own the file, or it was shared with you. The value will be either "owned" or "manual". + type: "string" + example: "owned" + description: "Indicates whether you own the file, or it was shared with you. The value will be either \"owned\" or \"manual\"." shared: - type: boolean - example: 'false' - description: Indicates whether the file is shared with another org. + type: "boolean" + example: "false" + description: "Indicates whether the file is shared with another org." status: - type: string - example: UPLOAD_PENDING - description: 'Indicates whether the file can be transferred to a machine. Possible values are: Upload Pending, Ready, and In Progress.' + type: "string" + example: "UPLOAD_PENDING" + description: "Indicates whether the file can be transferred to a machine. Possible values are: Upload Pending, Ready, and In Progress." archived: - type: boolean - example: 'false' - description: Indicates whether the file has been archived. + type: "boolean" + example: "false" + description: "Indicates whether the file has been archived." newDEPRECATED: - type: boolean - example: 'false' - description: Indicates whether the file is new. - PostFiles: - properties: - 201: - description: The file was successfully created. - example: Created - 400: - description: 'File names must be between 5 and 69 characters and may only contain international alphanumeric characters, spaces, and any of the following: ".,-_". Specifically, it must match the following Unicode regular expression: ^[\p{N}\p{L}.,_ \-]+$' - example: '
            -
          • Must be between 5 and 69 characters
          • -
          • Should not contain invalid characters.
          • -
          ' - PutFiles: - properties: - 204: - description: The file was updated. - example: No Content - 400: - description: 'File names must be between 1 and 45 characters and may only contain international alphanumeric characters, spaces, and any of the following: ".,-_". Specifically, it must match the following Unicode regular expression: ^[\p{N}\p{L}.,_ \-]+$' - example: '
            -
          • Must be between 1 and 45 characters
          • -
          • Should not contain invalid characters.
          • -
          ' + type: "boolean" + example: "false" + description: "Indicates whether the file is new." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + files: "files" + ag3: "ag3" + OAuth2_FileTransfers: + type: "oauth2" + flows: + clientCredentials: + scopes: + files: "files" +x-source-documents: + - endPointName: "files-api" + id: 18 + - endPointName: "file-transfers" + id: 19 diff --git a/specs/raw/flags.yaml b/specs/raw/flags.yaml index 8995239..4e3fec3 100644 --- a/specs/raw/flags.yaml +++ b/specs/raw/flags.yaml @@ -1,51 +1,76 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - description: | - This set of endpoints is dealing with flags, which are pointers to a geographical location in a field or around a field which are marked for attention or treatment in a specific way. + description: "This set of endpoints is dealing with flags, which are pointers to a geographical location in a field or around a field which are marked for attention or treatment in a specific way. + Flag resource is uniquely identified by its id, the endpoint /flags/{id} will be used to work with individual flag instances. + The following flag types are supported by this API: - - FLAG - Flags are digital markers the user places at a location marking it for (future) attention or treatment in a specific way. It is "setup" master data which can be exported to machine displays. Flags created on machine displays are represented as FLAG-type flags. + + - FLAG - Flags are digital markers the user places at a location marking it for (future) attention or treatment in a specific way. It is \"setup\" master data which can be exported to machine displays. Flags created on machine displays are represented as FLAG-type flags. + - SCOUT - Scouting note which is a geo-referenced observation of certain facts within a field or outside of it. Scouting notes are essentially documentation, just as Gen4 log data is documentation. It is the what happened, and what was observed. + Flags do support three geometry types encoded in GeoJson format (all other geometry types will be rejected by the API): + - Point + - LineString + - Polygon + Code of conduct for the API: + 1. All flags are equal and can be routed from any app to all apps supporting flags API. - 2. Flags are digital markers the user places at a location marking it for (future) attention or treatment in a specific way. It is "setup" master data in its own right, and not intended to model any more concrete thing than a digital marker. + + 2. Flags are digital markers the user places at a location marking it for (future) attention or treatment in a specific way. It is \"setup\" master data in its own right, and not intended to model any more concrete thing than a digital marker. + 3. Because of 1) and 2), flags are NOT intended to be a mechanism for easily adding new entity types into our system. + 4. Flag categories are meaningless to the system. + 5. The system shall not do any automatic decisions based on flag data besides considering: - - flag type (FLAG vs SCOUT) - - geometry type (e.g., points only). - - creation date/last modification date - - global vs field-related + + \ - flag type (FLAG vs SCOUT) + + \ - geometry type (e.g., points only). + + \ - creation date/last modification date + + \ - global vs field-related + 6. User makes decision what flag categories to show in each app based on manually filtering flag categories. + 7. Clients SHALL not rely on the certain metadata key-values are present in the flags object or not. + 8. Clients SHOULD not display any metadata they cannot interpret. + 9. Clients SHALL not delete, update any metadata they cannot interpret. - 10. Metadata array is updated/patched as a whole. I.e., if client needs to update/delete a certain key, all other key-values SHALL be contained unchanged in the PUT or PATCH request. - 11. Clients SHALL ignore geometries they cannot interpret/process/display or use request parameters to exclude those. - version: 1.0.0 - title: Axiom Public Flags API + 10. Metadata array is updated/patched as a whole. I.e., if client needs to update/delete a certain key, all other key-values SHALL be contained unchanged in the PUT or PATCH request. + 11. Clients SHALL ignore geometries they cannot interpret/process/display or use request parameters to exclude those.\n" + version: "1.0.0" + title: "Axiom Public Flags API" servers: - - url: 'https://partnerapi.deere.com/platform' - + - url: "https://partnerapi.deere.com/platform" paths: - /organizations/{orgId}/flags/{flagId}: + /organizations/{orgId}/fields/{fieldId}/flags: get: - summary: List a flag by org id and Flag id + operationId: "getOrgFieldFlags" + summary: "List flags for the field" + tags: + - "Flags APIs" + description: "This resource will return a list of flag objects associated with the field." security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: "#/components/parameters/OrgId" - - $ref: "#/components/parameters/FlagId" + - $ref: "#/components/parameters/OrgId3" + - $ref: "#/components/parameters/FieldId" - $ref: "#/components/parameters/Accept-Language" - $ref: "#/components/parameters/Embed" - $ref: "#/components/parameters/StartTime" @@ -53,184 +78,499 @@ paths: - $ref: "#/components/parameters/CategoryIds" - $ref: "#/components/parameters/CategoryNames" - $ref: "#/components/parameters/RecordFilter" - - $ref: "#/components/parameters/FlagScopes" - $ref: "#/components/parameters/ShapeTypes" - $ref: "#/components/parameters/Simple" - $ref: "#/components/parameters/MetadataOnly" - - operationId: getFlagForOrganizationByFlagId - tags: - - Flags APIs - description: This endpoint will return a flag for a given org and Flag id. responses: - 200: - $ref: '#/components/responses/FlagIdGet' - 403: - description: Access forbidden. The user does not have permission to access the given organization. - 404: - description: Entity Not found. No organization present for given orgId or no flag id present in the given org id - - put: - operationId: updateFlagByIdOrgId - summary: Update flag by id + "200": + $ref: "#/components/responses/GetOrgId" + "403": + description: "Forbidden. The user has no access to the given flag" + "404": + description: "Entity Not found. No organization and/or field with these ids." + /organizations/{orgId}/flagCategories: + get: + summary: "List Flags Category Collection" + operationId: "getFlagCategoriesForOrganization" tags: - - Flags APIs - description: This resource will update flag by Organization and Flag Id. + - "Flag Categories APIs" + description: "This resource will return a Flags Category Collection for Organization." security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag1" parameters: - - $ref: '#/components/parameters/OrgId2' - - $ref: '#/components/parameters/FlagId' + - $ref: "#/components/parameters/OrgId4" + - $ref: "#/components/parameters/Accept-Language_FlagCategories" + - $ref: "#/components/parameters/Embed_FlagCategories" + responses: + "200": + description: "Returns collection of flag categories which includes reference and user-defined categories." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/LinkCategoryId2" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + type: "array" + items: + $ref: "#/components/schemas/FlagCategory2" + examples: + Headers: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/flagCategories" + total: 1 + values: + - "@type": "FlagCategory" + categoryTitle: "LineWithWidth" + preferred: false + id: "835b863c-1997-451d-8850-1123ff4ec0e3" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "updateCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + - "@type": "Link" + rel: "deleteCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No organization present for given orgId." + post: + operationId: "createFlagCategory" + summary: "Create a custom category" + parameters: + - $ref: "#/components/parameters/OrgId4" + tags: + - "Flag Categories APIs" + description: "This resource will create a custom category in the given organization." + security: + - OAuth2: + - "ag3" requestBody: + description: "This resource will create a custom category in the given organization." + required: true content: - 'application/vnd.deere.axiom.v3+json': + application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ValuesFlagIdPut' + $ref: "#/components/schemas/PutResponse" examples: No Header: value: - '@type': Flag - id: FlagId - notes: SomeRandomString - geometry: - type: Point - coordinates: - - -95.14959274063109 - - 42.668815484 + "@type": "FlagCategory" + categoryTitle: "Rocks" + preferred: true archived: false - proximityAlertEnabled: false + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ContentType" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/flagCategories/fc602ae8-4351-4640-9de8-88792bda83d7" + "400": + description: "Invalid body - Bad Request" + "403": + description: "Forbidden - Given Invalid orgId or the user doesn't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No organization present for given orgId or no contribution definition ID is found." + "409": + description: "Conflict. User creates flag category with such title which is already being used in one of the existing category." + /organizations/{orgId}/flagCategories/{categoryId}: + get: + operationId: "getFlagCategoryByIdOrgId" + summary: "Get flag category by id" + tags: + - "Flag Categories APIs" + description: "This resource will return a flag category with the name translated into the specified language. The category can be a reference flagCategory, a master flagCategory created from a referenced flagCategory or a user-defined category." + parameters: + - $ref: "#/components/parameters/Accept-Language_FlagCategories" + - $ref: "#/components/parameters/Embed_FlagCategories" + - $ref: "#/components/parameters/OrgId_FlagCategories" + - $ref: "#/components/parameters/CategoryId" + security: + - OAuth2: + - "ag1" + responses: + "200": + description: "Returns flag category." + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: links: - - '@type': Link - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID - - '@type': Link - rel: flagCategory - uri: >- - https://sandboxapi.deere.com/platform/organizations/ORG_ID/flagCategories/CATEGORYID - - '@type': Link - rel: field - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID + items: + $ref: "#/components/schemas/LinkCategoryId" + values: + items: + $ref: "#/components/schemas/FlagCategory" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "FlagCategory" + categoryTitle: "Rocks" + sourceNode: "7ba95d7a-f798-46d0-9bf9-c39c31bcf984" + preferred: true + id: "7c602ae8-4351-4640-9de8-88792bda83d7" + createdDate: "2018-12-28T09:17:10.694Z" + lastModifiedDate: "2018-12-28T09:17:10.694Z" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + - "@type": "Link" + rel: "organization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - "@type": "Link" + rel: "updateCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + - "@type": "Link" + rel: "deleteCategory" + uri: "https://sandboxapi.deere.com/platform/organizations/{orgId}/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No organization present for given orgId or given flag category does not exist" + put: + operationId: "updateFlagCategoryByIdOrgId" + summary: "Update flag category by organization and flag category Id" + tags: + - "Flag Categories APIs" + description: "This resource will update flag category by Id." + parameters: + - $ref: "#/components/parameters/OrgId2_FlagCategories" + - $ref: "#/components/parameters/CategoryId2" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ContentType" + security: + - OAuth2: + - "ag3" + requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ContentType' + $ref: "#/components/schemas/PutResponse" + examples: + No Header: + value: + "@type": "FlagCategory" + categoryTitle: "Rocks" + archived: false + preferred: true responses: - 200: - description: Update response by Flag Id + "200": + description: "No Content. Successfully updated." content: application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" examples: Headers: - description: '204 No Content' - 400: - description: | - - No contributionDefinition link specified - - No category link specified - 403: - description: Forbidden Access - 404: - description: Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org - + description: "204 No Content" + "400": + description: "Invalid body - Bad Request" + "403": + description: "Forbidden Access" + "404": + description: "Entity Not found. Missing or incorrect categoryId in the org Or incorrect org" delete: - operationId: deleteFlagByIdOrgId - summary: Delete a flag for a given org + operationId: "deleteFlagCategoryByIdOrgId" + summary: "Delete a flag category" tags: - - Flags APIs - description: This resource will delete a single flag based on its Id and org id - security: - - OAuth2: [ ag3 ] + - "Flag Categories APIs" + description: "This resource will delete a single empty category based on the categoryId and orgId." parameters: - - $ref: '#/components/parameters/FlagId' - - $ref: '#/components/parameters/OrgId' + - $ref: "#/components/parameters/OrgId3_FlagCategories" + - $ref: "#/components/parameters/CategoryId2" + security: + - OAuth2: + - "ag3" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ContentType' + $ref: "#/components/schemas/ContentType" responses: - 200: - description: No Content. Flag deleted successfully. + "200": + description: "No Content. Flag Category deleted successfully." content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content' - 403: - description: | - Forbidden. - - The user has no permission to delete the flag. - 404: - description: Entity Not found. Given flag id does not exist or given orgId does not present. + description: "204 No Content" + "403": + description: "Forbidden. + - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. + + - The user has no permission to delete the flag category.\n" + "404": + description: "Entity Not found. Given category id does not exist or given orgId does not exist." + /organizations/{orgId}/flagCategories/{categoryId}/flagCategoryPreferences: + get: + operationId: "getFlagCategoryPreferencesByIdOrgId" + summary: "List collection of FlagCategoryPreference" + tags: + - "Flag Categories Preferences" + description: "This endpoint will return a collection of FlagCategoryPreference objects associated with the given flag category. The object with the key \"default\" is created automatically on the 1st access to the flagCategory object by a client. The default preference object shall be initialized with default values:
          • prefKey: \"default\"
          • hexColor: \"#FFFFFF\"
          " + parameters: + - $ref: "#/components/parameters/PrefKey" + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/CategoryId_FlagCategoriesPreferences" + security: + - OAuth2: + - "ag1" + responses: + "200": + description: "Returns the preferences object for the given flag category." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GetPreferences" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + items: + $ref: "#/components/schemas/FlagCategoryPreference" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + id: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: "default" + hexColor: "#0BA74A" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2018-07-01T21:10:10Z" + links: + - rel: "modifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/rostaninoleg" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No category with this id." + /organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId}: + get: + operationId: "getFlagCategoryPreferenceByIdOrgId" + summary: "View preferences object for a category" + parameters: + - $ref: "#/components/parameters/OrgId_FlagCategoriesPreferences" + - $ref: "#/components/parameters/FlagCategoryPreferencesId" + tags: + - "Flag Categories Preferences" + security: + - OAuth2: + - "ag1" + description: "This resource will return the preferences object for the given flag category and org" + responses: + "200": + description: "Returns the preferences object identified by its global ID." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/GetPreferences" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + values: + items: + $ref: "#/components/schemas/FlagCategoryPreference" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + id: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: "default" + hexColor: "#0BA74A" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2018-07-01T21:10:10Z" + links: + - rel: "modifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/rostaninoleg" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. No reference category with this id." + put: + operationId: "updateFlagCategoryPreferenceByIdOrgId" + summary: "Update flag category preferences" + tags: + - "Flag Categories Preferences" + description: "This resource will update flag category preferences by Id and Org" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/FlagCategoryPreferencesId2" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ContentType" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FlagCategoryPreference" + examples: + No Header: + value: + id: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: "default" + hexColor: "#0BA74A" + createdTime: "2018-07-01T21:00:11Z" + modifiedTime: "2018-07-01T21:10:10Z" + links: + - rel: "modifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/USERNAME" + responses: + "204": + description: "No Content. Successfully updated." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/PutPreferences" + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + examples: + Headers: + description: "204 No Content" + "400": + description: "Invalid body - Bad Request" + "403": + description: "Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId." + "404": + description: "Entity Not found. Incorrect flagCategoryPreferencesId." /organizations/{orgId}/flags: post: - operationId: createFlag + operationId: "createFlag" tags: - - Flags APIs - description: This resource will create a flag in the given organization. - summary: Create a flag + - "Flags APIs" + description: "This resource will create a flag in the given organization." + summary: "Create a flag" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" parameters: - $ref: "#/components/parameters/OrgId3" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ContentType' + $ref: "#/components/schemas/ContentType" requestBody: - description: | - The flag data to add. The new uuid will be assigned as ID of the newly created flag. + description: "The flag data to add. The new uuid will be assigned as ID of the newly created flag.\n" required: true content: - 'application/vnd.deere.axiom.v3+json': - schema: - $ref: '#/components/schemas/ValuesFlagIdPut' - examples: - No Headers: - value: - '@type': Flag - geometry: - type: Point - coordinates: - - -93.14959274063109 - - 41.66881548411553 - notes: SomeUnique123 - archived: false - proximityAlertEnabled: false - links: - - "@type": Link - rel: flagCategory - uri: https://sandboxapi.deere.com/platform/flagCategories/CATEGORY_ID - - "@type": Link - rel: field - uri: https://sandboxapi.deere.com/platform/organizations/123456/fields/FIELDS_ID + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ValuesFlagIdPut" + examples: + No Headers: + value: + "@type": "Flag" + geometry: + type: "Point" + coordinates: + - -93.14959274063109 + - 41.66881548411553 + notes: "SomeUnique123" + archived: false + proximityAlertEnabled: false + links: + - "@type": "Link" + rel: "flagCategory" + uri: "https://sandboxapi.deere.com/platform/flagCategories/CATEGORY_ID" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/FIELDS_ID" responses: - 200: - $ref: '#/components/responses/PostFlags' - 400: - description: | - - Not all data specified - 403: - description: Access forbidden. The user has no access to the org or is not allowed to create flags in the org. - 404: - description: | - Entity Not found. + "200": + $ref: "#/components/responses/PostFlags" + "400": + description: "- Not all data specified\n" + "403": + description: "Access forbidden. The user has no access to the org or is not allowed to create flags in the org." + "404": + description: "Entity Not found. + - No contributon definition ID is found - - Field link cannot be resolved (field not found) + - Field link cannot be resolved (field not found)\n" get: - summary: View flags list + summary: "View flags list" parameters: - $ref: "#/components/parameters/OrgId3" - $ref: "#/components/parameters/Accept-Language" @@ -243,32 +583,28 @@ paths: - $ref: "#/components/parameters/FlagScopes" - $ref: "#/components/parameters/ShapeTypes" - $ref: "#/components/parameters/Simple" - - $ref: '#/components/parameters/MetadataOnly' - - operationId: getFlagsForOrganization + - $ref: "#/components/parameters/MetadataOnly" + operationId: "getFlagsForOrganization" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" tags: - - Flags APIs - description: This resource will return a Flags list for Organization. + - "Flags APIs" + description: "This resource will return a Flags list for Organization." responses: - 200: - $ref: '#/components/responses/FlagsGet' - 403: - description: Access forbidden. The user does not have permission to access the given organization, or the organization does not exist. - - /organizations/{orgId}/fields/{fieldId}/flags: + "200": + $ref: "#/components/responses/FlagsGet" + "403": + description: "Access forbidden. The user does not have permission to access the given organization, or the organization does not exist." + /organizations/{orgId}/flags/{flagId}: get: - operationId: getOrgFieldFlags - summary: List flags for the field - tags: - - Flags APIs - description: This resource will return a list of flag objects associated with the field. + summary: "List a flag by org id and Flag id" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" parameters: - - $ref: "#/components/parameters/OrgId3" - - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FlagId" - $ref: "#/components/parameters/Accept-Language" - $ref: "#/components/parameters/Embed" - $ref: "#/components/parameters/StartTime" @@ -276,386 +612,737 @@ paths: - $ref: "#/components/parameters/CategoryIds" - $ref: "#/components/parameters/CategoryNames" - $ref: "#/components/parameters/RecordFilter" + - $ref: "#/components/parameters/FlagScopes" - $ref: "#/components/parameters/ShapeTypes" - - $ref: '#/components/parameters/Simple' - - $ref: '#/components/parameters/MetadataOnly' + - $ref: "#/components/parameters/Simple" + - $ref: "#/components/parameters/MetadataOnly" + operationId: "getFlagForOrganizationByFlagId" + tags: + - "Flags APIs" + description: "This endpoint will return a flag for a given org and Flag id." + responses: + "200": + $ref: "#/components/responses/FlagIdGet" + "403": + description: "Access forbidden. The user does not have permission to access the given organization." + "404": + description: "Entity Not found. No organization present for given orgId or no flag id present in the given org id" + put: + operationId: "updateFlagByIdOrgId" + summary: "Update flag by id" + tags: + - "Flags APIs" + description: "This resource will update flag by Organization and Flag Id." + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/OrgId2" + - $ref: "#/components/parameters/FlagId" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ValuesFlagIdPut" + examples: + No Header: + value: + "@type": "Flag" + id: "FlagId" + notes: "SomeRandomString" + geometry: + type: "Point" + coordinates: + - -95.14959274063109 + - 42.668815484 + archived: false + proximityAlertEnabled: false + links: + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "flagCategory" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/flagCategories/CATEGORYID" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ContentType" + responses: + "200": + description: "Update response by Flag Id" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "- No contributionDefinition link specified + - No category link specified\n" + "403": + description: "Forbidden Access" + "404": + description: "Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org" + delete: + operationId: "deleteFlagByIdOrgId" + summary: "Delete a flag for a given org" + tags: + - "Flags APIs" + description: "This resource will delete a single flag based on its Id and org id" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/FlagId" + - $ref: "#/components/parameters/OrgId" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ContentType" responses: - 200: - $ref: '#/components/responses/GetOrgId' - 403: - description: Forbidden. The user has no access to the given flag - 404: - description: Entity Not found. No organization and/or field with these ids. + "200": + description: "No Content. Flag deleted successfully." + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + "403": + description: "Forbidden. + - The user has no permission to delete the flag.\n" + "404": + description: "Entity Not found. Given flag id does not exist or given orgId does not present." components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag1: 'ag1' - ag3: 'ag3' parameters: + Accept-Language: + name: "Accept-Language" + in: "header" + description: "If embedding flag category, language that category name shall be returned within a flag, e.g., \"de-DE\"" + schema: + type: "string" + default: "en" + example: "de-DE" + Accept-Language_FlagCategories: + name: "Accept-Language" + in: "header" + description: "Language category names are being returned by the endpoint." + required: false + schema: + type: "string" + default: "en" + example: "de-DE" + CategoryId: + name: "categoryId" + in: "path" + description: "CategoryId to query for Category." + required: true + schema: + type: "string" + default: "N/A" + example: "7ba95d7a-f798-46d0-9bf9-c39c31bcf984" + CategoryId2: + name: "categoryId" + in: "path" + description: "CategoryId to query for Category." + required: true + schema: + type: "string" + default: "N/A" + example: "688c20bb-9609-4590-95c9-649ba65c06df" + CategoryId_FlagCategoriesPreferences: + name: "categoryId" + in: "path" + description: "CategoryId to query for preferences." + required: true + schema: + type: "string" + default: "N/A" + example: "7ba95d7a-f798-46d0-9bf9-c39c31bcf984" + CategoryIds: + name: "categoryIDs" + in: "query" + description: "Specify a comma-separated list of category GUIDs to retrieve" + schema: + type: "string" + default: "N/A" + example: "688c20bb-9609-4590-95c9-649ba65c06df,0aed8e88-c27c-424b-8b66-babfe7fcf5ee" + CategoryNames: + name: "categoryNames" + in: "query" + description: "Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used" + schema: + type: "string" + default: "N/A" + example: "ROCKS,WEEDS" + Embed: + name: "embed" + in: "query" + description: "Embed additional attributes if required to reduce the number of requests" + schema: + type: "string" + default: "N/A" + example: "flagCategory, flagCategoryWithPreferences, field, showRecordMetadata" + Embed_FlagCategories: + name: "embed" + in: "query" + description: "Embed additional attributes if required." + required: false + schema: + type: "string" + default: "N/A" + example: "preferences" + EndTime: + name: "endTime" + in: "query" + description: "Flags created before end time (in UTC) will be returned" + schema: + type: "string" + default: "now" + example: "2018-08-01T00:00:00Z" FieldId: - name: fieldId - in: path - description: Fields guid of the field. + name: "fieldId" + in: "path" + description: "Fields guid of the field." + required: true + schema: + type: "GUID" + default: "N/A" + example: "c634597d-3d1a-4975-93e9-acc6696658d2" + FlagCategoryPreferencesId: + name: "flagCategoryPreferencesId" + in: "path" + description: "flagCategoryPreferencesId to query for preferences." required: true schema: - type: GUID - default: N/A - example: c634597d-3d1a-4975-93e9-acc6696658d2 + example: "9ba95d7a-f798-46d0-9bf9-c39c31bcf984" + default: "N/A" + type: "string" + FlagCategoryPreferencesId2: + name: "flagCategoryPreferencesId" + in: "path" + description: "flagCategoryPreferencesId to query for preferences." + required: true + schema: + example: "688c20bb-9609-4590-95c9-649ba65c06df" + default: "N/A" + type: "string" + FlagId: + name: "flagId" + in: "path" + description: "flagId to query for flag" + required: true + schema: + type: "string" + default: "N/A" + example: "688c20bb-9609-4590-95c9-649ba65c06df" + FlagScopes: + name: "flagScopes" + in: "query" + description: "Specify whether to request global flags, field-related flags or both" + schema: + type: "string" + default: "all" + example: "global, field, all" + MetadataOnly: + name: "metadataOnly" + in: "query" + description: "Does not populate geometry, overrides simple if both are true" + schema: + type: "boolean" + default: "false" + example: "false" OrgId: - name: orgId - in: path - description: Org Id to query for Flag + name: "orgId" + in: "path" + description: "Org Id to query for Flag" required: true schema: - type: string - default: N/A + type: "string" + default: "N/A" example: 2101 OrgId2: - name: orgId - in: path - description: Organization Id + name: "orgId" + in: "path" + description: "Organization Id" required: true schema: - type: string - default: N/A + type: "string" + default: "N/A" example: 123456 - OrgId3: - name: orgId - in: path - description: Organization Id where the Flag belongs to + OrgId2_FlagCategories: + name: "orgId" + in: "path" required: true + description: "Organization Id." schema: - type: string - default: N/A + type: "string" + default: "N/A" example: 123456 - FlagId: - name: flagId - in: path - description: flagId to query for flag + OrgId3: + name: "orgId" + in: "path" + description: "Organization Id where the Flag belongs to" required: true schema: - type: string - default: N/A - example: 688c20bb-9609-4590-95c9-649ba65c06df - Accept-Language: - name: Accept-Language - in: header - description: If embedding flag category, language that category name shall be returned within a flag, e.g., "de-DE" + type: "string" + default: "N/A" + example: 123456 + OrgId3_FlagCategories: + name: "orgId" + in: "path" + required: true + description: "OrgId to query for Category" schema: - type: string - default: en - example: de-DE - Embed: - name: embed - in: query - description: Embed additional attributes if required to reduce the number of requests + type: "string" + default: "N/A" + example: 2101 + OrgId4: + name: "orgId" + in: "path" + required: true + description: "Organization Id where the Flag category belongs to" schema: - type: string - default: N/A - example: flagCategory, flagCategoryWithPreferences, field, showRecordMetadata - StartTime: - name: startTime - in: query - description: Flags created after start time (in UTC) will be returned + type: "string" + default: "N/A" + example: 123456 + OrgId_FlagCategories: + name: "orgId" + in: "path" + required: true + description: "OrgId to query for Org." schema: - type: string - default: N/A - example: '2018-08-01T00:00:00Z' - EndTime: - name: endTime - in: query - description: Flags created before end time (in UTC) will be returned + type: "string" + default: "N/A" + example: 123456 + OrgId_FlagCategoriesPreferences: + name: "orgId" + in: "path" + description: "orgId to query for preferences." + required: true schema: - type: string - default: now - example: '2018-08-01T00:00:00Z' - CategoryIds: - name: categoryIDs - in: query - description: Specify a comma-separated list of category GUIDs to retrieve + type: "string" + default: "N/A" + example: 123456 + OrganizationId: + name: "organizationId" + in: "path" + description: "orgId to query for preferences." + required: true schema: - type: string - default: N/A - example: 688c20bb-9609-4590-95c9-649ba65c06df,0aed8e88-c27c-424b-8b66-babfe7fcf5ee - CategoryNames: - name: categoryNames - in: query - description: Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used + type: "string" + default: "N/A" + example: 123456 + PrefKey: + name: "prefKey" + in: "query" + description: "CategoryId to query for preferences" + required: false schema: - type: string - default: N/A - example: ROCKS,WEEDS + type: "string" + example: "default" + default: "default" RecordFilter: - name: recordFilter - in: query - description: Request flags by archived status + name: "recordFilter" + in: "query" + description: "Request flags by archived status" schema: - type: string - default: 'active' - example: active, archived, all - FlagScopes: - name: flagScopes - in: query - description: Specify whether to request global flags, field-related flags or both - schema: - type: string - default: 'all' - example: global, field, all + type: "string" + default: "active" + example: "active, archived, all" ShapeTypes: - name: shapeTypes - in: query - description: Clients which cannot handle specific geometry types can select only supported ones. Request flags with geometry only of type + name: "shapeTypes" + in: "query" + description: "Clients which cannot handle specific geometry types can select only supported ones. Request flags with geometry only of type" schema: - type: string - default: Point, LineString, Polygon - example: Point + type: "string" + default: "Point, LineString, Polygon" + example: "Point" Simple: - name: simple - in: query - description: Populates simplified geometry + name: "simple" + in: "query" + description: "Populates simplified geometry" schema: - type: boolean - default: 'false' - example: 'false' - MetadataOnly: - name: metadataOnly - in: query - description: Does not populate geometry, overrides simple if both are true + type: "boolean" + default: "false" + example: "false" + StartTime: + name: "startTime" + in: "query" + description: "Flags created after start time (in UTC) will be returned" schema: - type: boolean - default: 'false' - example: 'false' - + type: "string" + default: "N/A" + example: "2018-08-01T00:00:00Z" responses: FlagIdGet: - description: Get response by Flag Id + description: "Get response by Flag Id" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/LinkFlagId' + $ref: "#/components/schemas/LinkFlagId" values: items: - $ref: '#/components/schemas/ValuesFlagId' + $ref: "#/components/schemas/ValuesFlagId" examples: No Header: - description: '200 OK -
          Content-Type: application/vnd.deere.axiom.v3+json -
          x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" value: - '@type': Flag - geometry: '{"type": "Point", "coordinates": [-93.14959274063109, 41.66881548411553] }' - notes: A big rock on the left after entering the field + "@type": "Flag" + geometry: "{\"type\": \"Point\", \"coordinates\": [-93.14959274063109, 41.66881548411553] }" + notes: "A big rock on the left after entering the field" archived: false proximityAlertEnabled: false links: - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: flagCategoryWithPrefrences - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences - - rel: createdBy - uri: https://sandboxapi.deere.com/platform/users/johndeeresystem - - rel: lastModifiedBy - uri: https://sandboxapi.deere.com/platform/users/john - - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/1234/fields/7b387eaa-187f-4bd8-acbc-c81748b6ad3b - id: 688c20bb-9609-4590-95c9-649ba65c06df - createdTime: '2018-07-01T21:00:11Z' - lastModifiedTime: '2018-07-01T21:10:10Z' + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "flagCategoryWithPrefrences" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences" + - rel: "createdBy" + uri: "https://sandboxapi.deere.com/platform/users/johndeeresystem" + - rel: "lastModifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/john" + - rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/7b387eaa-187f-4bd8-acbc-c81748b6ad3b" + id: "688c20bb-9609-4590-95c9-649ba65c06df" + createdTime: "2018-07-01T21:00:11Z" + lastModifiedTime: "2018-07-01T21:10:10Z" FlagsGet: - description: Get response for flags by org id + description: "Get response for flags by org id" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/LinkFlagId' + $ref: "#/components/schemas/LinkFlagId" values: items: - $ref: '#/components/schemas/ValuesFlagId' + $ref: "#/components/schemas/ValuesFlagId" examples: No Header: - description: '200 OK -
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/1234/flags?status=available&flagScope=all + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/flags?status=available&flagScope=all" total: 1 values: - - "@type": Flag - geometry: '{"type": "Point", "coordinates": [-93.14959274063109, 41.66881548411553]}' - notes: A big rock on the left after entering the field + - "@type": "Flag" + geometry: "{\"type\": \"Point\", \"coordinates\": [-93.14959274063109, 41.66881548411553]}" + notes: "A big rock on the left after entering the field" archived: false proximityAlertEnabled: false links: - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: flagCategoryWithPrefrences - uri: https://sandboxapi.deere.com/platform/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences - - rel: createdBy - uri: https://sandboxapi.deere.com/platform/users/johndeeresystem - - rel: lastModifiedBy - uri: https://sandboxapi.deere.com/platform/users/john - - rel: field - uri: https://sandboxapi.deere.com/platform/organizations/1234/fields/7b387eaa-187f-4bd8-acbc-c81748b6ad3b - id: 688c20bb-9609-4590-95c9-649ba65c06df - createdTime: '2018-07-01T21:00:11Z' - lastModifiedTime: '2018-07-01T21:10:10Z' + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "flagCategoryWithPrefrences" + uri: "https://sandboxapi.deere.com/platform/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences" + - rel: "createdBy" + uri: "https://sandboxapi.deere.com/platform/users/johndeeresystem" + - rel: "lastModifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/john" + - rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/1234/fields/7b387eaa-187f-4bd8-acbc-c81748b6ad3b" + id: "688c20bb-9609-4590-95c9-649ba65c06df" + createdTime: "2018-07-01T21:00:11Z" + lastModifiedTime: "2018-07-01T21:10:10Z" GetOrgId: - description: Returns a list of flags associated with the field. + description: "Returns a list of flags associated with the field." content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/LinkFlagId' + $ref: "#/components/schemas/LinkFlagId" values: items: - $ref: '#/components/schemas/ValuesFlagId' + $ref: "#/components/schemas/ValuesFlagId" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/c634597d-3d1a-4975-93e9-acc6696658d2/flags?status=available + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/c634597d-3d1a-4975-93e9-acc6696658d2/flags?status=available" total: 1 values: - - '@type': Flag - geometry: '{"type": "Point", "coordinates": [-93.14959274063109, 41.66881548411553] }' - notes: A big rock on the left after entering the field + - "@type": "Flag" + geometry: "{\"type\": \"Point\", \"coordinates\": [-93.14959274063109, 41.66881548411553] }" + notes: "A big rock on the left after entering the field" archived: false proximityAlertEnabled: false links: - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/123456 - - rel: flagCategoryWithPrefrences - uri: >- - https://sandboxapi.deere.com/platform/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences - - rel: createdBy - uri: https://sandboxapi.deere.com/platform/users/johndeeresystem - - rel: lastModifiedBy - uri: https://sandboxapi.deere.com/platform/users/john - - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/fields/c634597d-3d1a-4975-93e9-acc6696658d2 - id: 688c20bb-9609-4590-95c9-649ba65c06df - createdTime: '2018-07-01T21:00:11Z' - lastModifiedTime: '2018-07-01T21:10:10Z' + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/123456" + - rel: "flagCategoryWithPrefrences" + uri: "https://sandboxapi.deere.com/platform/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences" + - rel: "createdBy" + uri: "https://sandboxapi.deere.com/platform/users/johndeeresystem" + - rel: "lastModifiedBy" + uri: "https://sandboxapi.deere.com/platform/users/john" + - rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fields/c634597d-3d1a-4975-93e9-acc6696658d2" + id: "688c20bb-9609-4590-95c9-649ba65c06df" + createdTime: "2018-07-01T21:00:11Z" + lastModifiedTime: "2018-07-01T21:10:10Z" PostFlags: - description: Post the details by Flag Id + description: "Post the details by Flag Id" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/LinkFlagIdPost' + $ref: "#/components/schemas/LinkFlagIdPost" examples: Headers: - description: '201 Created
          Location: https://sandboxapi.deere.com/platform/flags/3e4f37a4-5667-49ae-9f6b-5a13e446dee6' - + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/flags/3e4f37a4-5667-49ae-9f6b-5a13e446dee6" schemas: + ContentType: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + FlagCategory: + properties: + categoryTitle: + type: "string" + description: "Name of the category." + example: "Rocks" + archived: + type: "boolean" + description: "Whether or not the category is archived" + example: "false" + default: false + preferred: + type: "boolean" + description: "Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org." + example: "true" + id: + type: "GUID" + readOnly: true + format: "uuid" + description: "GUID of a flag category." + example: "7c602ae8-4351-4640-9de8-88792bda83d7" + createdDate: + type: "datetime" + example: "2018-12-28T09:17:10.694Z" + lastModifiedDate: + type: "datetime" + example: "2018-12-28T09:17:10.694Z" + FlagCategory2: + properties: + categoryTitle: + type: "string" + description: "Name of the category." + example: "Rocks" + archived: + type: "boolean" + description: "Whether or not the category is archived" + example: "false" + default: false + preferred: + type: "boolean" + description: "Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org." + example: "true" + id: + type: "GUID" + readOnly: true + format: "uuid" + description: "GUID of a flag category." + example: "688c20bb-9609-4590-95c9-649ba65c06df" + createdDate: + type: "string" + example: "2018-12-18T13:29:14.167Z" + lastModifiedDate: + type: "string" + example: "2018-12-18T13:29:30.924Z" + FlagCategoryPreference: + type: "object" + description: "The object for keeping visual and non-visual preferences for the given FlagCategory.\n" + properties: + id: + type: "string" + description: "Id of the FlagCategoryPreferences resource." + format: "GUID" + example: "ac6a5bb5fae84b1da29459a8101295b0" + prefKey: + type: "string" + description: "Key name for the preference object to be identified by clients to support client-specific preferences" + example: "default" + default: "default" + hexColor: + type: "string" + description: "Color code for the flag category in hexadecimal format." + example: "#0BA74A" + createdTime: + type: "datetime" + example: "2018-07-01T21:00:11Z" + modifiedTime: + example: "2018-07-01T21:10:10Z" + type: "datetime" + GetPreferences: + properties: + modifiedBy: + example: "https://sandboxapi.deere.com/platform/users/rostaninoleg" + description: "Users Link." + LinkCategoryId: + properties: + organization: + description: "Organization Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456" + updateCategory: + description: "Update Category Link." + example: "https://sandboxapi.deere.com/platform/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + deleteCategory: + description: "Delete Category Link." + example: "https://sandboxapi.deere.com/platform/organizations/{orgId}/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7" + LinkCategoryId2: + properties: + organization: + description: "Organization Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456" + updateCategory: + description: "Update Category Link." + example: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" + deleteCategory: + description: "Delete Category Link." + example: "https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3" LinkFlagId: properties: flagCategoryWithPrefrences: - example: https://sandboxapi.deere.com/platform/organizations/1234/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences - description: Flag Category Preferences Link. + example: "https://sandboxapi.deere.com/platform/organizations/1234/flagCategories/47a229fc-aa09-4618-956c-1c29ae884326?embed=preferences" + description: "Flag Category Preferences Link." createdBy: - example: https://sandboxapi.deere.com/platform/users/johndeeresystem - description: Users Link. + example: "https://sandboxapi.deere.com/platform/users/johndeeresystem" + description: "Users Link." lastModifiedBy: - example: https://sandboxapi.deere.com/platform/users/john - description: Users Link. + example: "https://sandboxapi.deere.com/platform/users/john" + description: "Users Link." field: - example: https://sandboxapi.deere.com/platform/organizations/1234/fields/7b387eaa-187f-4bd8-acbc-c81748b6ad3b - description: Fields Link. + example: "https://sandboxapi.deere.com/platform/organizations/1234/fields/7b387eaa-187f-4bd8-acbc-c81748b6ad3b" + description: "Fields Link." LinkFlagIdPost: properties: flagCategory: - example: https://sandboxapi.deere.com/platform/flagCategories/CATEGORY_ID - description: Flag Category Link. + example: "https://sandboxapi.deere.com/platform/flagCategories/CATEGORY_ID" + description: "Flag Category Link." field: - example: https://sandboxapi.deere.com/platform/organizations/123456/fields/FIELDS_ID - description: Fields Link. + example: "https://sandboxapi.deere.com/platform/organizations/123456/fields/FIELDS_ID" + description: "Fields Link." LinkFlagIdPut: - type: Link + type: "Link" properties: flagCategory: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID/flagCategories/CATEGORYID - description: Flag Category Link. + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/flagCategories/CATEGORYID" + description: "Flag Category Link." required: true owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID - description: Organization Link. + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organization Link." field: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID - description: Field Link. - ContentType: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELDS_ID" + description: "Field Link." + PutPreferences: + properties: + modifiedBy: + example: "https://sandboxapi.deere.com/platform/users/USERNAME" + description: "Users Link." + PutResponse: properties: - Content-Type: application/vnd.deere.axiom.v3+json + categoryTitle: + type: "string" + description: "Name of the category." + example: "Rocks" + archived: + type: "boolean" + description: "Whether or not the category is archived" + example: "false" + default: false + preferred: + type: "boolean" + description: "Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org." + example: "true" ValuesFlagId: properties: geometry: - example: See sample response below - description: Currently only three geometries types (Point, LineString and Polygon) are supported. + example: "See sample response below" + description: "Currently only three geometries types (Point, LineString and Polygon) are supported." notes: - example: A big rock on the left after entering the field - type: string - description: Free text notes. + example: "A big rock on the left after entering the field" + type: "string" + description: "Free text notes." archived: - type: boolean - example: 'false' - description: Indicates whether the flag is archived (true) or not (false). Archived flags SHALL not be returned by endpoints if not requested explicitely by clients. + type: "boolean" + example: "false" + description: "Indicates whether the flag is archived (true) or not (false). Archived flags SHALL not be returned by endpoints if not requested explicitely by clients." proximityAlertEnabled: - type: boolean - example: 'false' - description: Indicates whether the proximity alert is enabled (true) or not (false) for the Flag. + type: "boolean" + example: "false" + description: "Indicates whether the proximity alert is enabled (true) or not (false) for the Flag." id: - type: string - example: 688c20bb-9609-4590-95c9-649ba65c06df - description: GUID of a flag. + type: "string" + example: "688c20bb-9609-4590-95c9-649ba65c06df" + description: "GUID of a flag." createdTime: - type: datetime - description: Date and time of flag creation in UTC. - example: '2018-07-01T21:00:11Z' + type: "datetime" + description: "Date and time of flag creation in UTC." + example: "2018-07-01T21:00:11Z" lastModifiedTime: - type: datetime - description: Date and time of last flag modification in UTC. - example: '2018-07-01T21:10:10Z' + type: "datetime" + description: "Date and time of last flag modification in UTC." + example: "2018-07-01T21:10:10Z" ValuesFlagIdPut: properties: geometry: - description: Currently only three geometries types (Point, LineString and Polygon) are supported. - type: object - example: See sample request below + description: "Currently only three geometries types (Point, LineString and Polygon) are supported." + type: "object" + example: "See sample request below" required: true notes: - type: string - description: Free text notes. - example: A big rock on the left after entering the field + type: "string" + description: "Free text notes." + example: "A big rock on the left after entering the field" archived: - description: Indicates whether the flag is archived (true) or not (false). Archived flags SHALL not be returned by endpoints if not requested explicitely by clients. - type: boolean - example: 'false' + description: "Indicates whether the flag is archived (true) or not (false). Archived flags SHALL not be returned by endpoints if not requested explicitely by clients." + type: "boolean" + example: "false" proximityAlertEnabled: - description: Indicates whether the proximity alert is enabled (true) or not (false) for the Flag. - type: boolean - example: 'false' + description: "Indicates whether the proximity alert is enabled (true) or not (false) for the Flag." + type: "boolean" + example: "false" links: items: - $ref: '#/components/schemas/LinkFlagIdPut' + $ref: "#/components/schemas/LinkFlagIdPut" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" +x-source-documents: + - endPointName: "flags" + id: 81 + - endPointName: "flag-categories" + id: 82 + - endPointName: "flag-categories-preferences" + id: 83 diff --git a/specs/raw/guidance-lines.yaml b/specs/raw/guidance-lines.yaml index f33ebdc..7a39b0e 100644 --- a/specs/raw/guidance-lines.yaml +++ b/specs/raw/guidance-lines.yaml @@ -1,581 +1,565 @@ -openapi: 3.0.0 +openapi: "3.0.0" info: - title: Guidance Lines API - description: Provides guidance line management within a field context. Management capabilities include creating, retrieving, editing, and archiving lines. + title: "Guidance Lines API" + description: "Provides guidance line management within a field context. Management capabilities include creating, retrieving, editing, and archiving lines." version: "3.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - partnerapi - - sandboxapi - - api - - apicert - - apiqa.tal - - apidev.tal + - "partnerapi" + - "sandboxapi" + - "api" + - "apicert" + - "apiqa.tal" + - "apidev.tal" paths: /organizations/{orgId}/fields/{fieldId}/guidanceLines: get: - summary: View guidance lines for a field - description: This endpoint will retrieve a list of guidance lines for a field. By default, the call will return only active guidance lines. - note: 'Response Details
          A collection of GuidanceLine Objects
          Please Note: This API does not support eTags.' + summary: "View guidance lines for a field" + description: "This endpoint will retrieve a list of guidance lines for a field. By default, the call will return only active guidance lines." + note: "Response Details
          A collection of GuidanceLine Objects
          Please Note: This API does not support eTags." parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - - $ref: '#/components/parameters/Status' - - $ref: '#/components/parameters/RecordFilter' - - $ref: '#/components/parameters/Embed' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/Status" + - $ref: "#/components/parameters/RecordFilter" + - $ref: "#/components/parameters/Embed" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" responses: - 200: - $ref: '#/components/responses/GuidanceLinesResponse' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/GuidanceLinesResponse" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" post: - summary: Create a guidance line - description: This endpoint will create a guidance line and associate it to a given field. This operation currently only supports the creation of AB Lines. + summary: "Create a guidance line" + description: "This endpoint will create a guidance line and associate it to a given field. This operation currently only supports the creation of AB Lines." parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" requestBody: - description: Specifies guidance line details + description: "Specifies guidance line details" required: true content: application/vnd.deere.axiom.v3+json: examples: No Header: value: - '@type': ABLine + "@type": "ABLine" aPoint: - '@type': Point + "@type": "Point" lat: 41.48958 lon: -90.49263851 bPoint: - '@type': Point + "@type": "Point" lat: 41.48965382 lon: -90.49263851 eastShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrEastShiftComponent - unit: cm + vrDomainId: "vrEastShiftComponent" + unit: "cm" northShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrNorthShiftComponent - unit: cm + vrDomainId: "vrNorthShiftComponent" + unit: "cm" spatialProjection: - '@type': SpatialProjection - projectionType: dtiProjectionDeere + "@type": "SpatialProjection" + projectionType: "dtiProjectionDeere" elevation: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0.5 - vrDomainId: vrElevation - unit: m - fieldUri: >- - https://sandboxapi.deere.com/platform/organizations/5555/fields/11111111-2222-3333-4444-555555555555 + vrDomainId: "vrElevation" + unit: "m" + fieldUri: "https://sandboxapi.deere.com/platform/organizations/5555/fields/11111111-2222-3333-4444-555555555555" tramOffset: 0 tramSpacing: 1 - name: North West + name: "North West" archived: false links: - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/orgId/fields/309b4c20-f33a-4c96-9a2c-913def198i0c + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/orgId/fields/309b4c20-f33a-4c96-9a2c-913def198i0c" schema: - $ref: '#/components/requestBodies/PostRequest' + $ref: "#/components/requestBodies/PostRequest" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" responses: - 200: - $ref: '#/components/responses/Created' - 400: - $ref: '#/components/responses/BadRequest' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/Created" + "400": + $ref: "#/components/responses/BadRequest" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" /organizations/{orgId}/fields/{fieldId}/guidanceLines/{guidanceLineId}: get: - summary: Retrieve a specific guidance line - description: This endpoint will return the subclass of guidance line represented by the specified ID. - note: 'Response Details
          See GuidanceLine Object Definition' + summary: "Retrieve a specific guidance line" + description: "This endpoint will return the subclass of guidance line represented by the specified ID." + note: "Response Details
          See GuidanceLine Object Definition" parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - - $ref: '#/components/parameters/GuidanceLineId' - - $ref: '#/components/parameters/Embed' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/GuidanceLineId" + - $ref: "#/components/parameters/Embed" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" responses: - 200: - $ref: '#/components/responses/GuidanceLinesRetrieve' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/GuidanceLinesRetrieve" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" put: - summary: Update a GuidanceLine - description: This endpoint will update the GuidanceLines name. + summary: "Update a GuidanceLine" + description: "This endpoint will update the GuidanceLines name." parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/FieldId' - - $ref: '#/components/parameters/GuidanceLineId' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/FieldId" + - $ref: "#/components/parameters/GuidanceLineId" requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/requestBodies/PutRequest' + $ref: "#/components/requestBodies/PutRequest" examples: No Header: value: - '@type': ABLine + "@type": "ABLine" aPoint: - '@type': Point + "@type": "Point" lat: -20.026227344199977 lon: 46.57202165157014 bPoint: - '@type': Point + "@type": "Point" lat: -20.03113688350134 lon: 46.572675704956055 eastShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrEastShiftComponent - unit: cm + vrDomainId: "vrEastShiftComponent" + unit: "cm" northShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrNorthShiftComponent - unit: cm + vrDomainId: "vrNorthShiftComponent" + unit: "cm" spatialProjection: - '@type': SpatialProjection - projectionType: dtiProjectionDeere + "@type": "SpatialProjection" + projectionType: "dtiProjectionDeere" elevation: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0.5 - vrDomainId: vrElevation - unit: m + vrDomainId: "vrElevation" + unit: "m" tramOffset: 0 tramSpacing: 0 - name: NewGuidanceLine - lastModifiedTime: '2018-12-10T21:24:39.567Z' + name: "NewGuidanceLine" + lastModifiedTime: "2018-12-10T21:24:39.567Z" archived: false security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" responses: - 200: - $ref: '#/components/responses/NoContent' - 400: - $ref: '#/components/responses/BadRequest' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/NoContent" + "400": + $ref: "#/components/responses/BadRequest" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" components: parameters: - OrgId: - name: orgId - in: path - description: The organization owning the guidance lines. - required: true + Embed: + name: "embed" + in: "query" + description: "Whether to return the track geometry for AB and Adaptive Curves. See Shapes Array" + required: false schema: - example: 127856 - type: string - format: int64 + type: "string" + example: "shapes" FieldId: - name: fieldId - in: path - description: The field that the guidance lines are associated with. + name: "fieldId" + in: "path" + description: "The field that the guidance lines are associated with." required: true schema: - type: GUID - example: 309b4c20-f33a-4c96-9a2c-913def198i0c + type: "GUID" + example: "309b4c20-f33a-4c96-9a2c-913def198i0c" GuidanceLineId: - name: guidanceLineId - in: path - description: The identifier of this guidance line. + name: "guidanceLineId" + in: "path" + description: "The identifier of this guidance line." required: true schema: - type: string - example: 2fda92b1-7517-4b2a-8166-7616eb20eb02 - format: uuid - Status: - name: status - in: query - description: Whether to include archived guidance lines. Valid values are "archived", "available", or "all". Default is "available". - required: false + type: "string" + example: "2fda92b1-7517-4b2a-8166-7616eb20eb02" + format: "uuid" + OrgId: + name: "orgId" + in: "path" + description: "The organization owning the guidance lines." + required: true schema: - type: string - example: archived + example: 127856 + type: "string" + format: "int64" RecordFilter: - name: recordFilter - in: query - description: Filter results based on status; Will default to active + name: "recordFilter" + in: "query" + description: "Filter results based on status; Will default to active" schema: - type: string - example: active, archived, all - Embed: - name: embed - in: query - description: 'Whether to return the track geometry for AB and Adaptive Curves. See Shapes Array' + type: "string" + example: "active, archived, all" + Status: + name: "status" + in: "query" + description: "Whether to include archived guidance lines. Valid values are \"archived\", \"available\", or \"all\". Default is \"available\"." required: false schema: - type: string - example: shapes - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag1: 'ag1' - ag3: 'ag3' - + type: "string" + example: "archived" requestBodies: PostRequest: - $ref: '#/components/schemas/GuidanceLine' + $ref: "#/components/schemas/GuidanceLine" PutRequest: - $ref: '#/components/schemas/GuidanceLinePut' + $ref: "#/components/schemas/GuidanceLinePut" responses: + BadRequest: + description: "Request Validation failure" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + Created: + description: "Created, with a Location header containing the URI of the newly created resource" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + items: + $ref: "#/components/schemas/LinkArrayPost" + total: + type: "integer" + format: "int32" + example: 1 + examples: + Headers: + description: "201 Created

          Location: https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines/2fda92b1-7517-4b2a-8166-7616eb20eb02" + Forbidden: + description: "The user does not have sufficient privileges to access this resource." GuidanceLinesResponse: - description: A collection of guidance lines + description: "A collection of guidance lines" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/LinksArrayGet' + $ref: "#/components/schemas/LinksArrayGet" total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines" total: 1 values: - - '@type': ABLine + - "@type": "ABLine" heading: 102.71825663467035 aPoint: - '@type': Point + "@type": "Point" lat: 41.74557323445754 lon: -92.41092564370683 bPoint: - '@type': Point + "@type": "Point" lat: 41.745060835194764 lon: -92.40789413452148 eastShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrEastShiftComponent - unit: cm + vrDomainId: "vrEastShiftComponent" + unit: "cm" northShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrNorthShiftComponent - unit: cm + vrDomainId: "vrNorthShiftComponent" + unit: "cm" tramOffset: 0 tramSpacing: 0 - saveMethod: dtiABLineMethodBPoint - erid: 0b36bcd2-6464-4680-b204-b0d1f61c4aad - id: 0b36bcd2-6464-4680-b204-b0d1f61c4aad - name: test - lastModifiedTime: '2019-06-27T19:37:08.151Z' + saveMethod: "dtiABLineMethodBPoint" + erid: "0b36bcd2-6464-4680-b204-b0d1f61c4aad" + id: "0b36bcd2-6464-4680-b204-b0d1f61c4aad" + name: "test" + lastModifiedTime: "2019-06-27T19:37:08.151Z" spatialProjection: - '@type': SpatialProjection - projectionType: dtiProjectionDeere + "@type": "SpatialProjection" + projectionType: "dtiProjectionDeere" elevation: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0.5 - vrDomainId: vrElevation - unit: m + vrDomainId: "vrElevation" + unit: "m" links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/1263342/fields/24aa9f68-c699-4f92-9e3e-9def42b8e175/guidanceLines/0b36bcd2-6464-4680-b204-b0d1f61c4aad - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/1263342/fields/24aa9f68-c699-4f92-9e3e-9def42b8e175 + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1263342/fields/24aa9f68-c699-4f92-9e3e-9def42b8e175/guidanceLines/0b36bcd2-6464-4680-b204-b0d1f61c4aad" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/1263342/fields/24aa9f68-c699-4f92-9e3e-9def42b8e175" archived: false GuidanceLinesRetrieve: - description: A collection of guidance lines + description: "A collection of guidance lines" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/LinksArrayGet' + $ref: "#/components/schemas/LinksArrayGet" total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: - '@type': ABLine + "@type": "ABLine" heading: 0 aPoint: - '@type': Point + "@type": "Point" lat: 41.48958 lon: -90.49263851 bPoint: - '@type': Point + "@type": "Point" lat: 41.48965382 lon: -90.49263851 eastShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrEastShiftComponent - unit: cm + vrDomainId: "vrEastShiftComponent" + unit: "cm" northShift: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0 - vrDomainId: vrNorthShiftComponent - unit: cm + vrDomainId: "vrNorthShiftComponent" + unit: "cm" tramOffset: 0 tramSpacing: 1 - saveMethod: dtiABLineMethodBPoint - erid: 2fda92b1-7517-4b2a-8166-7616eb20eb02 - id: 2fda92b1-7517-4b2a-8166-7616eb20eb02 - fieldUri: >- - https://sandboxapi.deere.com/platform/organizations/5555/fields/11111111-2222-3333-4444-555555555555 - name: North West - lastModifiedTime: '2017-09-18T17:06:41.484Z' + saveMethod: "dtiABLineMethodBPoint" + erid: "2fda92b1-7517-4b2a-8166-7616eb20eb02" + id: "2fda92b1-7517-4b2a-8166-7616eb20eb02" + fieldUri: "https://sandboxapi.deere.com/platform/organizations/5555/fields/11111111-2222-3333-4444-555555555555" + name: "North West" + lastModifiedTime: "2017-09-18T17:06:41.484Z" spatialProjection: - '@type': SpatialProjection - projectionType: dtiProjectionDeere + "@type": "SpatialProjection" + projectionType: "dtiProjectionDeere" elevation: - '@type': MeasurementAsDouble + "@type": "MeasurementAsDouble" valueAsDouble: 0.5 - vrDomainId: vrElevation - unit: m + vrDomainId: "vrElevation" + unit: "m" archived: false links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines/2fda92b1-7517-4b2a-8166-7616eb20eb02 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c - - Created: - description: Created, with a Location header containing the URI of the newly created resource - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - links: - items: - $ref: '#/components/schemas/LinkArrayPost' - total: - type: integer - format: int32 - example: 1 - examples: - Headers: - description: '201 Created

          - Location: https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines/2fda92b1-7517-4b2a-8166-7616eb20eb02' - + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c/guidanceLines/2fda92b1-7517-4b2a-8166-7616eb20eb02" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c" NoContent: - description: No Content. Request Completed Succesfully. + description: "No Content. Request Completed Succesfully." content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer - format: int32 + type: "integer" + format: "int32" example: 1 examples: Headers: - description: '204 No Content' - - BadRequest: - description: Request Validation failure - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/Errors' - - Forbidden: - description: - The user does not have sufficient privileges to access this resource. - + description: "204 No Content" NotFound: - description: The specified resource does not exist - + description: "The specified resource does not exist" schemas: Error: - type: object + type: "object" properties: message: - type: string - description: An english description of the error - example: was invalid because + type: "string" + description: "An english description of the error" + example: " was invalid because " code: - type: string - description: A string constant representing the type of error + type: "string" + description: "A string constant representing the type of error" example: 400 field: - type: string - description: The name of the property or parameter deemed invalid - example: Machine.serialNumber + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "Machine.serialNumber" gud: - type: string - format: uuid - description: A reference to this encounter of the error, for traceability and troubleshooting - example: 9b331708-10e8-4e15-8097-a9aed7455d6d + type: "string" + format: "uuid" + description: "A reference to this encounter of the error, for traceability and troubleshooting" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" invalidValue: - type: string - description: The value that was supplied for this field in the request + type: "string" + description: "The value that was supplied for this field in the request" example: null readOnly: true Errors: - type: array + type: "array" items: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" readOnly: true - LinksArrayGet: - properties: - field: - example: https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c - description: Fields Link. - LinkArrayPost: - properties: - field: - example: https://sandboxapi.deere.com/platform/organizations/orgId/fields/fieldId - description: Fields Link. - GuidanceLine: - type: object + type: "object" properties: - '@type': - description: Identifies the subclass of guidance line. - example: ABLine - type: string + "@type": + description: "Identifies the subclass of guidance line." + example: "ABLine" + type: "string" name: - type: string - description: The common name used by an end user to identify this guidance line. + type: "string" + description: "The common name used by an end user to identify this guidance line." example: "North West" archived: - type: boolean - description: Archived guidance lines will not be available for use in Setup Builder. - example: 'false' + type: "boolean" + description: "Archived guidance lines will not be available for use in Setup Builder." + example: "false" tramOffset: - description: Defines the number of tram lines in relation to the main track. Valid values are 0 - 20 - type: number - example: '0' + description: "Defines the number of tram lines in relation to the main track. Valid values are 0 - 20" + type: "number" + example: "0" tramSpacing: - description: The spacing between tram lines. - example: '0' - type: number + description: "The spacing between tram lines." + example: "0" + type: "number" aPoint: - description: The coordinate representing the A point of an AB Line. - type: object - example: '{ "@type": "Point", "lat": 41.74557323445754, "lon": -92.41092564370683 }' + description: "The coordinate representing the A point of an AB Line." + type: "object" + example: "{ \"@type\": \"Point\", \"lat\": 41.74557323445754, \"lon\": -92.41092564370683 }" bPoint: - description: The coordinate representing the B point of an AB Line. Alternatively, the heading can be supplied instead and this value will be calculated by the API. - type: object - example: '{ "@type": "Point", "lat": 41.745060835194764, "lon": -92.40789413452148 }' + description: "The coordinate representing the B point of an AB Line. Alternatively, the heading can be supplied instead and this value will be calculated by the API." + type: "object" + example: "{ \"@type\": \"Point\", \"lat\": 41.745060835194764, \"lon\": -92.40789413452148 }" heading: - description: The radial heading for the AB Line (with North being 0 Degrees). You cannot specify both a bPoint and a heading. The omitted value will be calculated. - type: number + description: "The radial heading for the AB Line (with North being 0 Degrees). You cannot specify both a bPoint and a heading. The omitted value will be calculated." + type: "number" example: 122.2365 eastShift: - description: The shift in the east direction. - type: object - example: '{ "@type": "MeasurementAsDouble", "valueAsDouble": 0, "vrDomainId": "vrEastShiftComponent", "unit": "cm" }' + description: "The shift in the east direction." + type: "object" + example: "{ \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrEastShiftComponent\", \"unit\": \"cm\" }" northShift: - description: The shift in the north direction. - type: object - example: '{ "@type": "MeasurementAsDouble", "valueAsDouble": 0, "vrDomainId": "vrNorthShiftComponent", "unit": "cm" }' + description: "The shift in the north direction." + type: "object" + example: "{ \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrNorthShiftComponent\", \"unit\": \"cm\" }" spatialProjection: - type: object - description: Spatial Projection used for guidance object. See “dtProjectionType” in the John Deere representation system for possible values. - example: '{ "@type": "SpatialProjection", "projectionType": "dtiProjectionDeere", "elevation": { "@type": "MeasurementAsDouble", "valueAsDouble": 0, "vrDomainId": "vrElevation", "unit": "m" } }' + type: "object" + description: "Spatial Projection used for guidance object. See “dtProjectionType” in the John Deere representation system for possible values." + example: "{ \"@type\": \"SpatialProjection\", \"projectionType\": \"dtiProjectionDeere\", \"elevation\": { \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrElevation\", \"unit\": \"m\" } }" fieldUri: - description: Client associated with farm. - example: https://sandboxapi.deere.com/platform/organizations/5555/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d - type: string + description: "Client associated with farm." + example: "https://sandboxapi.deere.com/platform/organizations/5555/fields/9369f3f6-2428-4bba-bf64-0a19cdaf007d" + type: "string" GuidanceLinePut: - type: object + type: "object" properties: - '@type': - description: Identifies the subclass of guidance line. - example: ABLine - type: string + "@type": + description: "Identifies the subclass of guidance line." + example: "ABLine" + type: "string" name: - type: string - description: The common name used by an end user to identify this guidance line. + type: "string" + description: "The common name used by an end user to identify this guidance line." example: "North West" archived: - type: boolean - description: Archived guidance lines will not be available for use in Setup Builder. - example: 'false' + type: "boolean" + description: "Archived guidance lines will not be available for use in Setup Builder." + example: "false" tramOffset: - description: Defines the number of tram lines in relation to the main track. Valid values are 0 - 20 - type: number - example: '0' + description: "Defines the number of tram lines in relation to the main track. Valid values are 0 - 20" + type: "number" + example: "0" tramSpacing: - description: The spacing between tram lines. - example: '0' - type: number + description: "The spacing between tram lines." + example: "0" + type: "number" aPoint: - description: The coordinate representing the A point of an AB Line. - type: object - example: '{ "@type": "Point", "lat": 41.74557323445754, "lon": -92.41092564370683 }' + description: "The coordinate representing the A point of an AB Line." + type: "object" + example: "{ \"@type\": \"Point\", \"lat\": 41.74557323445754, \"lon\": -92.41092564370683 }" bPoint: - description: The coordinate representing the B point of an AB Line. Alternatively, the heading can be supplied instead and this value will be calculated by the API. - type: object - example: '{ "@type": "Point", "lat": 41.745060835194764, "lon": -92.40789413452148 }' + description: "The coordinate representing the B point of an AB Line. Alternatively, the heading can be supplied instead and this value will be calculated by the API." + type: "object" + example: "{ \"@type\": \"Point\", \"lat\": 41.745060835194764, \"lon\": -92.40789413452148 }" heading: - description: The radial heading for the AB Line (with North being 0 Degrees). You cannot specify both a bPoint and a heading. The omitted value will be calculated. - type: number + description: "The radial heading for the AB Line (with North being 0 Degrees). You cannot specify both a bPoint and a heading. The omitted value will be calculated." + type: "number" example: 122.2365 eastShift: - description: The shift in the east direction. - type: object - example: '{ "@type": "MeasurementAsDouble", "valueAsDouble": 0, "vrDomainId": "vrEastShiftComponent", "unit": "cm" }' + description: "The shift in the east direction." + type: "object" + example: "{ \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrEastShiftComponent\", \"unit\": \"cm\" }" northShift: - description: The shift in the north direction. - type: object - example: '{ "@type": "MeasurementAsDouble", "valueAsDouble": 0, "vrDomainId": "vrNorthShiftComponent", "unit": "cm" }' + description: "The shift in the north direction." + type: "object" + example: "{ \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrNorthShiftComponent\", \"unit\": \"cm\" }" spatialProjection: - type: object - description: Spatial Projection used for guidance object. See “dtProjectionType” in the John Deere representation system for possible values. - example: '{ "@type": "SpatialProjection", "projectionType": "dtiProjectionDeere", "elevation": { "@type": "MeasurementAsDouble", "valueAsDouble": 0, "vrDomainId": "vrElevation", "unit": "m" } }' + type: "object" + description: "Spatial Projection used for guidance object. See “dtProjectionType” in the John Deere representation system for possible values." + example: "{ \"@type\": \"SpatialProjection\", \"projectionType\": \"dtiProjectionDeere\", \"elevation\": { \"@type\": \"MeasurementAsDouble\", \"valueAsDouble\": 0, \"vrDomainId\": \"vrElevation\", \"unit\": \"m\" } }" + LinkArrayPost: + properties: + field: + example: "https://sandboxapi.deere.com/platform/organizations/orgId/fields/fieldId" + description: "Fields Link." + LinksArrayGet: + properties: + field: + example: "https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c" + description: "Fields Link." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" diff --git a/specs/raw/harvest-id.yaml b/specs/raw/harvest-id.yaml index 8ade06d..43b2838 100644 --- a/specs/raw/harvest-id.yaml +++ b/specs/raw/harvest-id.yaml @@ -1,536 +1,511 @@ -openapi: 3.0.1 +openapi: "3.0.1" info: - title: HID Cotton Modules API - description: Provides access to HID Cotton Module event data - version: '3.0' + title: "HID Cotton Modules API" + description: "Provides access to HID Cotton Module event data" + version: "3.0" servers: -- url: https://{environment}.deere.com/platform - variables: - environment: - default: api - enum: - - api - - partnerapi - - sandboxapi - - apicert - - partnerapicert - - apiqa.tal - - partnerapiqa - - sandboxapiqa - + - url: "https://{environment}.deere.com/platform" + variables: + environment: + default: "api" + enum: + - "api" + - "partnerapi" + - "sandboxapi" + - "apicert" + - "partnerapicert" + - "apiqa.tal" + - "partnerapiqa" + - "sandboxapiqa" paths: /organizations/{orgId}/harvestIdentificationModules: get: tags: - - HID Modules - summary: Retrieve all Cotton HID modules for a given org - description: This endpoint will return list of HID Cotton modules in the system for the provided organization ID (filtered by user-level access). + - "HID Modules" + summary: "Retrieve all Cotton HID modules for a given org" + description: "This endpoint will return list of HID Cotton modules in the system for the provided organization ID (filtered by user-level access)." parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/Embed' - - $ref: '#/components/parameters/WrapStartDate' - - $ref: '#/components/parameters/WrapEndDate' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/Embed" + - $ref: "#/components/parameters/WrapStartDate" + - $ref: "#/components/parameters/WrapEndDate" headers: - - $ref: '#/components/parameters/Accept-UOM-System' - - $ref: '#/components/parameters/Accept-Yield-Preference' - + - $ref: "#/components/parameters/Accept-UOM-System" + - $ref: "#/components/parameters/Accept-Yield-Preference" security: - - OAuth2: [ files, ' ag2' ] + - OAuth2: + - "files" + - " ag2" responses: - 200: - $ref: '#/components/responses/HIDCottonModules' - 400: - $ref: '#/components/responses/BadDateRange' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/InputOrgIdInvalid' + "200": + $ref: "#/components/responses/HIDCottonModules" + "400": + $ref: "#/components/responses/BadDateRange" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/InputOrgIdInvalid" /organizations/{orgId}/harvestIdentificationModules/{serialNumber}: get: tags: - - HID Modules - summary: Retrieve a specific HID module by serial number - description: This endpoint will retrieve a specific HID module by serial number. + - "HID Modules" + summary: "Retrieve a specific HID module by serial number" + description: "This endpoint will retrieve a specific HID module by serial number." parameters: - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/ModuleSerialNumber' - - $ref: '#/components/parameters/Embed' + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/ModuleSerialNumber" + - $ref: "#/components/parameters/Embed" headers: - - $ref: '#/components/parameters/Accept-UOM-System' - - $ref: '#/components/parameters/Accept-Yield-Preference' + - $ref: "#/components/parameters/Accept-UOM-System" + - $ref: "#/components/parameters/Accept-Yield-Preference" security: - - OAuth2: [ files, ' ag2' ] + - OAuth2: + - "files" + - " ag2" responses: - 200: - $ref: '#/components/responses/SingleHIDCottonModule' - 403: - $ref: '#/components/responses/DoesNotHaveAccessToOrg' - 404: - $ref: '#/components/responses/HidModuleIdIsInvalid' - + "200": + $ref: "#/components/responses/SingleHIDCottonModule" + "403": + $ref: "#/components/responses/DoesNotHaveAccessToOrg" + "404": + $ref: "#/components/responses/HidModuleIdIsInvalid" components: parameters: + Accept-UOM-System: + name: "Accept-UOM-System" + in: "METRIC" + description: "Desired unit system. Takes ENGLISH or METRIC." + schema: + type: "string" + example: "ENGLISH" + enum: + - "ENGLISH" + - "METRIC" + - "MIXED" + default: "METRIC" + Accept-Yield-Preference: + name: "Accept-Yield-Preference" + in: "VOLUME" + description: "Desired yield representation (unit) type. Takes VOLUME or MASS." + required: false + schema: + type: "string" + example: "MASS" AcceptJSON: - name: Accept - in: header + name: "Accept" + in: "header" required: true schema: - type: string + type: "string" enum: - - application/vnd.deere.axiom.v3+json + - "application/vnd.deere.axiom.v3+json" + DeereTags: + name: "x-deere-signature" + in: "header" + description: "Refer to https://developer.deere.com/#!help&doc=.%2Fgetstarted%2FHELPdeereTags.htm" + schema: + type: "string" + format: "uuid" + example: "d5837765-4499-47b0-b2ab-6dde098e0e83" + Embed: + name: "embed" + in: "query" + description: "Related entities to embed. Possible values include clients, farms and field. (Note: embedding of clients and farms requires field to be embedded as well.)" + required: false + schema: + type: "string" + example: "clients,farms,field" ModuleSerialNumber: - name: moduleSerialNumber - in: path - description: Module Serial Number + name: "moduleSerialNumber" + in: "path" + description: "Module Serial Number" required: true schema: - type: string + type: "string" example: 14404565493 - OrgId: - name: orgId - in: path - description: Organization ID + name: "orgId" + in: "path" + description: "Organization ID" required: true schema: - type: string - format: int64 + type: "string" + format: "int64" example: 913523 - - Embed: - name: embed - in: query - description: 'Related entities to embed. Possible values include clients, farms and field. (Note: embedding of clients and farms requires field to be embedded as well.)' - required: false - schema: - type: string - example: clients,farms,field - - Accept-UOM-System: - name: Accept-UOM-System - in: METRIC - description: Desired unit system. Takes ENGLISH or METRIC. - schema: - type: string - example: ENGLISH - enum: - - ENGLISH - - METRIC - - MIXED - default: METRIC - Accept-Yield-Preference: - name: Accept-Yield-Preference - in: VOLUME - description: Desired yield representation (unit) type. Takes VOLUME or MASS. - required: false - schema: - type: string - example: MASS - - DeereTags: - name: x-deere-signature - in: header - description: 'Refer to https://developer.deere.com/#!help&doc=.%2Fgetstarted%2FHELPdeereTags.htm' + WrapEndDate: + name: "endDate" + in: "query" + description: "End of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the startDate parameter." schema: - type: string - format: uuid - example: d5837765-4499-47b0-b2ab-6dde098e0e83 - + type: "string" + format: "date-time" + example: "2020-01-01T00:00:00Z" WrapStartDate: - name: startDate - in: query - description: Start of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the endDate parameter. - schema: - type: string - format: date-time - example: '2019-01-01T00:00:00Z' - - WrapEndDate: - name: endDate - in: query - description: End of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the startDate parameter. + name: "startDate" + in: "query" + description: "Start of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the endDate parameter." schema: - type: string - format: date-time - example: '2020-01-01T00:00:00Z' - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - files: 'files' - 'ag2': 'ag2' - + type: "string" + format: "date-time" + example: "2019-01-01T00:00:00Z" responses: + BadDateRange: + description: "Bad Request - Start Date and End Date must both be present (or neither present), and Start Date should be chronologically first." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + DoesNotHaveAccessToFieldOperation: + description: "The user has not been provided access to the field operation specified by id." + DoesNotHaveAccessToOrg: + description: "The user has not been provided access to data in this organization" HIDCottonModules: - description: An array of HID Cotton modules + description: "An array of HID Cotton modules" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/LinkHarvestIdentificationModules' + $ref: "#/components/schemas/LinkHarvestIdentificationModules" total: - description: Number of results in the list - type: integer - format: int32 + description: "Number of results in the list" + type: "integer" + format: "int32" example: 761 values: - type: array + type: "array" items: - $ref: '#/components/schemas/HIDCottonModule' + $ref: "#/components/schemas/HIDCottonModule" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 9b539261-5e4b-4e1c-9201-3026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 9b539261-5e4b-4e1c-9201-3026f47109bb" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/;count=1?startDate=2018-10-08T00:00:00Z&endDate=2018-10-09T00:00:00Z - - rel: nextPage - uri: >- - https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/;start=1;count=1?startDate=2018-10-08T00:00:00Z&endDate=2018-10-09T00:00:00Z + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/;count=1?startDate=2018-10-08T00:00:00Z&endDate=2018-10-09T00:00:00Z" + - rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/;start=1;count=1?startDate=2018-10-08T00:00:00Z&endDate=2018-10-09T00:00:00Z" total: 130 values: - links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/18401233000 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/12345/fields/4dd005c7-0000-1000-4022-e1e1e113c667 - moduleSerialNumber: '18401233000' - moduleId: 3500B98123456C0448E4F32A + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/18401233000" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/fields/4dd005c7-0000-1000-4022-e1e1e113c667" + moduleSerialNumber: "18401233000" + moduleId: "3500B98123456C0448E4F32A" wrapLocation: - '@type': Point + "@type": "Point" lat: 37.777422 lon: -58.128557 - wrapDateTime: '2018-10-08T15:53:24.000Z' - dataIngestionDate: '2020-12-07T21:09:33.749Z' + wrapDateTime: "2018-10-08T15:53:24.000Z" + dataIngestionDate: "2020-12-07T21:09:33.749Z" tagCount: 3 - varietyName: ST 4946GLB2 - machinePin: 1N0C690PHJ1234567 - operator: OPERATOR 1 - ginName: AB123456 - producerName: AB123456 + varietyName: "ST 4946GLB2" + machinePin: "1N0C690PHJ1234567" + operator: "OPERATOR 1" + ginName: "AB123456" + producerName: "AB123456" moisture: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 9.4 - unitId: prcnt + unitId: "prcnt" diameter: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 89.76377952755907 - unitId: in + unitId: "in" weight: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 5178.658538722774 - unitId: lb + unitId: "lb" dropLocation: - '@type': Point + "@type": "Point" lat: 37.777422 lon: -58.128557 incrementalArea: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 1.265673763874821 - unitId: ac - comment: Here is a comment - fieldId: 4dd005c7-0000-1000-4022-e1e1e113c667 + unitId: "ac" + comment: "Here is a comment" + fieldId: "4dd005c7-0000-1000-4022-e1e1e113c667" orgId: 12345 - + HidModuleIdIsInvalid: + description: "The specified organization or HID Cotton module does not exist" + InputFieldOpGuidInvalid: + description: "The specified field operation does not exist." + InputOrgIdInvalid: + description: "The specified Organization ID does not exist" SingleHIDCottonModule: - description: A single HID Cotton Module + description: "A single HID Cotton Module" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/LinkSerialNumber' + $ref: "#/components/schemas/LinkSerialNumber" total: - description: Number of results in the list - type: integer - format: int32 + description: "Number of results in the list" + type: "integer" + format: "int32" example: 761 values: - type: array + type: "array" items: - $ref: '#/components/schemas/HIDCottonModule' + $ref: "#/components/schemas/HIDCottonModule" examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json
          - x-deere-signature: 9b539261-5e4b-4e1c-9201-3026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 9b539261-5e4b-4e1c-9201-3026f47109bb" value: links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/18401233000 - - '@type': Link - rel: field - uri: >- - https://sandboxapi.deere.com/platform/organizations/12345/fields/4dd005c7-0000-1000-4022-e1e1e113c667 - moduleSerialNumber: '18401233000' - moduleId: 3500B98123456C0448E4F32A + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/harvestIdentificationModules/18401233000" + - "@type": "Link" + rel: "field" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/fields/4dd005c7-0000-1000-4022-e1e1e113c667" + moduleSerialNumber: "18401233000" + moduleId: "3500B98123456C0448E4F32A" wrapLocation: - '@type': Point + "@type": "Point" lat: 37.777422 lon: -58.128557 - wrapDateTime: '2018-10-08T15:53:24.000Z' - dataIngestionDate: '2020-12-07T21:09:33.749Z' + wrapDateTime: "2018-10-08T15:53:24.000Z" + dataIngestionDate: "2020-12-07T21:09:33.749Z" tagCount: 3 - varietyName: ST 4946GLB2 - machinePin: 1N0C690PHJ1234567 - operator: OPERATOR 1 - ginName: AB123456 - producerName: AB123456 + varietyName: "ST 4946GLB2" + machinePin: "1N0C690PHJ1234567" + operator: "OPERATOR 1" + ginName: "AB123456" + producerName: "AB123456" moisture: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 9.4 - unitId: prcnt + unitId: "prcnt" diameter: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 89.76377952755907 - unitId: in + unitId: "in" weight: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 5178.658538722774 - unitId: lb + unitId: "lb" dropLocation: - '@type': Point + "@type": "Point" lat: 37.777422 lon: -58.128557 incrementalArea: - '@type': EventMeasurement + "@type": "EventMeasurement" value: 1.265673763874821 - unitId: ac - comment: Here is a comment - fieldId: 4dd005c7-0000-1000-4022-e1e1e113c667 + unitId: "ac" + comment: "Here is a comment" + fieldId: "4dd005c7-0000-1000-4022-e1e1e113c667" orgId: 12345 - Years: - description: A list of years + description: "A list of years" content: application/vnd.deere.axiom.v3+json: schema: - type: array + type: "array" items: - type: integer - format: int32 + type: "integer" + format: "int32" example: - - 2018 - - 2020 - - BadDateRange: - description: Bad Request - Start Date and End Date must both be present (or neither present), and Start Date should be chronologically first. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/Errors' - - HidModuleIdIsInvalid: - description: The specified organization or HID Cotton module does not exist - - InputOrgIdInvalid: - description: The specified Organization ID does not exist - - DoesNotHaveAccessToOrg: - description: The user has not been provided access to data in this organization - - DoesNotHaveAccessToFieldOperation: - description: The user has not been provided access to the field operation specified by id. - - InputFieldOpGuidInvalid: - description: The specified field operation does not exist. - + - 2018 + - 2020 schemas: - LinkHarvestIdentificationModules: - properties: - self: - description: Self Link. - example: https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules - LinkSerialNumber: - properties: - self: - description: Self Link. - example: https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules/14404565493 - field: - example: https://sandboxapi.deere.com/platform/organizations/123456/field/6547879-adfasdfa-dasf546-551das - description: Field Link. - organization: - example: https://sandboxapi.deere.com/platform/organizations/123456 - description: Organizations Link. - Link: - type: object - required: - - rel - - uri - description: A link provides a URI to access resources that are related to the response. - properties: - '@type': - type: string - rel: - type: string - description: The relation of the object to the linked resource. - example: self - uri: - type: string - format: uri - description: The URI to the related resource. - example: https://api.deere.com/platform/organizations/12345/harvestIdentificationModules/MHJL1232564 - - Point: - type: object + Errors: + type: "object" + format: "Errors/DataValidationException" properties: - '@type': - type: string - example: Point - lat: - type: number - format: double - description: The latitude of the point - example: 43.6187 - lon: - type: number - format: double - description: The longitude of the point - example: 116.2146 - + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + message: + type: "string" + description: "An english description of the error" + example: "End date should not be specified without start date" + code: + type: "string" + example: "validation_constraint_operation_end_date_without_start_date" + description: "A string constant representing the type of error" + field: + type: "string" + example: "startDate" + description: "The name of the property or parameter deemed invalid" + invalidValue: + type: "string" + example: "null" + description: "The value that was supplied for this field in the request" EventMeasurement: - type: object - description: A general representation of quantity and unit. + type: "object" + description: "A general representation of quantity and unit." properties: - '@type': - type: string - example: EventMeasurement + "@type": + type: "string" + example: "EventMeasurement" value: - type: number - format: double - description: The quantity represented by this measurement. + type: "number" + format: "double" + description: "The quantity represented by this measurement." example: 5.1 unitId: - type: string - description: The unit associated to the quantity measured - example: gal1ac-1. - + type: "string" + description: "The unit associated to the quantity measured" + example: "gal1ac-1." HIDCottonModule: - type: object - description: A data entity representing a single HID Cotton module + type: "object" + description: "A data entity representing a single HID Cotton module" properties: moduleSerialNumber: - type: string - description: Module Serial Number + type: "string" + description: "Module Serial Number" example: 14404565493 moduleId: - type: string - description: Module RFID - example: 3500B988061103035A9439F5 + type: "string" + description: "Module RFID" + example: "3500B988061103035A9439F5" wrapLocation: - type: - example: See sample response below. + type: null + example: "See sample response below." wrapDateTime: - x-zally-ignore: [D010] - type: datetime - description: Datetime when the module wrap started (GMT) - format: date-time - example: '2019-03-22T08:48:20Z' + x-zally-ignore: + - "D010" + type: "datetime" + description: "Datetime when the module wrap started (GMT)" + format: "date-time" + example: "2019-03-22T08:48:20Z" dataIngestionDate: - x-zally-ignore: [D010] - type: datetime - description: Datetime when the module was first processed - format: date-time - example: '2019-03-22T08:48:20Z' + x-zally-ignore: + - "D010" + type: "datetime" + description: "Datetime when the module was first processed" + format: "date-time" + example: "2019-03-22T08:48:20Z" tagCount: - type: integer - format: int32 - description: Number of times the RFID tags were read while the module wrap was being applied + type: "integer" + format: "int32" + description: "Number of times the RFID tags were read while the module wrap was being applied" example: 5 varietyName: - type: string - description: Cotton variety inside the module - example: Cotton ABC + type: "string" + description: "Cotton variety inside the module" + example: "Cotton ABC" machinePin: - type: string - description: Machine PIN - example: PCFVUGALC0067 + type: "string" + description: "Machine PIN" + example: "PCFVUGALC0067" operator: - type: string - description: Machine Operator - format: name - example: John Doe + type: "string" + description: "Machine Operator" + format: "name" + example: "John Doe" ginName: - type: string - description: Gin Name - example: AB123456 + type: "string" + description: "Gin Name" + example: "AB123456" producerName: - type: string - description: Producer Name - example: AB123456 + type: "string" + description: "Producer Name" + example: "AB123456" moisture: - type: - example: See sample response below. + type: null + example: "See sample response below." diameter: - type: - example: See sample response below. + type: null + example: "See sample response below." weight: - type: - example: See sample response below. + type: null + example: "See sample response below." dropLocation: - type: - example: See sample response below. + type: null + example: "See sample response below." incrementalArea: - type: - example: See sample response below. + type: null + example: "See sample response below." comment: - type: string - example: Here is a comment + type: "string" + example: "Here is a comment" fieldId: - type: GUID - example: qqwe524-0000-1000-4022-qsdfef23341 - description: Field Id + type: "GUID" + example: "qqwe524-0000-1000-4022-qsdfef23341" + description: "Field Id" orgId: - type: string + type: "string" example: 1234 - description: Organization ID - - Errors: - type: object - format: Errors/DataValidationException + description: "Organization ID" + Link: + type: "object" + required: + - "rel" + - "uri" + description: "A link provides a URI to access resources that are related to the response." properties: - errors: - type: array - items: - type: object - format: Error/ConstraintViolation - properties: - '@type': - type: string - example: Error - guid: - type: string - format: uuid - example: 9b331708-10e8-4e15-8097-a9aed7455d6d - message: - type: string - description: An english description of the error - example: End date should not be specified without start date - code: - type: string - example: validation_constraint_operation_end_date_without_start_date - description: A string constant representing the type of error - field: - type: string - example: startDate - description: The name of the property or parameter deemed invalid - invalidValue: - type: string - example: 'null' - description: The value that was supplied for this field in the request + "@type": + type: "string" + rel: + type: "string" + description: "The relation of the object to the linked resource." + example: "self" + uri: + type: "string" + format: "uri" + description: "The URI to the related resource." + example: "https://api.deere.com/platform/organizations/12345/harvestIdentificationModules/MHJL1232564" + LinkHarvestIdentificationModules: + properties: + self: + description: "Self Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules" + LinkSerialNumber: + properties: + self: + description: "Self Link." + example: "https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules/14404565493" + field: + example: "https://sandboxapi.deere.com/platform/organizations/123456/field/6547879-adfasdfa-dasf546-551das" + description: "Field Link." + organization: + example: "https://sandboxapi.deere.com/platform/organizations/123456" + description: "Organizations Link." + Point: + type: "object" + properties: + "@type": + type: "string" + example: "Point" + lat: + type: "number" + format: "double" + description: "The latitude of the point" + example: 43.6187 + lon: + type: "number" + format: "double" + description: "The longitude of the point" + example: 116.2146 + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + files: "files" + ag2: "ag2" diff --git a/specs/raw/machine-alerts.yaml b/specs/raw/machine-alerts.yaml index 35d1e6e..573fdc4 100644 --- a/specs/raw/machine-alerts.yaml +++ b/specs/raw/machine-alerts.yaml @@ -1,32 +1,26 @@ -openapi: 3.0.2 +openapi: "3.0.2" info: - description: Endpoints for Viewing machine information and their details. - title: Alerts endpoints - version: 1.0.0 + description: "Endpoints for Viewing machine information and their details." + title: "Alerts endpoints" + version: "1.0.0" servers: - - url: https://api.deere.com/platform - + - url: "https://api.deere.com/platform" paths: /machines/{principalId}/alerts: get: - description: - 'The alerts service allows clients to retrieve the information captured on the terminal when an alert occurred. - For example, an alert is generated by a machine when the fuel pressure is low or there is a calibration fault in the fuel injector.Various alert types include machine, geofence, and maintenance. Response details will vary based on the alert type, which you can find in the links. Some responses will contain a "definition" that will give further information, see below. - For each alert, the response links to the following resources: -
            -
          • machine: View machine information
          • -
          ' - note: Please Note - This API does not support eTags. - summary: Alerts + description: "The alerts service allows clients to retrieve the information captured on the terminal when an alert occurred. For example, an alert is generated by a machine when the fuel pressure is low or there is a calibration fault in the fuel injector.Various alert types include machine, geofence, and maintenance. Response details will vary based on the alert type, which you can find in the links. Some responses will contain a \"definition\" that will give further information, see below. For each alert, the response links to the following resources:
          • machine: View machine information
          " + note: "Please Note - This API does not support eTags." + summary: "Alerts" security: - - OAuth2: [eq1] + - OAuth2: + - "eq1" parameters: - $ref: "#/components/parameters/principalId" - $ref: "#/components/parameters/StartDate" - $ref: "#/components/parameters/EndDate" - $ref: "#/components/parameters/ExcludeAcknowledged" responses: - 200: + "200": $ref: "#/components/responses/AlertID" "401": $ref: "#/components/responses/Unauthorized" @@ -39,75 +33,65 @@ paths: "429": $ref: "#/components/responses/TooManyRequests" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Accept-Language: 'en2 - to specify which language you would like the notifications to be when returned in the response' - + Accept-Language: "en2 - to specify which language you would like the notifications to be when returned in the response" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - eq1: "eq1" - parameters: - principalId: - name: principalId - in: path - description: Principal ID of the machine/equipment. - required: true - schema: - type: string - default: N/A - example: "5432" - StartDate: - name: startDate - in: query - description: Returns alerts from a specified date onward. Requests are time-based with a maximum length of seven days. - required: false - schema: - type: datetime - default: 24 hours before the timestamp of the request - example: "2013-04-29T00:00:00Z" EndDate: - name: endDate - in: query - description: Returns alerts until a specific date. Requests are time-based with a maximum length of seven days. + name: "endDate" + in: "query" + description: "Returns alerts until a specific date. Requests are time-based with a maximum length of seven days." schema: - type: datetime - default: The current time of the request + type: "datetime" + default: "The current time of the request" example: "2013-05-02T00:00:00Z" ExcludeAcknowledged: - name: excludeAcknowledged - in: query - description: Excludes acknowledged alerts if "true." + name: "excludeAcknowledged" + in: "query" + description: "Excludes acknowledged alerts if \"true.\"" schema: - type: boolean + type: "boolean" default: "false" example: "true" - + StartDate: + name: "startDate" + in: "query" + description: "Returns alerts from a specified date onward. Requests are time-based with a maximum length of seven days." + required: false + schema: + type: "datetime" + default: "24 hours before the timestamp of the request" + example: "2013-04-29T00:00:00Z" + principalId: + name: "principalId" + in: "path" + description: "Principal ID of the machine/equipment." + required: true + schema: + type: "string" + default: "N/A" + example: "5432" responses: AlertID: - description: The list of machines for a organization. + description: "The list of machines for a organization." content: application/vnd.deere.axiom.v3+json: schema: properties: links: - type: array - description: Link list + type: "array" + description: "Link list" items: $ref: "#/components/schemas/AlertLink" total: example: 1 - format: int64 + format: "int64" minimum: 0 - type: integer + type: "integer" values: items: $ref: "#/components/schemas/AlertValue" @@ -116,352 +100,346 @@ components: description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/machines/123456/alerts?startDate=2020-05-06T19:15:11.000Z&endDate=2020-05-13T19:15:11.000Z + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/123456/alerts?startDate=2020-05-06T19:15:11.000Z&endDate=2020-05-13T19:15:11.000Z" total: 1 values: - - "@type": DiagnosticTroubleCodeAlert + - "@type": "DiagnosticTroubleCodeAlert" duration: - "@type": measurementAsInteger + "@type": "measurementAsInteger" valueAsInteger: "3" - unit: Seconds + unit: "Seconds" occurrences: "1" engineHours: - "@type": EngineHours + "@type": "EngineHours" reading: - "@type": measurementAsDouble + "@type": "measurementAsDouble" valueAsDouble: 668.25 - unit: Hours + unit: "Hours" machineLinearTime: 36951157 bus: "0" definition: - "@type": DiagnosticTroubleCodeAlertDefinition + "@type": "DiagnosticTroubleCodeAlertDefinition" suspectParameterName: "524019" failureModeIndicator: "31" bus: "0" sourceAddress: "140" - threeLetterAcronym: AIC + threeLetterAcronym: "AIC" id: "1234567" - description: >- - Other AIC 524019.31 Reverser lever left in incorrect position. - Return - to park to attempt recovery. + description: "Other AIC 524019.31 Reverser lever left in incorrect position. - Return to park to attempt recovery." links: - - "@type": Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/api/alertTypes/diagnosticTroubleCodeAlert/definitions/1328105 + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/api/alertTypes/diagnosticTroubleCodeAlert/definitions/1328105" id: "123456789" time: "2020-05-13T19:15:11.000Z" location: - "@type": Point + "@type": "Point" lat: 41.123456 lon: -90.234567 - color: BLUE - severity: INFO + color: "BLUE" + severity: "INFO" acknowledgementStatus: "N" ignored: false invisible: false links: - - "@type": Link - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/123456 - + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/123456" BadRequest: - description: The provided payload was invalid or malformed. + description: "The provided payload was invalid or malformed." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/BadRequestResponseBody" - Unauthorized: - description: The request could not be authorized with the given credentials. + Forbidden: + description: "The provided authorization is not allowed to access this resource." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/UnauthorizedResponseBody" - Forbidden: - description: The provided authorization is not allowed to access this - resource. + $ref: "#/components/schemas/ForbiddenResponseBody" + NotAcceptable: + description: "The given Accept headers did not allow for the content type this resource produces." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/ForbiddenResponseBody" + $ref: "#/components/schemas/NotAcceptableResponseBody" NotFound: - description: The requested resource could not be found. + description: "The requested resource could not be found." content: application/vnd.deere.axiom.v3+json: schema: $ref: "#/components/schemas/NotFoundResponseBody" - NotAcceptable: - description: The given Accept headers did not allow for the content type - this resource produces. + TooManyRequests: + description: "The server has received too many requests and cannot fulfill them. Try again at a later time." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/NotAcceptableResponseBody" - TooManyRequests: - description: The server has received too many requests and cannot fulfill - them. Try again at a later time. + $ref: "#/components/schemas/TooManyRequestsResponseBody" + Unauthorized: + description: "The request could not be authorized with the given credentials." content: application/vnd.deere.axiom.v3+json: schema: - $ref: "#/components/schemas/TooManyRequestsResponseBody" + $ref: "#/components/schemas/UnauthorizedResponseBody" schemas: - BadRequestResponseBody: - allOf: - - $ref: '#/components/schemas/ErrorResponseBody' - - properties: - code: - enum: - - '400' - format: numeric - type: string - message: - example: The provided payload was invalid or malformed. - type: string - type: object - UnauthorizedResponseBody: - allOf: - - $ref: '#/components/schemas/ErrorResponseBody' - - properties: - code: - enum: - - '401' - format: numeric - type: string - message: - example: The request could not be authorized with the given credentials. - type: string - type: object - ForbiddenResponseBody: - allOf: - - $ref: '#/components/schemas/ErrorResponseBody' - - properties: - code: - enum: - - '403' - format: numeric - type: string - message: - example: The provided authorization is not allowed to access this - resource. - type: string - type: object - NotAcceptableResponseBody: - allOf: - - $ref: '#/components/schemas/ErrorResponseBody' - - properties: - code: - enum: - - '406' - format: numeric - type: string - message: - example: The requested resource could not be produced in any acceptable - format. - type: string - type: object - NotFoundResponseBody: - allOf: - - $ref: '#/components/schemas/ErrorResponseBody' - - properties: - code: - enum: - - '404' - format: numeric - type: string - message: - example: The requested resource could not be found. - type: string - type: object - UID: - description: A unique string identifier. - example: e7c52f93-4bb6-48bb-b808-11b7b4f23059 - format: uuid - readOnly: true - type: string - ErrorResponseBody: - properties: - '@type': - description: This is the type definition for this reference object. - enum: - - Errors - readOnly: true - type: string - errors: - items: - properties: - '@type': - description: This is the type definition for this - reference object. - enum: - - Error - readOnly: true - type: string - code: - example: '400' - format: numeric - type: string - field: - description: The field in the request body that is - invalid. - example: id - type: string - guid: - $ref: '#/components/schemas/UID' - invalidValue: - description: The invalid value present in the field. - example: b48da18c-c0e6-4bcc-a00e-581035beab3d - type: string - message: - example: There was a problem with the request. - type: string - required: - - guid - - message - type: object - type: array - otherAttributes: - properties: - name: - example: example_name - type: string - value: - example: example_value - type: string - type: object - type: object - TooManyRequestsResponseBody: - allOf: - - $ref: '#/components/schemas/ErrorResponseBody' - - properties: - code: - enum: - - '429' - format: numeric - type: string - message: - example: The server has received too many requests. Try again - at a later time. - type: string - type: object AlertLink: properties: machine: - example: https://sandboxapi.deere.com/platform/machines/123456 - description: Machines Link. + example: "https://sandboxapi.deere.com/platform/machines/123456" + description: "Machines Link." AlertValue: properties: id: - type: string + type: "string" example: 13243546 - description: Alert ID. + description: "Alert ID." time: - type: datetime + type: "datetime" example: "2014-10-21T 10:32:30.000Z" - description: Time of alert. + description: "Time of alert." location: type: "See sample code." - example: See sample code. Includes latitude and longitude. - description: Location of machine during the alert. + example: "See sample code. Includes latitude and longitude." + description: "Location of machine during the alert." properties: lat: - type: double + type: "double" example: 53.285722 - description: Latitude + description: "Latitude" lon: - type: double + type: "double" example: 42.864666 - description: Longitude + description: "Longitude" color: - example: YELLOW - description: Alert color1. - type: string + example: "YELLOW" + description: "Alert color1." + type: "string" severity: - type: string - description: Severity of the alert1. - example: MEDIUM + type: "string" + description: "Severity of the alert1." + example: "MEDIUM" acknowledgementStatus: - type: string - example: N - description: Shows whether the alert was acknowledged. Values are "Y" or "N". + type: "string" + example: "N" + description: "Shows whether the alert was acknowledged. Values are \"Y\" or \"N\"." ignored: - type: boolean + type: "boolean" example: "false" - description: Shows whether the alert was ignored + description: "Shows whether the alert was ignored" invisible: - type: boolean + type: "boolean" example: "false" - description: Shows whether the alert was invisible + description: "Shows whether the alert was invisible" duration: - example: See sample code. Includes "unit" and "valueAsInteger." - type: object - description: Duration of the alert. + example: "See sample code. Includes \"unit\" and \"valueAsInteger.\"" + type: "object" + description: "Duration of the alert." properties: unit: - type: string - example: Seconds - description: Unit of duration measurement. + type: "string" + example: "Seconds" + description: "Unit of duration measurement." valueAsInteger: - type: integer + type: "integer" example: 160 - description: The duration measurement. + description: "The duration measurement." occurrences: - type: integer + type: "integer" example: 1 - description: Number of times this alert has occurred. + description: "Number of times this alert has occurred." engineHours: - example: See sample code. Includes "links," and "reading." - type: object - description: Engine hours of the machine during the alert. + example: "See sample code. Includes \"links,\" and \"reading.\"" + type: "object" + description: "Engine hours of the machine during the alert." properties: reading: - example: See sample code. Includes "unit," and "valueAsDouble." + example: "See sample code. Includes \"unit,\" and \"valueAsDouble.\"" type: "See sample code." - description: Engine hour reading. + description: "Engine hour reading." properties: unit: - type: string - example: hours - description: Unit of engine hour measurement. + type: "string" + example: "hours" + description: "Unit of engine hour measurement." valueAsDouble: - type: double + type: "double" example: 1528.7333 - description: Engine hour measurement. + description: "Engine hour measurement." machineLinearTime: - type: string + type: "string" example: 97604307 - description: Machine's linear time during the alert. + description: "Machine's linear time during the alert." definition: - example: See sample code. Includes "suspectParameterName", "failureModeIndicator", "bus", "sourceAddress", "threeLetterAcronym", "Id", and "description". - description: Further details about the alert and alert source. + example: "See sample code. Includes \"suspectParameterName\", \"failureModeIndicator\", \"bus\", \"sourceAddress\", \"threeLetterAcronym\", \"Id\", and \"description\"." + description: "Further details about the alert and alert source." type: "See sample code." properties: suspectParameterName: example: 12345 - type: string - description: Unique Diagnostic Trouble Code identifier. See vendor equipment documentation for SPN details. + type: "string" + description: "Unique Diagnostic Trouble Code identifier. See vendor equipment documentation for SPN details." failureModeIndicator: example: 12 - type: string - description: Indicates the failure mode for the SPN. See vendor equipment documentation for SPN failure mode details. + type: "string" + description: "Indicates the failure mode for the SPN. See vendor equipment documentation for SPN failure mode details." bus: example: "0" - type: integer - description: CAN (Controller Area Network) bus identifier. + type: "integer" + description: "CAN (Controller Area Network) bus identifier." sourceAddress: - type: string + type: "string" example: 123 - description: CAN bus Electronic Controller Unit (ECU) source address. + description: "CAN bus Electronic Controller Unit (ECU) source address." threeLetterAcronym: - type: string - example: AIC - description: CAN bus Electronic Controller Unit (ECU) abbreviation. + type: "string" + example: "AIC" + description: "CAN bus Electronic Controller Unit (ECU) abbreviation." id: - type: string - description: Diagnostic Trouble Code (DTC) Alert Id. + type: "string" + description: "Diagnostic Trouble Code (DTC) Alert Id." example: 12345 description: - type: string - example: Other AIC 524019.31 Reverser lever left in incorrect position. - Return to park to attempt recovery. - description: Diagnostic Trouble Code (DTC) description. + type: "string" + example: "Other AIC 524019.31 Reverser lever left in incorrect position. - Return to park to attempt recovery." + description: "Diagnostic Trouble Code (DTC) description." + BadRequestResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "400" + format: "numeric" + type: "string" + message: + example: "The provided payload was invalid or malformed." + type: "string" + type: "object" + ErrorResponseBody: + properties: + "@type": + description: "This is the type definition for this reference object." + enum: + - "Errors" + readOnly: true + type: "string" + errors: + items: + properties: + "@type": + description: "This is the type definition for this reference object." + enum: + - "Error" + readOnly: true + type: "string" + code: + example: "400" + format: "numeric" + type: "string" + field: + description: "The field in the request body that is invalid." + example: "id" + type: "string" + guid: + $ref: "#/components/schemas/UID" + invalidValue: + description: "The invalid value present in the field." + example: "b48da18c-c0e6-4bcc-a00e-581035beab3d" + type: "string" + message: + example: "There was a problem with the request." + type: "string" + required: + - "guid" + - "message" + type: "object" + type: "array" + otherAttributes: + properties: + name: + example: "example_name" + type: "string" + value: + example: "example_value" + type: "string" + type: "object" + type: "object" + ForbiddenResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "403" + format: "numeric" + type: "string" + message: + example: "The provided authorization is not allowed to access this resource." + type: "string" + type: "object" + NotAcceptableResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "406" + format: "numeric" + type: "string" + message: + example: "The requested resource could not be produced in any acceptable format." + type: "string" + type: "object" + NotFoundResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "404" + format: "numeric" + type: "string" + message: + example: "The requested resource could not be found." + type: "string" + type: "object" + TooManyRequestsResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "429" + format: "numeric" + type: "string" + message: + example: "The server has received too many requests. Try again at a later time." + type: "string" + type: "object" + UID: + description: "A unique string identifier." + example: "e7c52f93-4bb6-48bb-b808-11b7b4f23059" + format: "uuid" + readOnly: true + type: "string" + UnauthorizedResponseBody: + allOf: + - $ref: "#/components/schemas/ErrorResponseBody" + - properties: + code: + enum: + - "401" + format: "numeric" + type: "string" + message: + example: "The request could not be authorized with the given credentials." + type: "string" + type: "object" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/raw/machine-device-state-reports.yaml b/specs/raw/machine-device-state-reports.yaml index 153ec51..dfe22f9 100644 --- a/specs/raw/machine-device-state-reports.yaml +++ b/specs/raw/machine-device-state-reports.yaml @@ -1,111 +1,88 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - description: Endpoint provides device state report for Machines - version: 1.0.0 - title: Axiom - /deviceStateReports API + description: "Endpoint provides device state report for Machines" + version: "1.0.0" + title: "Axiom - /deviceStateReports API" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi - + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: - '/machines/{principalId}/deviceStateReports': + /machines/{principalId}/deviceStateReports: get: - operationId: getDeviceStateReportbyMachineId - summary: Terminal Device State Reports + operationId: "getDeviceStateReportbyMachineId" + summary: "Terminal Device State Reports" security: - - OAuth2: [ eq1 ] - description: 'A device state report is generated from a terminal at a specified time. The report contains the following information: -
            -
          • Engine State
          • -
          • Power State
          • -
          • Model State
          • -
          • RSSI Value (signal strength of the terminal)
          • -
          • Local Information
          • -
          • GPS State/Error
          • -
          • WIFI Info/Error
          • -
          • GSM/WIFI Antenna Type
          • -
          • Wifi SSID
          • -
          • BatteryVoltage
          • -
          • LastBootType
          • -
          • LastBootTimestamp
          • -
          • VehiclePowerState
          • -
          - This report is specific to, and identified by, the terminal, regardless of which machine it is connected to. Device state report information is collected from the machine terminal. A device state report is created for each machine call-in. -

          - Each requested DSR (one report for a single terminal request, and two or more for a multiple terminal request) links to -
          -
            -
          • Machine: Request a Device State Report from the specified machine. If the terminal is not linked to a machine, this link will not appear.
          • -
          • Terminal: Request a Device State Report from the specified terminal.
          • -
          ' - note: 'Please Note: This API does not support eTags.' + - OAuth2: + - "eq1" + description: "A device state report is generated from a terminal at a specified time. The report contains the following information:
          • Engine State
          • Power State
          • Model State
          • RSSI Value (signal strength of the terminal)
          • Local Information
          • GPS State/Error
          • WIFI Info/Error
          • GSM/WIFI Antenna Type
          • Wifi SSID
          • BatteryVoltage
          • LastBootType
          • LastBootTimestamp
          • VehiclePowerState
          This report is specific to, and identified by, the terminal, regardless of which machine it is connected to. Device state report information is collected from the machine terminal. A device state report is created for each machine call-in.

          Each requested DSR (one report for a single terminal request, and two or more for a multiple terminal request) links to
          • Machine: Request a Device State Report from the specified machine. If the terminal is not linked to a machine, this link will not appear.
          • Terminal: Request a Device State Report from the specified terminal.
          " + note: "Please Note: This API does not support eTags." tags: - - /deviceStateReports + - "/deviceStateReports" parameters: - - $ref: '#/components/parameters/principalId' - - $ref: '#/components/parameters/lastKnown' - - $ref: '#/components/parameters/startDate' - - $ref: '#/components/parameters/endDate' + - $ref: "#/components/parameters/principalId" + - $ref: "#/components/parameters/lastKnown" + - $ref: "#/components/parameters/startDate" + - $ref: "#/components/parameters/endDate" responses: - 200: - description: 'DeviceStateReport with location points list for the machine' + "200": + description: "DeviceStateReport with location points list for the machine" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/MyJD_links' + $ref: "#/components/schemas/MyJD_links" values: items: - $ref: '#/components/schemas/DeviceStateReport' + $ref: "#/components/schemas/DeviceStateReport" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports" total: 1 values: - - '@type': DeviceStateReport - time: '2010-10-04T14:35:05.000Z' + - "@type": "DeviceStateReport" + time: "2010-10-04T14:35:05.000Z" gatewayType: 2 location: - '@type': Point - lat: '41.597164' - lon: '-90.54383' + "@type": "Point" + lat: "41.597164" + lon: "-90.54383" altitude: - '@type': measurementAsDouble - unit: meters - valueAsDouble: '0.0' + "@type": "measurementAsDouble" + unit: "meters" + valueAsDouble: "0.0" minRSSI: - '@type': measurementAsDouble - unit: dbM - valueAsDouble: '0.0' + "@type": "measurementAsDouble" + unit: "dbM" + valueAsDouble: "0.0" maxRSSI: - '@type': measurementAsDouble - unit: dbM - valueAsDouble: '0.0' + "@type": "measurementAsDouble" + unit: "dbM" + valueAsDouble: "0.0" averageRSSI: - '@type': measurementAsDouble - unit: dbM - valueAsDouble: '0.0' - gpsFixTimestamp: '2010-10-04T14:35:05.000Z' + "@type": "measurementAsDouble" + unit: "dbM" + valueAsDouble: "0.0" + gpsFixTimestamp: "2010-10-04T14:35:05.000Z" engineState: 0 terminalPowerState: 0 batteryLevel: - '@type': measurementAsInteger - unit: Percent - valueAsInteger: '0' + "@type": "measurementAsInteger" + unit: "Percent" + valueAsInteger: "0" cellModemState: 0 cellModemAntennaState: 0 gpsModemState: 0 @@ -127,255 +104,253 @@ paths: failedToM2M: 0 cellModemError: 0 cellModemFirmwareLevelError: 0 - wifiSSID: vatican + wifiSSID: "vatican" batteryVoltage: 50 lastBootType: 2 - lastBootTimestamp: 2005-04-04T14:35:05.000Z + lastBootTimestamp: "2005-04-04T14:35:05.000Z" machineId: 2 vehiclePowerState: 2 - 410: - description: 'The requested resource is no longer available' - 403: - description: 'Invalid access to machine id' - 404: - description: 'Machines details does not exists' - + "403": + description: "Invalid access to machine id" + "404": + description: "Machines details does not exists" + "410": + description: "The requested resource is no longer available" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - eq1: 'eq1' parameters: + endDate: + name: "endDate1" + in: "query" + description: "Return DSR till the specified endDate." + required: false + schema: + type: "datetime" + format: "date-time" + default: "Current Time" + example: "2010-10-04T14:38:35.000Z" + lastKnown: + name: "lastKnown" + in: "query" + description: "If true, startDate and endDate won't be used. Send true to fetch lastKnown call History." + required: false + schema: + type: "boolean" + format: "boolean" + default: "false" + example: "true" principalId: - name: principalId - in: path - description: Principal ID of the machine/equipment. + name: "principalId" + in: "path" + description: "Principal ID of the machine/equipment." required: true schema: - type: string - default: N/A + type: "string" + default: "N/A" example: 5432 startDate: - name: startDate1 - in: query - description: Return DSR from the specified startDate. - required: false - schema: - type: datetime - default: 2 months old from CurrentTime - format: date-time - example: '2010-10-04T14:35:05.000Z' - endDate: - name: endDate1 - in: query - description: Return DSR till the specified endDate. + name: "startDate1" + in: "query" + description: "Return DSR from the specified startDate." required: false schema: - type: datetime - format: date-time - default: Current Time - example: '2010-10-04T14:38:35.000Z' - lastKnown: - name: lastKnown - in: query - description: If true, startDate and endDate won't be used. Send true to fetch lastKnown call History. - required: false - schema: - type: boolean - format: boolean - default: 'false' - example: 'true' + type: "datetime" + default: "2 months old from CurrentTime" + format: "date-time" + example: "2010-10-04T14:35:05.000Z" schemas: - MyJD_links: - description: The link object provides links to ressources which are related to the response - properties: - self: - example: https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports - description: Device State Report Link. - DeviceStateReport: - description: Device State Report - type: object + description: "Device State Report" + type: "object" properties: time: - description: UTC Timestamp of the DSR. - type: datetime - format: date-time - example: '2025-04-04T14:35:05.000Z' + description: "UTC Timestamp of the DSR." + type: "datetime" + format: "date-time" + example: "2025-04-04T14:35:05.000Z" gatewayType1: - description: This number identifies the type of gateway the report traveled through. - type: byte - format: int32 + description: "This number identifies the type of gateway the report traveled through." + type: "byte" + format: "int32" example: 2 location: - description: Shows the latitude, longitude, and altitude at the time of this report. - type: Point - example: See sample response below. + description: "Shows the latitude, longitude, and altitude at the time of this report." + type: "Point" + example: "See sample response below." minRSSI: - description: The minimum signal strength of the machine at the time of the report. - type: measurementAsDouble - example: See sample response below. + description: "The minimum signal strength of the machine at the time of the report." + type: "measurementAsDouble" + example: "See sample response below." maxRSSI: - description: The maximum signal strength of the machine at the time of the report. - type: measurementAsDouble - example: See sample response below. + description: "The maximum signal strength of the machine at the time of the report." + type: "measurementAsDouble" + example: "See sample response below." averageRSSI: - description: The average signal strength of the machine at the time of the report. - type: measurementAsDouble - example: See sample response below. + description: "The average signal strength of the machine at the time of the report." + type: "measurementAsDouble" + example: "See sample response below." gpsFixTimestamp: - description: UTC Timestamp, of the GPS position of the Machine. - type: datetime - format: date-time - example: '2025-04-04T14:35:05.000Z' + description: "UTC Timestamp, of the GPS position of the Machine." + type: "datetime" + format: "date-time" + example: "2025-04-04T14:35:05.000Z" engineState: - description: This number identifies the power state of the engine. - type: byte - format: int32 - example: '1' + description: "This number identifies the power state of the engine." + type: "byte" + format: "int32" + example: "1" terminalPowerState: - description: This number identifies the power state of the terminal. - type: byte - format: int32 - example: '1' + description: "This number identifies the power state of the terminal." + type: "byte" + format: "int32" + example: "1" batteryLevel: - description: Battery level of the terminal. - type: measurementAsInteger - example: See sample response below. + description: "Battery level of the terminal." + type: "measurementAsInteger" + example: "See sample response below." cellModemState: - description: This number indicates whether any errors were occurring on the Cell Modem at the time of this report. - type: byte - format: int32 - example: '0' + description: "This number indicates whether any errors were occurring on the Cell Modem at the time of this report." + type: "byte" + format: "int32" + example: "0" cellModemAntennaState: - description: This number indicates whether any errors were occurring on the Cell Modem Antenna at the time of this report. - type: byte - format: int32 + description: "This number indicates whether any errors were occurring on the Cell Modem Antenna at the time of this report." + type: "byte" + format: "int32" example: 1 gpsModemState: - description: This number indicates whether any errors were occurring on the GPS Modem at the time of this report. - type: byte - format: int32 + description: "This number indicates whether any errors were occurring on the GPS Modem at the time of this report." + type: "byte" + format: "int32" example: 1 gpsAntennaState: - description: This number indicates whether any errors were occurring on the GPS Antenna at the time of this report. - type: byte - format: int32 + description: "This number indicates whether any errors were occurring on the GPS Antenna at the time of this report." + type: "byte" + format: "int32" example: 1 network: - description: Identifies the sattelite or cellular network through which the report was sent by the terminal. - type: byte - format: int32 + description: "Identifies the sattelite or cellular network through which the report was sent by the terminal." + type: "byte" + format: "int32" example: 1 rssi: - description: Last reported RSSI (signal strength) of the network. - type: integer - format: int32 + description: "Last reported RSSI (signal strength) of the network." + type: "integer" + format: "int32" example: 7 gpsError: - description: This number identifies any gps error occured - type: byte - format: int32 + description: "This number identifies any gps error occured" + type: "byte" + format: "int32" example: 4 gpsFirmwareLevelError: - description: This number identifies any gps firmware error - type: byte - format: int32 + description: "This number identifies any gps firmware error" + type: "byte" + format: "int32" example: 1 tetheringStatus: - description: This number identifies wifi tethering status - type: byte - format: int32 - example: '0' + description: "This number identifies wifi tethering status" + type: "byte" + format: "int32" + example: "0" apStatus: - description: This number identifies wifi access point(ap) status - type: byte - format: int32 + description: "This number identifies wifi access point(ap) status" + type: "byte" + format: "int32" example: 1 m2mMode: - description: This number identifies wifi machine to machine(m2m) mode - type: byte - format: int32 + description: "This number identifies wifi machine to machine(m2m) mode" + type: "byte" + format: "int32" example: 1 tetheringConnected: - description: This number identifies wifi tethering connection - type: byte - format: int32 + description: "This number identifies wifi tethering connection" + type: "byte" + format: "int32" example: 1 apConnected: - description: This number identifies wifi access point connection - type: byte - format: int32 + description: "This number identifies wifi access point connection" + type: "byte" + format: "int32" example: 1 m2mConnected: - description: This number identifies wifi machine to machine connection - type: byte - format: int32 + description: "This number identifies wifi machine to machine connection" + type: "byte" + format: "int32" example: 1 gsmAntennaType: - description: This number identifies gsm Antenna type - type: byte - format: int32 + description: "This number identifies gsm Antenna type" + type: "byte" + format: "int32" example: 7 wifiAntennaType: - description: This number identifies wifi Antenna type - type: byte - format: int32 + description: "This number identifies wifi Antenna type" + type: "byte" + format: "int32" example: 3 antennaFailure: - description: This number identifies the antenna failure state - type: byte - format: int32 + description: "This number identifies the antenna failure state" + type: "byte" + format: "int32" example: 1 failedToTether: - description: This number identifies the Tethering failure state - type: byte - format: int32 - example: '0' + description: "This number identifies the Tethering failure state" + type: "byte" + format: "int32" + example: "0" failedToM2M: - description: This number identifies the machine to machine connection failure state - type: byte - format: int32 - example: '0' + description: "This number identifies the machine to machine connection failure state" + type: "byte" + format: "int32" + example: "0" cellModemError: - description: This number identifies any cell modem error ocurred - type: byte - format: int32 + description: "This number identifies any cell modem error ocurred" + type: "byte" + format: "int32" example: 0 cellModemFirmwareLevelError: - description: This number identifies any cell modem firmware level error ocurred - type: byte - format: int32 + description: "This number identifies any cell modem firmware level error ocurred" + type: "byte" + format: "int32" example: 0 wifiSSID: - description: SSID being used for tethering at the time the message is generated - type: string - example: vatican + description: "SSID being used for tethering at the time the message is generated" + type: "string" + example: "vatican" batteryVoltage: - description: This number identifies the MTG Battery Voltage (Unswitched Power Supply) in Hundredths of a Volt - type: double - format: int64 + description: "This number identifies the MTG Battery Voltage (Unswitched Power Supply) in Hundredths of a Volt" + type: "double" + format: "int64" example: 12.64 lastBootType: - description: This number identifies if the device was cold booted or warm booted - type: integer - format: int32 + description: "This number identifies if the device was cold booted or warm booted" + type: "integer" + format: "int32" example: 2 lastBootTimestamp: - description: UTC Timestamp, when the device was booted up last time - type: datetime - format: date-time - example: '2005-04-04T14:35:05.000Z' + description: "UTC Timestamp, when the device was booted up last time" + type: "datetime" + format: "date-time" + example: "2005-04-04T14:35:05.000Z" machineId: - description: This number identifies the principalId for which this records was generated - type: integer - format: int32 + description: "This number identifies the principalId for which this records was generated" + type: "integer" + format: "int32" example: 123456 vehiclePowerState: - description: This number identifies the Vehicle Power State at the time this record is generated - type: byte - format: int32 + description: "This number identifies the Vehicle Power State at the time this record is generated" + type: "byte" + format: "int32" example: 2 + MyJD_links: + description: "The link object provides links to ressources which are related to the response" + properties: + self: + example: "https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports" + description: "Device State Report Link." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/raw/machine-engine-hours.yaml b/specs/raw/machine-engine-hours.yaml index f11828c..6fa9178 100644 --- a/specs/raw/machine-engine-hours.yaml +++ b/specs/raw/machine-engine-hours.yaml @@ -1,168 +1,161 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - description: Endpoint provides engine Hours for Machines - version: 1.0.0 - title: Axiom - /engineHours API + description: "Endpoint provides engine Hours for Machines" + version: "1.0.0" + title: "Axiom - /engineHours API" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi - + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: - '/machines/{principalId}/engineHours': + /machines/{principalId}/engineHours: get: - operationId: fetchEngineHoursForMachine - summary: Engine Hours - description: The engine hours service returns the last reported number of hours that a machine's engine has recorded.Each response includes a timestamp for the report and the source of the report.For each returned engine hours report, the response will include a link to the machine's information. - note: Please Note - This API does not support eTags. + operationId: "fetchEngineHoursForMachine" + summary: "Engine Hours" + description: "The engine hours service returns the last reported number of hours that a machine's engine has recorded.Each response includes a timestamp for the report and the source of the report.For each returned engine hours report, the response will include a link to the machine's information." + note: "Please Note - This API does not support eTags." tags: - - /engineHours + - "/engineHours" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" parameters: - - name: principalId - in: path - description: Principal ID of the machine/equipment. + - name: "principalId" + in: "path" + description: "Principal ID of the machine/equipment." required: true schema: - type: string + type: "string" example: 5432 - default: N/A - - name: startDate - in: query - description: Start date. + default: "N/A" + - name: "startDate" + in: "query" + description: "Start date." required: false schema: - type: datetime - format: date-time - example: '2015-02-03T9:00:00.000Z' - default: N/A - - name: endDate - in: query - description: End date. + type: "datetime" + format: "date-time" + example: "2015-02-03T9:00:00.000Z" + default: "N/A" + - name: "endDate" + in: "query" + description: "End date." required: false schema: - type: datetime - format: date-time + type: "datetime" + format: "date-time" example: "2015-02-03T10:42:24.282Z" - default: N/A - - name: lastKnown - in: query - description: If true, returned only the last known engine hour reading. startDate and endDate are ignored. + default: "N/A" + - name: "lastKnown" + in: "query" + description: "If true, returned only the last known engine hour reading. startDate and endDate are ignored." required: false - style: form + style: "form" explode: true schema: - type: boolean - format: boolean - example: 'true' - default: 'false' - + type: "boolean" + format: "boolean" + example: "true" + default: "false" responses: - 200: - description: EngineHours with list reporting time for the machine + "200": + description: "EngineHours with list reporting time for the machine" content: - 'application/vnd.deere.axiom.v3+json': + application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/EngineHours_Response' + $ref: "#/components/schemas/EngineHours_Response" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/machines/4321/engineHours?lastKnown=false + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/4321/engineHours?lastKnown=false" total: 2 values: - reading: - '@type': measurementAsDouble + "@type": "measurementAsDouble" valueAsDouble: 1.1833333 links: null - unit: Hours - reportTime: '2010-10-04T15:06:34.000Z' - source: TM + unit: "Hours" + reportTime: "2010-10-04T15:06:34.000Z" + source: "TM" links: - - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/4321 + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/4321" - reading: - '@type': measurementAsDouble + "@type": "measurementAsDouble" valueAsDouble: 1.1833333 links: null - unit: Hours - reportTime: '2010-10-04T15:04:33.000Z' - source: TM + unit: "Hours" + reportTime: "2010-10-04T15:04:33.000Z" + source: "TM" links: - - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/4321 - 403: - description: 'Invalid access to machine id' - 404: - description: 'Machine does not exists with given machine id' - + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/4321" + "403": + description: "Invalid access to machine id" + "404": + description: "Machine does not exists with given machine id" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - eq1: 'eq1' schemas: + EngineHours: + description: "Engine Hours" + type: "object" + properties: + reading: + required: true + description: "The number of hours the engine has been running." + example: "<valueAsDouble>523.5166666666667</valueAsDouble>" + type: "measurementAsDouble" + reportTime: + required: true + description: "Timestamp at which the report was created." + type: "datetime" + format: "date-time" + example: "2010-10-04T14:35:05.000Z" + source1: + type: "string" + description: "Device which collected the data." + example: "CI" EngineHours_Response: - description: Page of engineHours information for the machine. - type: object + description: "Page of engineHours information for the machine." + type: "object" properties: links: required: true - description: Link list - type: array + description: "Link list" + type: "array" items: $ref: "#/components/schemas/MyJD_links" total: required: true - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 1 values: required: true - type: array + type: "array" items: $ref: "#/components/schemas/EngineHours" - MyJD_links: - description: The link object provides links to ressources which are related to the response + description: "The link object provides links to ressources which are related to the response" properties: machine: - description: Machines Link. - example: https://sandboxapi.deere.com/platform/machines/4321 - - EngineHours: - description: Engine Hours - type: object - properties: - reading: - required: true - description: The number of hours the engine has been running. - example: '<valueAsDouble>523.5166666666667</valueAsDouble>' - type: measurementAsDouble - reportTime: - required: true - description: Timestamp at which the report was created. - type: datetime - format: date-time - example: "2010-10-04T14:35:05.000Z" - source1: - type: string - description: Device which collected the data. - example: CI - - + description: "Machines Link." + example: "https://sandboxapi.deere.com/platform/machines/4321" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/raw/machine-hours-of-operation.yaml b/specs/raw/machine-hours-of-operation.yaml index b7139b3..e134247 100644 --- a/specs/raw/machine-hours-of-operation.yaml +++ b/specs/raw/machine-hours-of-operation.yaml @@ -1,178 +1,176 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - description: Endpoint provides hours of Operation for Machines - version: 1.0.0 - title: Axiom - /hoursOfOperation API + description: "Endpoint provides hours of Operation for Machines" + version: "1.0.0" + title: "Axiom - /hoursOfOperation API" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi - + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: - '/machines/{principalId}/hoursOfOperation': + /machines/{principalId}/hoursOfOperation: get: - operationId: fetchHoursOfOperation - summary: Hours of Operation + operationId: "fetchHoursOfOperation" + summary: "Hours of Operation" description: "The Hours of Operation service allows the user to view the durations for which the engine was on or off during a specified time period. You will also be able to view the last known state of the machine's engine. Each request returns a link to machine, which will return a state report for the specified machine.
          Note: When the terminal is powered off, hours of operation are not recorded." - note: 'Please Note: This API does not support eTags.' + note: "Please Note: This API does not support eTags." tags: - - /hoursOfOperation + - "/hoursOfOperation" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" parameters: - - name: principalId - in: path - description: PrincipalId of Machine/Equipment. + - name: "principalId" + in: "path" + description: "PrincipalId of Machine/Equipment." required: true schema: - type: string - format: Long + type: "string" + format: "Long" example: "5432" - default: N/A - - name: organizationId - in: query - description: Organization Id of the Machine/Equipment. + default: "N/A" + - name: "organizationId" + in: "query" + description: "Organization Id of the Machine/Equipment." required: false schema: - type: string - format: Long + type: "string" + format: "Long" example: "98765" - default: N/A - - name: startDate - in: query - description: Filters hours of operation starting from a specified date. Request date as UTC Timestamp. + default: "N/A" + - name: "startDate" + in: "query" + description: "Filters hours of operation starting from a specified date. Request date as UTC Timestamp." required: false schema: - type: datetime - format: date-time + type: "datetime" + format: "date-time" example: "2013-04-29T00:00:00Z" - default: N/A - - name: endDate - in: query - description: Filters hours of operation before a specified date. Request date as UTC Timestamp. + default: "N/A" + - name: "endDate" + in: "query" + description: "Filters hours of operation before a specified date. Request date as UTC Timestamp." required: false schema: - type: datetime - format: date-time + type: "datetime" + format: "date-time" example: "2013-04-30T23:30:00Z" - default: N/A - - name: detailedState - in: query - description: Current Supported DetailedStates (Send one at a time) - RearPTOEngagement, GenericMachineUtilization, GenericEngineUtilization, RoadbuildingMachineState, AutonomyMachineState and FrontWheelDriveActuatorState + default: "N/A" + - name: "detailedState" + in: "query" + description: "Current Supported DetailedStates (Send one at a time) - RearPTOEngagement, GenericMachineUtilization, GenericEngineUtilization, RoadbuildingMachineState, AutonomyMachineState and FrontWheelDriveActuatorState" required: false schema: - type: string - example: FrontWheelDriveActuatorState - - name: summarizeDuration - in: query - description: Only EngagedStates of RearPTOEngagement and FWDActuatorState are returned after merging, if the duration between 2 consecutive EngagedStates is less than provided value. + type: "string" + example: "FrontWheelDriveActuatorState" + - name: "summarizeDuration" + in: "query" + description: "Only EngagedStates of RearPTOEngagement and FWDActuatorState are returned after merging, if the duration between 2 consecutive EngagedStates is less than provided value." required: false schema: - type: string - format: Integer + type: "string" + format: "Integer" example: "5" responses: - 200: - description: HoursOfOperation with list engine State at times for the machine + "200": + description: "HoursOfOperation with list engine State at times for the machine" content: - 'application/vnd.deere.axiom.v3+json': + application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/HoursOfOperation_Response' + $ref: "#/components/schemas/HoursOfOperation_Response" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/machines/5432/hoursOfOperation + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/5432/hoursOfOperation" total: 2 values: - links: - - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/5432 - startDate: '2013-04-29T00:00:00Z' - endDate: '2013-04-30T00:00:00Z' + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/5432" + startDate: "2013-04-29T00:00:00Z" + endDate: "2013-04-30T00:00:00Z" engineState: 0 - detailedState : "PTO Status On" + detailedState: "PTO Status On" - links: - - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/5432 - startDate: '2013-04-29T00:00:00Z' - endDate: '2013-04-30T00:00:00Z' + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/5432" + startDate: "2013-04-29T00:00:00Z" + endDate: "2013-04-30T00:00:00Z" engineState: 0 - detailedState : "PTO Status On" - 403: - description: 'Invalid access to machine id' - 404: - description: 'Machine does not exists with given machine id' - + detailedState: "PTO Status On" + "403": + description: "Invalid access to machine id" + "404": + description: "Machine does not exists with given machine id" components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - eq1: 'eq1' schemas: + HoursOfOperation: + description: "Hours Of Operation" + type: "object" + properties: + startDate: + required: true + x-zally-ignore: + - "D010" + description: "Time at which the machine started. Returns a UTC Timestamp." + type: "datetime" + format: "date-time" + example: "2013-04-29T00:00:00Z" + endDate: + required: true + x-zally-ignore: + - "D010" + description: "Time at which the machine stopped. Returns a UTC Timestamp." + type: "datetime" + format: "date-time" + example: "2013-04-30T23:30:00Z" + engineState: + required: true + type: "integer" + description: "The returned value indicates the current state of the engine1" + format: "boolean" + example: "1" + detailedState: + description: "The returned value indicates the user queried definedType value." + type: "string" + example: "PTO Status On" HoursOfOperation_Response: - description: Page of hoursOfOperation information for the machine. + description: "Page of hoursOfOperation information for the machine." properties: links: - description: Link list - type: array + description: "Link list" + type: "array" items: $ref: "#/components/schemas/MyJD_links" total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 1 values: - type: array + type: "array" items: $ref: "#/components/schemas/HoursOfOperation" - MyJD_links: - description: The link object provides links to ressources which are related to the response + description: "The link object provides links to ressources which are related to the response" properties: machine: - example: https://sandboxapi.deere.com/platform/machines/5432 - description: Machines Link. - - - HoursOfOperation: - description: Hours Of Operation - type: object - properties: - startDate: - required: true - x-zally-ignore: [D010] - description: Time at which the machine started. Returns a UTC Timestamp. - type: datetime - format: date-time - example: "2013-04-29T00:00:00Z" - endDate: - required: true - x-zally-ignore: [D010] - description: Time at which the machine stopped. Returns a UTC Timestamp. - type: datetime - format: date-time - example: "2013-04-30T23:30:00Z" - engineState: - required: true - type: integer - description: The returned value indicates the current state of the engine1 - format: boolean - example: '1' - detailedState: - description: The returned value indicates the user queried definedType value. - type: string - example: "PTO Status On" + example: "https://sandboxapi.deere.com/platform/machines/5432" + description: "Machines Link." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" diff --git a/specs/raw/machine-locations.yaml b/specs/raw/machine-locations.yaml index 69c13b3..7c29a72 100644 --- a/specs/raw/machine-locations.yaml +++ b/specs/raw/machine-locations.yaml @@ -1,161 +1,511 @@ -openapi: 3.0.1 +openapi: "3.0.1" info: - title: Machine locations history API - description: Endpoints related to machine locations and location history without - considering machine data - version: 1.0.0 + title: "Machine locations history API" + description: "Endpoints related to machine locations and location history without considering machine data" + version: "1.0.0" servers: - - url: https://api.deere.com/platform + - url: "https://api.deere.com/platform" paths: + /machines/{principalId}/breadcrumbs: + get: + operationId: "getBreadcrumbsByMachineId" + summary: "Machine Breadcrumbs" + description: "This resource allows the client to get the following details of a Machine:
          • Speed
          • Fuel Level
          • Direction of Machine (heading)
          • Machine State
          • Machine State Defined Type Id
          • Correlation Id
          • Location
          • Altitude
          • Origin
          • Created TimeStamp
          " + security: + - OAuth2: + - "eq1" + tags: + - "Breadcrumbs" + parameters: + - name: "principalId" + in: "path" + description: "principalId of Machine/Equipment." + required: true + schema: + type: "string" + example: 7099 + - name: "orgId" + in: "query" + description: "OrganizationId" + required: false + schema: + type: "string" + example: 2551 + - name: "startDate" + in: "query" + description: "UTC format Start Date.If null, 'current time - 24 hours' will be treated as startDate." + required: false + schema: + type: "datetime" + format: "date-time" + example: "2019-01-16T00:00:00.000Z" + - name: "endDate" + in: "query" + description: "UTC format End Date. If null, current time will be treated as endDate." + required: false + schema: + type: "datetime" + format: "date-time" + example: "2019-01-16T23:59:59.999Z" + - name: "lastKnown" + in: "query" + description: "Default value: false. Valid values: true or false. If true, then date parameters are not used and the last known location of the machine will be sent in the response." + required: false + schema: + type: "boolean" + default: false + example: "true" + - name: "Accept-Language" + in: "header" + description: "Accept Language. If not provided, the default Locale is US. Else, Locale will be searched on the basis of language." + required: false + schema: + type: "string" + example: "true" + default: "en" + responses: + "200": + description: "Breadcrumb list for the machine" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Breadcrumbs_Response" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/7099/breadcrumbs?lastKnown=true" + total: 1 + values: + - "@type": "Breadcrumb" + createTimestamp: "2018-12-18T08:30:03.789Z" + speed: + "@type": "measurementAsDouble" + valueAsDouble: 35 + unit: "km1hr-1" + heading: + "@type": "measurementAsInteger" + valueAsInteger: "33" + machineState: + "@type": "Breadcrumb$MachineState" + rawState: 1 + fuelLevel: + "@type": "measurementAsDouble" + valueAsDouble: 19 + unit: "prcnt" + principalId: + description: "Principal/Equipment id of which the location corresponds to." + type: "integer" + example: 123456 + origin: "BREADCRUMB" + correlationId: "1162b8ad-bbca-4c91-8c0e-2f2794b250a1" + point: + "@type": "Point" + lat: 18.513935 + lon: 73.927629 + altitude: + "@type": "measurementAsDouble" + valueAsDouble: 0 + unit: "m" + eventTimestamp: "2018-11-18T08:40:51.000Z" + links: + - "@type": "Link" + rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/7099" + "403": + description: "The user does not have access to the machine or is not allowed to see machine locations" + "404": + description: "Machine not found" /machines/{principalId}/locationHistory: get: tags: - - Alpha + - "Alpha" description: "The machine location service allows the client to view a list of location reports for a machine.A location report will include the machine's longitude, latitude, and altitude.For each location report, the response will link to the /machines resource." - note: 'Please Note: This API does not support eTags.' - summary: Machine Location History + note: "Please Note: This API does not support eTags." + summary: "Machine Location History" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" parameters: - - name: principalId - in: path - description: Principal Id of Machine/Equipment. + - name: "principalId" + in: "path" + description: "Principal Id of Machine/Equipment." required: true schema: - type: string - default: N/A + type: "string" + default: "N/A" example: 5432 - format: int64 - - name: lastKnown - in: query - description: Includes the last known machine location. + format: "int64" + - name: "lastKnown" + in: "query" + description: "Includes the last known machine location." schema: - type: boolean - default: N/A - example: 'false' - - name: startDate - in: query - description: 'Retrieves results that occurred after a specified date.If start date is not passedin the API request then start Date is considered as end date minus 1 day. The format is in the ISO 8601 Standard.' + type: "boolean" + default: "N/A" + example: "false" + - name: "startDate" + in: "query" + description: "Retrieves results that occurred after a specified date.If start date is not passedin the API request then start Date is considered as end date minus 1 day. The format is in the ISO 8601 Standard." schema: - type: datetime - default: N/A - example: '2010-10-04T14:35:05.000Z' - format: date - - name: endDate - in: query - description: 'Retrieves results that occurred before a specified date. If end date is not passed in the API requestthen end Date is considered as start date plus 1 day. The format is in the ISO 8601 Standard.Also startDate and endDate time interval range should be <=1 month.Example if startDate=2020-10-01T00:00:00.000Z endDate should be <=2010-10-31T23:59:59.000Z' + type: "datetime" + default: "N/A" + example: "2010-10-04T14:35:05.000Z" + format: "date" + - name: "endDate" + in: "query" + description: "Retrieves results that occurred before a specified date. If end date is not passed in the API requestthen end Date is considered as start date plus 1 day. The format is in the ISO 8601 Standard.Also startDate and endDate time interval range should be <=1 month.Example if startDate=2020-10-01T00:00:00.000Z endDate should be <=2010-10-31T23:59:59.000Z" schema: - type: datetime - default: N/A - example: '2010-10-04T14:38:35.000Z' - format: date + type: "datetime" + default: "N/A" + example: "2010-10-04T14:38:35.000Z" + format: "date" responses: - 200: - description: Location list for the machine + "200": + description: "Location list for the machine" content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: - type: array - description: Link list + type: "array" + description: "Link list" items: - $ref: '#/components/schemas/MyJD_links' + $ref: "#/components/schemas/MyJD_links" total: - type: integer - description: Number of results in the list + type: "integer" + description: "Number of results in the list" values: - type: array + type: "array" items: - $ref: '#/components/schemas/ReportedLocation' + $ref: "#/components/schemas/ReportedLocation" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/machines/4321/locationHistory + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/machines/4321/locationHistory" total: 2 values: - point: lat: 41.597164 lon: -90.54383 altitude: - "@type": measurementAsDouble + "@type": "measurementAsDouble" valueAsDouble: 0 links: null - unit: meters + unit: "meters" links: null - eventTimestamp: 2010-10-20T22:32:16.000Z - gpsFixTimestamp: 1970-01-01T00:00:00.000Z + eventTimestamp: "2010-10-20T22:32:16.000Z" + gpsFixTimestamp: "1970-01-01T00:00:00.000Z" links: - - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/4321 + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/4321" - point: lat: 41.597305 lon: -90.543884 altitude: - "@type": measurementAsDouble + "@type": "measurementAsDouble" valueAsDouble: 0 links: null - unit: meters + unit: "meters" links: null - eventTimestamp: 2010-10-04T15:06:34.000Z - gpsFixTimestamp: 2010-10-04T15:06:24.000Z + eventTimestamp: "2010-10-04T15:06:34.000Z" + gpsFixTimestamp: "2010-10-04T15:06:24.000Z" links: - - rel: machine - uri: https://sandboxapi.deere.com/platform/machines/4321 - - 403: - description: The user does not have access to the machine or is not allowed - to see mahcine locations + - rel: "machine" + uri: "https://sandboxapi.deere.com/platform/machines/4321" + "403": + description: "The user does not have access to the machine or is not allowed to see mahcine locations" content: {} - 404: - description: Machine not found + "404": + description: "Machine not found" content: {} components: - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - eq1: 'eq1' schemas: + Breadcrumb: + description: "Breadcrumb object containing location information and location-relevant machine data.\n" + type: "object" + allOf: + - $ref: "#/components/schemas/Breadcrumb_POST" + properties: + machineState: + $ref: "#/components/schemas/BreadcrumbMachineState" + origin: + required: true + type: "string" + description: "The origin of the breadcrumb" + enum: + - "JDLINK" + - "BREADCRUMB" + default: "BREADCRUMB" + example: "BREADCRUMB" + links: + required: true + type: "array" + items: + type: "object" + allOf: + - $ref: "#/components/schemas/Breadcrumb_links" + BreadcrumbMachineState: + description: "Human readable title for the machine state\n" + type: "object" + properties: + "@type": + type: "string" + default: "Breadcrumb$MachineState" + example: "Breadcrumb$MachineState" + value: + type: "string" + enum: + - "Idle" + - "Working" + - "Transporting" + example: "Idle" + Breadcrumb_POST: + description: "Breadcrumb object containing location information and location-relevant machine data.\n" + type: "object" + required: + - "@type" + - "createTimestamp" + - "eventTimestamp" + - "point" + - "links" + properties: + "@type": + description: "Object type" + type: "string" + default: "Breadcrumb" + example: "Breadcrumb" + createTimestamp: + description: "The timestamp of the breadcrumb creation" + type: "string" + format: "date-time" + example: "2018-08-07T10:12:50.911Z" + eventTimestamp: + description: "The timestamp of the event when the position was changed" + type: "string" + format: "date-time" + example: "2018-08-07T10:12:50.911Z" + point: + $ref: "#/components/schemas/Point" + speed: + $ref: "#/components/schemas/MeasurementAsDouble" + heading: + $ref: "#/components/schemas/MeasurementAsInteger" + fuelLevel: + $ref: "#/components/schemas/MeasurementAsDouble" + principalId: + description: "Principal/Equipment id of which the location corresponds to.\n" + type: "integer" + example: 123456 + correlationId: + description: "Correlation ID has to be submitted with location or breadcrumb information when uploading to the server. + + Corellation ID information can be used by clients for diagnostics of the parallel assignment of the same machine to 2 or more devices. + + Workflow for detection: + + - My app subscribed to the machine locations changes of my org + + - If selecting a machine on my mobile device my app checks whether some device sent locations recently which was not mine (not one of my previous or current correlationIDs) - Prevention! + + - If I detected that another device sent location - the app warns me and I'm able to decide to select the machine or not + + - I started MLT and my app sends the breadcrumb/location with my correlationID to the server + + - My app is still subscribed to machine locations changes of the org and receives a location of machine selected in my app with a correlation ID which is not one of mines + + - My app warns me that another user reports locations to My machine as well + + - BTW - empty Correlation ID is not allowed when contributing a location or breadcrumb using the API or IoT + + - Recommendation - the app shall create a new correlationID (guid) when the user selects a new machine + + + Correlation ID can be used for cleaning up recorded locations data on the server side in case the client erroneously submitted location data for a wrong machine.\n" + type: "string" + format: "guid" + example: "c1429d12-17db-4fd5-a27f-50ba62e81c8c" + links: + type: "array" + items: + type: "object" + allOf: + - $ref: "#/components/schemas/Breadcrumb_links" + Breadcrumb_links: + description: "Links related to the breadcrumb" + required: + - "@type" + - "rel" + - "uri" + properties: + "@type": + type: "string" + default: "Link" + description: "This is the @type definition for this reference object." + example: "Link" + rel: + type: "string" + description: "Defines the relation from the object to the link. The minimum response is the self link. Please refere to the individual example and object definition (the allOf keyword which is only visibile in the YAMl code) to see all required links for the instance of the object.\n" + uri: + type: "string" + format: "uri" + description: "The URL to the ressource which is related" + example: + - "@type": "Link" + rel: "contributionDefinition" + uri: "https://partnerapi.deere.com/platform/contributionDefinitions/70df8ced-b6df-458e-b6f2-2d705cb9a2bf" + - "@type": "Link" + rel: "machine" + uri: "https://partnerapi.deere.com/platform/machines/482754" + Breadcrumbs_Response: + description: "Page of bredacrumb information for the machine" + type: "object" + properties: + links: + required: true + description: "Link list" + type: "array" + items: + $ref: "#/components/schemas/MyJD_links_Breadcrumbs" + total: + required: true + description: "Number of results in the list" + type: "integer" + example: 1 + values: + required: true + type: "array" + items: + $ref: "#/components/schemas/Breadcrumb" + MeasurementAsDouble: + description: "Measurement as double value\n" + type: "object" + required: + - "valueAsDouble" + properties: + valueAsDouble: + type: "number" + format: "float" + unit: + type: "string" + vrDomainId: + type: "string" + MeasurementAsInteger: + description: "Measurement as integer value\n" + type: "object" + required: + - "valueAsInteger" + properties: + valueAsInteger: + type: "number" + unit: + type: "string" + vrDomainId: + type: "string" MyJD_links: properties: machine: - example: https://sandboxapi.deere.com/platform/machines/4321 - description: Machines Link. + example: "https://sandboxapi.deere.com/platform/machines/4321" + description: "Machines Link." + MyJD_links_Breadcrumbs: + description: "The link object provides links to ressources which are related to the response" + properties: + "@type": + required: true + type: "string" + default: "Link" + description: "This is the @type definition for this reference object." + example: "Link" + rel: + required: true + type: "string" + default: "self" + description: "Defines the relation from the object to the link. The minimum response is the self link. Please refere to the individual example and object definition (the allOf keyword which is only visibile in the YAMl code) to see all required links for the instance of the object.\n" + uri: + required: true + type: "string" + format: "uri" + description: "The URL to the ressource which is related" + example: + - "@type": "Link" + rel: "self" + uri: "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs" + - "@type": "Link" + rel: "nextPage" + uri: "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs;start=30;count=10" + - "@type": "Link" + rel: "nextPage" + uri: "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs;start=10;count=10" + Point: + description: "Point.\n" + type: "object" + required: + - "@type" + - "lat" + - "lon" + properties: + "@type": + description: "Object type" + type: "string" + default: "Point" + example: "Point" + lat: + description: "Latitude in range of -90 to +90" + type: "number" + format: "float" + example: 7.801324 + lon: + description: "longitude in range of -180 to +180" + type: "number" + format: "float" + example: 49.456166 + altitude: + $ref: "#/components/schemas/MeasurementAsDouble" ReportedLocation: properties: point: - description: Contains the <lat>, <lon>, and <altitude> tags. - type: 'N/A' - example: 'N/A' + description: "Contains the <lat>, <lon>, and <altitude> tags." + type: "N/A" + example: "N/A" lat: - type: double - example: 41.688612 - description: The latitude of the machine's location. - format: float + type: "double" + example: "41.688612" + description: "The latitude of the machine's location." + format: "float" lon: - type: double - description: The longitude of the machine's location. - example: -93.693612 - format: float + type: "double" + description: "The longitude of the machine's location." + example: "-93.693612" + format: "float" altitude: - type: measurement AsDouble - description: The altitude of the machine's location. The value and unit of measurement are both included. - example: See sample response below. - default: ReportedLocation + type: "measurement AsDouble" + description: "The altitude of the machine's location. The value and unit of measurement are both included." + example: "See sample response below." + default: "ReportedLocation" eventTimestamp: - type: datetime - example: 2012-11-07T18:42:07.186Z - description: 'Timestamp of the machine location report. All timestamps follow the ISO 8601 standard format.' - format: date + type: "datetime" + example: "2012-11-07T18:42:07.186Z" + description: "Timestamp of the machine location report. All timestamps follow the ISO 8601 standard format." + format: "date" gpsFixTimestamp: - type: datetime - description: The last time the machine noted its GPS location. - example: 2010-10-04T15:06:24.000Z - format: date + type: "datetime" + description: "The last time the machine noted its GPS location." + example: "2010-10-04T15:06:24.000Z" + format: "date" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + eq1: "eq1" +x-source-documents: + - endPointName: "location-history" + id: 23 + - endPointName: "breadcrumbs" + id: 24 diff --git a/specs/raw/map-layers.yaml b/specs/raw/map-layers.yaml index 2a36821..9ceb313 100644 --- a/specs/raw/map-layers.yaml +++ b/specs/raw/map-layers.yaml @@ -1,943 +1,1869 @@ -openapi: 3.0.1 - +openapi: "3.0.1" info: - title: Contributed Map Layers API - description: A collection of APIs used for interacting with Contributed Map Layers in MJD. - version: 0.0.1 - + title: "Contributed Map Layers API" + description: "A collection of APIs used for interacting with Contributed Map Layers in MJD." + version: "0.0.1" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi - + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: - /organizations/{orgId}/fields/{id}/mapLayerSummaries: + /fileResources/{id}: + get: + description: "This resource allows the client to view or download a File Resource.
          To view a File Resource's metadata, set the application/vnd.deere.axiom.v3+json Accept Header. To download the File Resource itself, choose a zip or octet-stream Accept Header." + summary: "View/Download a File Resource" + parameters: + - $ref: "#/components/parameters/fileId_FileResources" + security: + - OAuth2: + - "ag1" + responses: + "200": + $ref: "#/components/schemas/GetFileResponseDetails" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + No Header: "List of valid Accept headers
          • application/zip
          • application/octet-stream
          • application/x-zip
          • application/x-zip-compressed
          • application/vnd.deere.axiom.v3+json
          " + put: + description: "Uploads a binary File Resource for a given Map Layer. The client must first create a File Resource ID by calling POST /mapLayers/{id}/fileResources API before uploading. Check the status of the upload by requesting the File Resource's targetResource Link." + summary: "Upload a File Resource" + parameters: + - $ref: "#/components/parameters/fileId_FileResources" + security: + - OAuth2: + - "ag3" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + No Header: "List of valid Content-Type headers
          • application/zip
          • application/octet-stream
          • application/x-zip
          • application/x-zip-compressed
          " + delete: + description: "Deletes a file resource." + summary: "Delete a File Resource" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/fileId_FileResources" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + /mapLayerSummaries/{id}: get: - description: 'This resource will list all Map Layer Summaries for a specified field.
          ' - note: 'Note: This API does not support eTags.' - summary: List Map Layer Summaries + description: "Returns a specific Map Layer Summary resource." + summary: "View a Map Layer Summary" + parameters: + - $ref: "#/components/parameters/id" + security: + - OAuth2: + - "ag2" + responses: + "200": + description: "View a specific Map Layer Summary" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/PostContributedMapLayerSummary" + links: + items: + $ref: "#/components/schemas/GetMapLayerSummaryAvailableLinks" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORD_ID" + - rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID" + - rel: "mapLayers" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + - rel: "createMapLayer" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + id: "MAP_LAYER_SUMMARY_ID" + title: "some title" + text: "description of the map layers" + mapType: "PRESCRIPTION" + metadata: + - name: "The Name" + value: "The Value" + dateCreated: "2016-01-02T16:14:23.421Z" + lastModifiedDate: "2016-01-02T16:14:23.421Z" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "429": + $ref: "#/components/responses/429" + delete: + description: "Deletes a Map Layer Summary and its underlying Map Layer and File Resource resources." + summary: "Delete a Map Layer Summary" parameters: - - $ref: '#/components/parameters/OrganizationId' - - $ref: '#/components/parameters/fieldId' - - $ref: '#/components/parameters/includePartialSummaries' - - $ref: '#/components/parameters/embed' + - $ref: "#/components/parameters/id" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag3" + responses: + "200": + description: "Deleted" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + type: "integer" + example: 1 + format: "int32" + examples: + Headers: + description: "204 No Content" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "429": + $ref: "#/components/responses/429" + /mapLayerSummaries/{id}/mapLayers: + get: + description: "This resource lists all Map Layers for a specific Map Layer Summary.
          Note: This API does not support eTags." + summary: "List Map Layers" + parameters: + - $ref: "#/components/parameters/id_MapLayers" + - $ref: "#/components/parameters/includePartialLayers" responses: - '200': - $ref: '#/components/schemas/MapLayerSummaryCollection' + "200": + $ref: "#/components/schemas/MapLayerCollection_MapLayers" + security: + - OAuth2: + - "ag1" post: - description: Creates a new Map Layer Summary resource. - summary: Create a map layer summary + description: "Creates a new Map Layer resource." + summary: "Create a Map Layer" parameters: - - $ref: '#/components/parameters/OrganizationId' - - $ref: '#/components/parameters/fieldId' + - $ref: "#/components/parameters/id_MapLayers" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PostRequest' - Create Map Layer Summary: + $ref: "#/components/schemas/PostResponse_MapLayers" + Create Map Layer: examples: No Header: - description: '' + description: "" value: - links: - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID - title: some title - text: description of map layer summary with [a link](https://www.example.com) + title: "The title on the Map Layer" + text: "NDVI Layer for mid-season plant health based on near infrared ([NIR](https://en.wikipedia.org/wiki/Infrared#Regions_within_the_infrared))" metadata: - - name: The Name - value: The Value - dateCreated: '2016-01-02T16:14:23.421Z' + - name: "time" + value: "Friday, June 29, 2018 (CDT)" + - name: "elevation" + value: "35ft" + extent: + minimumLatitude: 41.76073 + maximumLatitude: 41.771366 + minimumLongitude: -93.488106 + maximumLongitude: -93.4837 + sortName: "02" + legends: + unitId: "seeds1ha-1" + ranges: + - label: "Other - Upper Bound" + minimum: 87500 + maximum: 262500 + hexColor: "#a6cee3" + percent: 2.11 + - label: "High" + minimum: 87300 + maximum: 87500 + hexColor: "#1f78b4" + percent: 18.02 + - label: "Medium" + minimum: 87100 + maximum: 87300 + hexColor: "#b2df8a" + percent: 49.74 + - label: "Low" + minimum: 87100 + maximum: 87300 + hexColor: "#b2df8a" + percent: 49.74 + - label: "Other - Lower Bound" + minimum: 0 + maximum: 87000 + hexColor: "#fb9a99" + percent: 3.13 contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: + schema: + properties: + total: + description: "Number of results in the list" + type: "integer" + format: "int32" + example: 761 examples: No Header: - description: '201 CREATED
          Location: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID' - - 400: - $ref: '#/components/responses/400' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 415: - $ref: '#/components/responses/415' - 429: - $ref: '#/components/responses/429' - /mapLayerSummaries/{id}: + description: "201 CREATED
          Location: https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + /mapLayers/{id}: get: - description: Returns a specific Map Layer Summary resource. - summary: View a Map Layer Summary + description: "Returns a specific Map Layer resource." + summary: "View a Map Layer" parameters: - - $ref: '#/components/parameters/id' + - $ref: "#/components/parameters/getId" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag1" responses: - 200: - description: View a specific Map Layer Summary + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: values: items: - $ref: '#/components/schemas/PostContributedMapLayerSummary' + $ref: "#/components/schemas/GetResponseDetails" links: items: - $ref: '#/components/schemas/GetMapLayerSummaryAvailableLinks' + $ref: "#/components/schemas/GetAvailableLinks" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: + "@type": "ContributedMapLayer" + title: "The title on the Map Layer" + extent: + "@type": "MapExtent" + minimumLatitude: 41.76073 + maximumLatitude: 41.771366 + minimumLongitude: -93.488106 + maximumLongitude: -93.4837 + sortName: "02" + legends: + "@type": "MapLegend" + unitId: "seeds1ha-1" + ranges: + - "@type": "MapLegendItem" + label: "Some Label" + minimum: 87300 + maximum: 87300 + hexColor: "#0BA74A" + percent: 0.13 + status: "QUEUED" + id: "MAP_LAYER_ID" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/ORD_ID - - rel: targetResource - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID - - rel: mapLayers - uri: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - - rel: createMapLayer - uri: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - id: MAP_LAYER_SUMMARY_ID - title: some title - text: description of the map layers - mapType: PRESCRIPTION - metadata: - - name: The Name - value: The Value - dateCreated: '2016-01-02T16:14:23.421Z' - lastModifiedDate: '2016-01-02T16:14:23.421Z' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 429: - $ref: '#/components/responses/429' + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "image" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "mapLayerSummary" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - "@type": "Link" + rel: "fileResources" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + - "@type": "Link" + rel: "createFileResource" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" delete: - description: Deletes a Map Layer Summary and its underlying Map Layer and File Resource resources. - summary: Delete a Map Layer Summary - parameters: - - $ref: '#/components/parameters/id' + description: "Deletes a Map Layer and its underlying File Resource." + summary: "Delete a Map Layer" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/getMapId" responses: - 200: - description: Deleted + "200": + description: "Deleted" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content' - 401: - $ref: '#/components/responses/401' - 403: - $ref: '#/components/responses/403' - 404: - $ref: '#/components/responses/404' - 406: - $ref: '#/components/responses/406' - 429: - $ref: '#/components/responses/429' - + description: "204 No Content" + /mapLayers/{id}/fileResources: + get: + description: "This resource will return the File Resource associated to the specified Map Layer.
          Note: This API does not support eTags." + summary: "Get a Map Layer File Resource" + parameters: + - $ref: "#/components/parameters/id_FileResources" + security: + - OAuth2: + - "ag1" + responses: + "200": + $ref: "#/components/schemas/GetFileResponse" + post: + description: "This resource will create a new File Resource for a Map Layer." + summary: "Create a Map Layer File Resource" + security: + - OAuth2: + - "ag3" + parameters: + - $ref: "#/components/parameters/id_FileResources" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/RequestDetails" + Create a new File Resource: + examples: + No Header: + description: "" + value: + links: + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + mimeType: "image/png" + metadata: + - name: "filename" + value: "mapLayerImage.png" + timestamp: "2019-01-02T16:14:23.421Z" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + responses: + "200": + $ref: "#/components/schemas/PostFileResponse" + /mapLayers/{mapLayerId}: + get: + description: "Returns the image file associated with the Map Layer resource." + summary: "Extract Map Layer Image" + security: + - OAuth2: + - "ag1" + parameters: + - $ref: "#/components/parameters/getMapId" + responses: + "200": + description: "Created" + content: + image/png OR application/octet-stream: + examples: + Headers: + description: "The binary contents of the Map Layer are returned in PNG format." + /organizations/{orgId}/fields/{id}/mapLayerSummaries: + get: + description: "This resource will list all Map Layer Summaries for a specified field.
          " + note: "Note: This API does not support eTags." + summary: "List Map Layer Summaries" + parameters: + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/fieldId" + - $ref: "#/components/parameters/includePartialSummaries" + - $ref: "#/components/parameters/embed" + security: + - OAuth2: + - "ag2" + responses: + "200": + $ref: "#/components/schemas/MapLayerSummaryCollection" + post: + description: "Creates a new Map Layer Summary resource." + summary: "Create a map layer summary" + parameters: + - $ref: "#/components/parameters/OrganizationId" + - $ref: "#/components/parameters/fieldId" + security: + - OAuth2: + - "ag3" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostRequest" + Create Map Layer Summary: + examples: + No Header: + description: "" + value: + links: + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + title: "some title" + text: "description of map layer summary with [a link](https://www.example.com)" + metadata: + - name: "The Name" + value: "The Value" + dateCreated: "2016-01-02T16:14:23.421Z" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + examples: + No Header: + description: "201 CREATED
          Location: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "406": + $ref: "#/components/responses/406" + "415": + $ref: "#/components/responses/415" + "429": + $ref: "#/components/responses/429" components: - parameters: - OrganizationId: - in: path - name: orgId - description: Organization ID - required: true - schema: - type: string - example: 1234 - format: uuid - default: 'N/A' - fileId: - in: path - name: fileId - description: Field ID - required: true - schema: - type: GUID - example: d01111d6-1fa4-4659-943a-3df4a6b7933c - format: int64 - default: 'N/A' - includePartialSummaries: - name: includePartialSummaries - in: query - description: 'Set includePartialSummaries to true to include Map Layer Summaries without File Resources.' - required: false - schema: - type: boolean - example: 'true' - format: uuid - default: 'false' - embed: - name: embed - in: query - description: Takes these values mapLayers. - required: false - schema: - type: string - example: mapLayers - format: uuid - default: 'N/A' - fieldId: - name: fieldId - in: path - description: Field ID - required: true - schema: - type: GUID - example: d01111d6-1fa4-4659-943a-3df4a6b7933c - format: uuid - default: 'N/A' - id: - name: id - in: path - description: Map Layer Summary ID - required: true - schema: - type: string - example: y02111d6-1fa4-4659-943a-3df4a6b7933c - format: uuid - default: 'N/A' - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag2: 'ag2' - ag3: 'ag3' - schemas: - Link: - type: object - properties: - '@type': - type: string - example: Link - rel: - type: string - description: The relation of the object to the linked resource. - example: owningOrganization - uri: - type: string - description: The URI to the related resource. - format: uri - example: 'https://api.deere.com/platform/organizations/61265' - description: Provides a reference to an associated object or list. - CollectionBase: - type: object - properties: - links: - type: array - items: - properties: - rel: - type: string - description: Links relavent to exploring the collection. - example: self - uri: - type: string - description: The URI to the related resource. - format: uri - example: 'https://api.deere.com/platform/organizations/61265/fields/42849709-5d54-473a-9eba-adab6f4bc8a8/mapLayerSummaries' - total: - type: number - example: 1 + examples: + 400Errors: + description: "{ - MapLayerSummaryCollection: - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - values: - type: array - items: - $ref: '#/components/schemas/ContributedMapLayerSummary' - links: - items: - $ref: '#/components/schemas/AvailableLinks' - examples: - No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' - value: - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries - total: 1 - values: - - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID - - rel: owningOrganization - uri: https://sandboxapi.deere.com/platform/organizations/ORG_ID - - rel: targetResource - uri: >- - https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FEILD_ID - - rel: mapLayers - uri: >- - https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - - rel: createMapLayer - uri: >- - https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - id: MAP_LAYER_SUMMARY_ID - title: some title - text: description of the map layers - mapType: OTHER - metadata: - - name: The Name - value: The Value - dateCreated: '2016-01-02T16:14:23.421Z' - lastModifiedDate: '2016-01-02T16:14:23.421Z' - ContributedMapLayerSummary: - properties: - links: - type: array - description: Links to other objects in the Deere ecosystem. - example: See "Available Links" below - total: - type: number - description: Count of Map Layer Summaries in response. - example: 3 - values: - type: Map Layer Summary array - description: The primary resource listing. - Map Layer Summary Details: - properties: - links: - type: array - description: Links to other objects in the Deere ecosystem. - example: See "Available Links" below - id: - type: GUID - description: Map Layer Summary ID - example: 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd - title: - type: string - description: Top level name of the Map Layer Summary - example: Summary of Map Layers - text: - type: string - description: Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown - example: My summary of agronomic image data - mapType: - type: string - description: The type of data represented by the summary1. - example: PRESCRIPTION - metadata: - type: 'Metadata array' - description: An array of key value pair items about the Map Layer Summary. - example: See sample response below - dateCreated: - type: datetime - description: ISO 8601 Date and time in UTC this resource was created. - example: 2016-01-02T16:14:23.421Z - lastModifiedDate: - type: datetime - description: ISO 8601 Date and time in UTC this resource was last modified. - example: 2016-01-02T16:14:23.421Z - PostContributedMapLayerSummary: - properties: - links: - type: array - description: Links to other objects in the Deere ecosystem. - example: See "Available Links" below - id: - type: GUID - description: Map Layer Summary ID - example: 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd - title: - type: string - description: Top level name of the Map Layer Summary - example: Summary of Map Layers - text: - type: string - description: 'Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown' - example: My summary of agronomic image data - mapType: - type: string - description: 'The type of data represented by the summary.1' - example: PRESCRIPTION - metadata: - type: 'Metadata array' - description: An array of key value pair items about the Map Layer Summary. - example: See sample response below - dateCreated: - type: datetime - description: ISO 8601 Date and time in UTC this resource was created. - example: 2016-01-02T16:14:23.421Z - lastModifiedDate: - type: datetime - description: ISO 8601 Date and time in UTC this resource was last modified. - example: 2016-01-02T16:14:23.421Z + \ \"@type\": \"Errors\", - AvailableLinks: - properties: - self (map layer summaries list): - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries - description: This Map Layer List Link. - self (map layer summary): - example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID - description: This Map Layer Summary Link. - owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID - description: Organizations Link. - targetResource: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID - description: Fields Link. - mapLayers: - example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - description: Map Layers Link. - createMapLayer: - example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - description: Create Map Layers Link. - PostRequest: - properties: - links: - example: 'See "Request Links" below
          Readonly: No' - description: Links to other objects in the Deere ecosystem. - type: array - required: true - title: - example: 'Summary of Map Layers
          Readonly: No' - description: Top level name of the Map Layer Summary - type: string - required: true - text: - example: 'My summary of agronomic image data
          Readonly: No' - description: 'Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown' - type: string - mapType: - example: 'PRESCRIPTION
          Readonly: No' - description: 'The type of data represented by the summary1' - type: string - metadata: - example: 'See sample request below
          Readonly: No' - description: An array of key value pair items about the Map Layer Summary. - type: 'Metadata array' - dateCreated: - example: '2016-01-02T16:14:23.421Z
          Readonly: No' - description: ISO 8601 Date and time in UTC this resource was created. - type: datetime - PostResponse: - properties: - links: - example: 'See "Request Links" below
          Readonly: No' - description: Links to other objects in the Deere ecosystem. - type: array - title: - example: 'Summary of Map Layers
          Readonly: No' - description: Top level name of the Map Layer Summary - type: string - text: - example: 'My summary of agronomic image data
          Readonly: No' - description: 'Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown' - type: string - mapType: - example: 'PRESCRIPTION
          Readonly: No' - description: 'The type of data represented by the summary1' - type: string - metadata: - example: 'See sample request below
          Readonly: No' - description: An array of key value pair items about the Map Layer Summary. - type: 'Metadata array' - dateCreated: - example: '2016-01-02T16:14:23.421Z
          Readonly: No' - description: ISO 8601 Date and time in UTC this resource was created. - type: datetime + \ \"errors\": [ - PostAvailableLinks: - properties: - owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID - description: Organizations Link - contributionDefinition: - example: https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - description: Contribution Definitions Link. + \ { - GetMapLayerSummaryAvailableLinks: - properties: - self: - example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID - description: This Map Layer Summary Link. - owningOrganization: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID - description: Organizations Link. - targetResource: - example: https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID - description: Fields Link. - mapLayers: - example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - description: Map Layers Link. - createMapLayer: - example: https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - description: Create Map Layers Link. + \ \"@type\": \"Error\", + \ \"guid\": \"53697217-9e70-492b-be04-179e253c3116\", + \ \"message\": \"Owning Organization Link is missing and is required.\", + \ \"code\": \"validation_constraint_owning_org_link_missing\", + \ \"field\": \"owningOrganization\" + \ }, + \ { + \ \"@type\": \"Error\", + \ \"guid\": \"39dc10f0-6e2c-4517-bfd6-713a7c4da768\", - Metadata: - required: - - name - - value - type: object - properties: - '@type': - type: string - example: Metadata - name: - type: string - example: Location - value: - type: string - example: Moline, IL + \ \"message\": \"Contribution Definition Link is missing and is required.\", - MapLayerCollection: - type: object - allOf: - - $ref: '#/components/schemas/CollectionBase' - - properties: - values: - type: array - items: - $ref: '#/components/schemas/ContributedMapLayer' + \ \"code\": \"validation_constraint_contribution_definition_link_missing\", + + \ \"field\": \"contributionDefinition\" + + \ }, + + \ { + + \ \"@type\": \"Error\", + + \ \"guid\": \"5cdee9be-4120-4d0e-9da3-15a1d4f0713a\", + + \ \"message\": \"This field is required.\", + + \ \"code\": \"validation_constraint_required_field\", + + \ \"field\": \"title\" + + \ }, + + \ { + + \ \"@type\": \"Error\", + + \ \"guid\": \"1d5d178b-e037-4c76-927c-94ca19e74362\", + + \ \"message\": \"This field is required.\", + + \ \"code\": \"validation_constraint_required_field\", + + \ \"field\": \"text\" + + \ }, + + \ { + + \ \"@type\": \"Error\", + + \ \"guid\": \"f5c78d7c-9eaa-45ef-86bb-c28391d9ee2c\", + + \ \"message\": \"This field is required.\", + + \ \"code\": \"validation_constraint_required_field\", + + \ \"field\": \"legends\" + + \ }, + + \ { + + \ \"@type\": \"Error\", + + \ \"guid\": \"4a9d25f4-2f59-4900-91e9-766d78b8483c\", + + \ \"message\": \"Required field.\", + + \ \"code\": \"validation_constraint_notBlank\", + + \ \"field\": \"metadata.value\", + + \ \"invalidValue\": \"\" + + \ }, + + \ { + + \ \"@type\": \"Error\", + + \ \"guid\": \"eb364fd8-d6c0-41fd-84ff-72580407bbb2\", + + \ \"message\": \"Required field.\", + + \ \"code\": \"validation_constraint_notBlank\", + + \ \"field\": \"owningOrganization\", + + \ \"invalidValue\": \"\" + + \ }, + + \ { + + \ \"@type\": \"Error\", + + \ \"guid\": \"1a66a1a6-355f-44c9-83e3-11eb5cb641fa\", + + \ \"message\": \"Map layer must have an extent for supplied mime-type\", + + \ \"code\": \"validation_constraint_file_type_requires_extent\", + + \ \"field\": \"mimeType\" + + \ }, + + \ { + \ \"@type\": \"Error\", + + \ \"guid\": \"9bb8fd7c-3b31-4f75-bd35-05256c35c92e\", + + \ \"message\": \"Invalid Contribution Definition ID, please use another.\", + + \ \"code\": \"validation_constraint_contribution_definition_id_invalid\", + + \ \"field\": \"contributionDefinition\", + + \ \"invalidValue\": \"7a6641a6-d6c0-4cc9-d3e3-766d78b8483c\" + + \ } + + \ ], + + \ \"otherAttributes\": {} + + }\n" ContributedMapLayer: - type: object + description: "{ + + \ \"title\": \"Image 1\", + + \ \"extent\": { + + \ \"minimumLatitude\": 41.47187948123269, + + \ \"maximumLatitude\": 41.48192734153501, + + \ \"minimumLongitude\": -90.43179946950056, + + \ \"maximumLongitude\": -90.4157062154112 + + \ }, + + \ \"sortName\": \"1\", + + \ \"legends\": { + + \ \"unitId\": \"colors\", + + \ \"ranges\": [ + + \ { + + \ \"label\": \"Label\", + + \ \"minimum\": 0, + + \ \"maximum\": 100, + + \ \"hexColor\": \"#367C2B\", + + \ \"percent\": 50.0 + + \ }, + + \ { + + \ \"label\": \"Label\", + + \ \"minimum\": 0, + + \ \"maximum\": 100, + + \ \"hexColor\": \"#FFDE00\", + + \ \"percent\": 50.0 + + \ } + + \ ] + + \ }, + + \ \"text\": \"The first image taken\", + + \ \"metadata\": [ + + \ { + + \ \"name\": \"subject\", + + \ \"value\": \"the main building\" + + \ } + + \ ] + + }\n" + ContributedMapLayerSummary: + description: "{ + + \ \"links\": [ + + \ { + + \ \"rel\": \"owningOrganization\", + + \ \"uri\": \"https://apiqa.tal.deere.com/platform/organizations/61265\" + + \ }, + + \ { + + \ \"rel\": \"contributionDefinition\", + + \ \"uri\": \"https://apiqa.tal.deere.com/platform/contributionDefinitions/85c1dfbb-4a9b-4cd2-b967-1e818b86fcb1\" + + \ } + + \ ], + + \ \"title\": \"World Headquarters\", + + \ \"text\": \"Deere & Company\", + + \ \"metadata\": [ + + \ { + + \ \"name\": \"Moline\", + + \ \"value\": \"Illinois\" + + \ } + + \ ] + + }\n" + FileResource: + description: "{ + + \ \"links\": [ + + \ { + + \ \"rel\": \"owningOrganization\", + + \ \"uri\": \"https://apiqa.tal.deere.com/platform/organizations/61265\" + + \ } + + \ ], + + \ \"mimeType\": \"image/png\", + + \ \"metadata\": [ + + \ { + + \ \"name\": \"filename\", + + \ \"value\": \"first_image.png\" + + \ } + + \ ] + + }\n" + parameters: + OrganizationId: + in: "path" + name: "orgId" + description: "Organization ID" + required: true + schema: + type: "string" + example: 1234 + format: "uuid" + default: "N/A" + embed: + name: "embed" + in: "query" + description: "Takes these values mapLayers." + required: false + schema: + type: "string" + example: "mapLayers" + format: "uuid" + default: "N/A" + fieldId: + name: "fieldId" + in: "path" + description: "Field ID" + required: true + schema: + type: "GUID" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + format: "uuid" + default: "N/A" + fileId: + in: "path" + name: "fileId" + description: "Field ID" + required: true + schema: + type: "GUID" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + format: "int64" + default: "N/A" + fileId_FileResources: + in: "path" + name: "id" + description: "File Resource ID" + required: true + schema: + type: "string" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + format: "uuid" + default: "N/A" + getId: + in: "path" + name: "id" + description: "Map Layer ID" + required: true + schema: + type: "string" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + format: "uuid" + default: "N/A" + getMapId: + in: "path" + name: "id" + description: "Map Layer ID" + required: true + schema: + type: "string" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + format: "uuid" + default: "N/A" + id: + name: "id" + in: "path" + description: "Map Layer Summary ID" + required: true + schema: + type: "string" + example: "y02111d6-1fa4-4659-943a-3df4a6b7933c" + format: "uuid" + default: "N/A" + id_FileResources: + in: "path" + name: "id" + description: "Map Layer ID" + required: true + schema: + type: "string" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + format: "uuid" + default: "N/A" + id_MapLayers: + in: "path" + name: "id" + description: "Map Layer Summary ID" + required: true + schema: + type: "string" + example: "d01111d6-1fa4-4659-943a-3df4a6b7933c" + format: "uuid" + default: "N/A" + includePartialLayers: + in: "query" + name: "includePartialLayers" + description: "Set includePartialLayers to true to include Map Layers without File Resources." + required: false + schema: + example: "true" + type: "boolean" + default: "false" + includePartialSummaries: + name: "includePartialSummaries" + in: "query" + description: "Set includePartialSummaries to true to include Map Layer Summaries without File Resources." + required: false + schema: + type: "boolean" + example: "true" + format: "uuid" + default: "false" + responses: + "400": + description: "The request body was missing a required field or supplied a read-only value." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/400Errors" + "401": + description: "The user's OAuth credentials are not recognized by the server." + "403": + description: "The user does not have access to the requested resource." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "404": + description: "The specified resource was not found on the server." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/GenericErrors" + "406": + description: "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request." + "409": + description: "Indicates that the request could not be processed because of conflict in the request, such as an edit conflict." + "415": + description: "The server refuses to accept the request because the payload format is in an unsupported format." + "429": + description: "The user has sent too many requests in a given amount of time." + schemas: + 400Errors: + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" + message: + type: "string" + example: "This field is required." + code: + type: "string" + example: "validation_constraint_required_field" + field: + type: "string" + example: "title" + otherAttributes: + type: "object" + AvailableLinks: + properties: + self (map layer summaries list): + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries" + description: "This Map Layer List Link." + self (map layer summary): + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "This Map Layer Summary Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID" + description: "Fields Link." + mapLayers: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "Map Layers Link." + createMapLayer: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "Create Map Layers Link." + AvailableLinks_FileResources: + properties: + self: + description: "This File Resource Link." + example: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + owningOrganization: + description: "Organizations Link." + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + targetResource: + description: "Map Layers Link." + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + AvailableLinks_MapLayers: + properties: + self (map list): + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "This Map Layer List Link." + self (map layer): + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + description: "This Map Layer Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." + mapLayerSummary: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "Map Layer Summary Link." + fileResources: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + image: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + description: "Map Layer's PNG Image Link." + createFileResource: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + CollectionBase: + type: "object" + properties: + links: + type: "array" + items: + properties: + rel: + type: "string" + description: "Links relavent to exploring the collection." + example: "self" + uri: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://api.deere.com/platform/organizations/61265/fields/42849709-5d54-473a-9eba-adab6f4bc8a8/mapLayerSummaries" + total: + type: "number" + example: 1 + ContributedMapLayer: + type: "object" required: - - title - - legends + - "title" + - "legends" properties: - '@type': - type: string - example: ContributedMapLayer + "@type": + type: "string" + example: "ContributedMapLayer" title: - type: string - description: The title on the map layer. - example: Drone Flyover + type: "string" + description: "The title on the map layer." + example: "Drone Flyover" extent: - $ref: '#/components/schemas/MapExtent' + $ref: "#/components/schemas/MapExtent" sortName: - type: string - description: A value to sort the Map Layer by in Field Analyzer Beta. Defaults to `title` if not provided. - example: '1' + type: "string" + description: "A value to sort the Map Layer by in Field Analyzer Beta. Defaults to `title` if not provided." + example: "1" legends: - $ref: '#/components/schemas/MapLegend' + $ref: "#/components/schemas/MapLegend" status: - type: string - description: Map layer status. + type: "string" + description: "Map layer status." readOnly: true enum: - - VALID - - INVALID - - QUEUED - - NO_FILE_RESOURCE + - "VALID" + - "INVALID" + - "QUEUED" + - "NO_FILE_RESOURCE" text: - type: string - description: Description of the map layer. - example: An aerial view of the building. + type: "string" + description: "Description of the map layer." + example: "An aerial view of the building." metadata: - type: array + type: "array" items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" id: - type: string - description: The primary identifier for the operation. - example: 8a0011f1-297e-48c2-a030-91a21287e721 + type: "string" + description: "The primary identifier for the operation." + example: "8a0011f1-297e-48c2-a030-91a21287e721" readOnly: true links: - type: array + type: "array" items: - $ref: '#/components/schemas/Link' - - MapExtent: - description: Extents of the field. If not provided, the FileResource must be of type `image/tiff` or `application/zip` and contain the extents. - required: - - minimumLatitude - - maximumLatitude - - minimumLongitude - - maximumLongitude - type: object + $ref: "#/components/schemas/Link" + ContributedMapLayerSummary: properties: - '@type': - type: string - example: MapExtent - minimumLatitude: - type: number - format: double - example: 41.47187948123269 - maximumLatitude: - type: number - format: double - example: 41.48192734153501 - minimumLongitude: - type: number - format: double - example: -90.43179946950056 - maximumLongitude: - type: number - format: double - example: -90.4157062154112 - - MapLegend: - type: object + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + total: + type: "number" + description: "Count of Map Layer Summaries in response." + example: 3 + values: + type: "Map Layer Summary array" + description: "The primary resource listing." + Map Layer Summary Details: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + id: + type: "GUID" + description: "Map Layer Summary ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + title: + type: "string" + description: "Top level name of the Map Layer Summary" + example: "Summary of Map Layers" + text: + type: "string" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown" + example: "My summary of agronomic image data" + mapType: + type: "string" + description: "The type of data represented by the summary1." + example: "PRESCRIPTION" + metadata: + type: "Metadata array" + description: "An array of key value pair items about the Map Layer Summary." + example: "See sample response below" + dateCreated: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2016-01-02T16:14:23.421Z" + lastModifiedDate: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was last modified." + example: "2016-01-02T16:14:23.421Z" + ContributedMapLayer_FileResources: properties: - '@type': - type: string - example: MapLegend - unitId: - type: string - description: The unit of Legand - example: seeds1ha-1 - ranges: - type: array - items: - $ref: '#/components/schemas/MapLegendItem' - - MapLegendItem: - type: object + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below
          Readonly: Yes, except owningOrganization" + id: + type: "string" + description: "File Resource ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd
          Readonly: Yes" + metadata: + type: "Metadata array" + description: "An array of key value pair items about the File Resource." + example: "See sample response below
          Readonly: No" + mimeType: + type: "string" + description: "Valid values are image/png, image/tif, image/tiff and application/zip1" + example: "image/png
          Readonly: No" + timestamp: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2019-03-02T16:14:23.421Z
          Readonly: No" + ContributedMapLayer_MapLayers: properties: - '@type': - type: string - example: MapLegendItem - label: - type: string - description: A label for the color - example: Most profitable - minimum: - type: number - format: double - example: 10.09 - maximum: - type: number - format: double - example: 30.18 - hexColor: - type: string - description: The hex color code corresponding to a color in the map layer image - example: '#0BA74A' - percent: - type: number - format: double - example: 3.5 - + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + total: + type: "number" + description: "Count of Map Layer Summaries in response." + example: 3 + values: + type: "Map Layer Array" + description: "The primary resource listing." + Map Layer Details: + properties: + links: + example: "See \"Available Links\" below" + description: "Links to other objects in the Deere ecosystem." + type: "array" + id: + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + description: "Map Layer ID" + type: "GUID" + title: + example: "NDVI Layer" + description: "Top level name of the Map Layer" + type: "string" + text: + example: "NDVI Layer for mid-season plant health based on near infrared" + description: "Describes Map Layer. Supports limited Markdown." + type: "string" + metadata: + example: "See sample request below" + description: "An array of key value pair items about the Map Layer. Supports limited" + type: "Metadata array" + extent: + example: "---" + description: "Maximum and minimum extent of the map." + type: "Extent Object" + sortName: + example: "02" + description: "Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title." + type: "string" + legends: + example: "---" + description: "Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image." + type: "Legend Object" + status1: + example: "VALID" + description: "Map Layer image processing progress." + type: "string" FileResource: required: - - links - - metadata - type: object + - "links" + - "metadata" + type: "object" properties: - '@type': - type: string - example: FileResource + "@type": + type: "string" + example: "FileResource" mimeType: - type: string - description: The mimeType of the FileResource. + type: "string" + description: "The mimeType of the FileResource." enum: - - image/png - - image/tif - - image/tiff - - application/zip + - "image/png" + - "image/tif" + - "image/tiff" + - "application/zip" metadata: - description: The name of the file - type: array + description: "The name of the file" + type: "array" items: properties: name: - type: string - example: filename + type: "string" + example: "filename" value: - type: string - example: a_green_tractor.png + type: "string" + example: "a_green_tractor.png" id: - type: string - description: The primary identifier for the FileResource. - example: 888d97c6-cd87-48de-88d5-3c2721250a5e + type: "string" + description: "The primary identifier for the FileResource." + example: "888d97c6-cd87-48de-88d5-3c2721250a5e" readOnly: true links: - description: Links for self, targetResource, and owningOrganization - type: array + description: "Links for self, targetResource, and owningOrganization" + type: "array" items: - $ref: '#/components/schemas/Link' - - 400Errors: + $ref: "#/components/schemas/Link" + FileResourceAvailableLinks: properties: - '@type': - type: string - example: Errors - errors: - type: array - items: - properties: - '@type': - type: string - example: Error - guid: - type: string - format: uuid - example: ed292512-1f3c-4285-83c3-1fb084423f9b - message: - type: string - example: This field is required. - code: - type: string - example: validation_constraint_required_field - field: - type: string - example: title - otherAttributes: - type: object - + self: + description: "Map Layers Link." + example: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + owningOrganization: + description: "Organizations Link." + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + targetResource: + description: "Map Layers Link." + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + FileResourceGetResponse: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below
          Readonly: Yes, except owningOrganization" + id: + type: "string" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below
          Readonly: Yes" + metadata: + type: "Metadata array" + description: "An array of key value pair items about the File Resource." + example: "See sample response below
          Readonly: No" + mimeType: + type: "string" + description: "Valid values are image/png, image/tif, image/tiff and application/zip1" + example: "image/png
          Readonly: No" + timestamp: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2019-03-02T16:14:23.421Z
          Readonly: No" GenericErrors: properties: - '@type': - type: string - example: Errors + "@type": + type: "string" + example: "Errors" errors: - type: array + type: "array" items: properties: - '@type': - type: string - example: Error + "@type": + type: "string" + example: "Error" guid: - type: string - format: uuid - example: ed292512-1f3c-4285-83c3-1fb084423f9b + type: "string" + format: "uuid" + example: "ed292512-1f3c-4285-83c3-1fb084423f9b" message: - type: string - example: The requested resource was not found + type: "string" + example: "The requested resource was not found" otherAttributes: - type: object - - responses: - 400: - description: The request body was missing a required field or supplied a read-only value. + type: "object" + GetAvailableLinks: + properties: + self: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + description: "This Map Layer Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." + mapLayerSummary: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "Map Layer Summary Link." + fileResources: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + image: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + description: "Map Layer's PNG Image Link." + createFileResource: + example: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + description: "Map Layer's File Resources Link." + GetFileResponse: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/400Errors' - 401: - description: The user's OAuth credentials are not recognized by the server. - 403: - description: The user does not have access to the requested resource. + properties: + values: + items: + $ref: "#/components/schemas/ContributedMapLayer_FileResources" + links: + items: + $ref: "#/components/schemas/AvailableLinks_FileResources" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "FileResource" + timestamp: "2016-01-02T16:14:23.421Z" + mimeType: "image/zip" + metadata: + - "@type": "Metadata" + name: "filename" + value: "small_png.png" + id: "FILE_RESOURCE_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + - "@type": "Link" + rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + GetFileResponseDetails: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/GenericErrors' - 404: - description: The specified resource was not found on the server. + properties: + values: + items: + $ref: "#/components/schemas/FileResourceGetResponse" + links: + items: + $ref: "#/components/schemas/FileResourceAvailableLinks" + examples: + No Header: + description: "" + value: + "@type": "FileResource" + timestamp: "2016-01-02T16:14:23.421Z" + mimeType: "image/zip" + metadata: + - "@type": "Metadata" + name: "filename" + value: "small_png.png" + id: "FILE_RESOURCE_ID" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + - "@type": "Link" + rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + GetMapLayerSummaryAvailableLinks: + properties: + self: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + description: "This Map Layer Summary Link." + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID" + description: "Fields Link." + mapLayers: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "Map Layers Link." + createMapLayer: + example: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + description: "Create Map Layers Link." + GetResponseDetails: + properties: + links: + example: "See \"Map Layer Available Links\" below" + description: "Links to other objects in the Deere ecosystem." + type: "array" + id: + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + description: "Map Layer ID" + type: "GUID" + title: + example: "NDVI Layer" + description: "Top level name of the Map Layer" + type: "string" + text: + example: "NDVI Layer for mid-season plant health based on near infrared" + description: "Describes Map Layer. Supports limited Markdown." + type: "string" + metadata: + example: "See sample request below" + description: "An array of key value pair items about the Map Layer. Supports limited Markdown." + type: "Metadata array" + extent: + example: null + description: "Maximum and minimum extent of the map." + type: "Extent Object" + sortName: + example: null + description: "Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title." + type: "string" + legends: + example: null + description: "Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image." + type: "Legend Object" + status1: + example: "VALID" + description: "Map Layer image processing progress." + type: "object" + Link: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + rel: + type: "string" + description: "The relation of the object to the linked resource." + example: "owningOrganization" + uri: + type: "string" + description: "The URI to the related resource." + format: "uri" + example: "https://api.deere.com/platform/organizations/61265" + description: "Provides a reference to an associated object or list." + MapExtent: + description: "Extents of the field. If not provided, the FileResource must be of type `image/tiff` or `application/zip` and contain the extents." + required: + - "minimumLatitude" + - "maximumLatitude" + - "minimumLongitude" + - "maximumLongitude" + type: "object" + properties: + "@type": + type: "string" + example: "MapExtent" + minimumLatitude: + type: "number" + format: "double" + example: 41.47187948123269 + maximumLatitude: + type: "number" + format: "double" + example: 41.48192734153501 + minimumLongitude: + type: "number" + format: "double" + example: -90.43179946950056 + maximumLongitude: + type: "number" + format: "double" + example: -90.4157062154112 + MapLayerCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ContributedMapLayer" + MapLayerCollection_MapLayers: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/GenericErrors' - 406: - description: The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request. - 409: - description: Indicates that the request could not be processed because of conflict in the request, such as an edit conflict. - 415: - description: The server refuses to accept the request because the payload format is in an unsupported format. - 429: - description: The user has sent too many requests in a given amount of time. - - examples: - ContributedMapLayerSummary: - description: | - { - "links": [ - { - "rel": "owningOrganization", - "uri": "https://apiqa.tal.deere.com/platform/organizations/61265" - }, - { - "rel": "contributionDefinition", - "uri": "https://apiqa.tal.deere.com/platform/contributionDefinitions/85c1dfbb-4a9b-4cd2-b967-1e818b86fcb1" - } - ], - "title": "World Headquarters", - "text": "Deere & Company", - "metadata": [ - { - "name": "Moline", - "value": "Illinois" - } - ] - } - - ContributedMapLayer: - description: | - { - "title": "Image 1", - "extent": { - "minimumLatitude": 41.47187948123269, - "maximumLatitude": 41.48192734153501, - "minimumLongitude": -90.43179946950056, - "maximumLongitude": -90.4157062154112 - }, - "sortName": "1", - "legends": { - "unitId": "colors", - "ranges": [ - { - "label": "Label", - "minimum": 0, - "maximum": 100, - "hexColor": "#367C2B", - "percent": 50.0 - }, - { - "label": "Label", - "minimum": 0, - "maximum": 100, - "hexColor": "#FFDE00", - "percent": 50.0 - } - ] - }, - "text": "The first image taken", - "metadata": [ - { - "name": "subject", - "value": "the main building" - } - ] - } - - FileResource: - description: | - { - "links": [ - { - "rel": "owningOrganization", - "uri": "https://apiqa.tal.deere.com/platform/organizations/61265" - } - ], - "mimeType": "image/png", - "metadata": [ - { - "name": "filename", - "value": "first_image.png" - } - ] - } - - 400Errors: - description: | - { - "@type": "Errors", - "errors": [ - { - "@type": "Error", - "guid": "53697217-9e70-492b-be04-179e253c3116", - "message": "Owning Organization Link is missing and is required.", - "code": "validation_constraint_owning_org_link_missing", - "field": "owningOrganization" - }, - { - "@type": "Error", - "guid": "39dc10f0-6e2c-4517-bfd6-713a7c4da768", - "message": "Contribution Definition Link is missing and is required.", - "code": "validation_constraint_contribution_definition_link_missing", - "field": "contributionDefinition" - }, - { - "@type": "Error", - "guid": "5cdee9be-4120-4d0e-9da3-15a1d4f0713a", - "message": "This field is required.", - "code": "validation_constraint_required_field", - "field": "title" - }, - { - "@type": "Error", - "guid": "1d5d178b-e037-4c76-927c-94ca19e74362", - "message": "This field is required.", - "code": "validation_constraint_required_field", - "field": "text" - }, - { - "@type": "Error", - "guid": "f5c78d7c-9eaa-45ef-86bb-c28391d9ee2c", - "message": "This field is required.", - "code": "validation_constraint_required_field", - "field": "legends" - }, - { - "@type": "Error", - "guid": "4a9d25f4-2f59-4900-91e9-766d78b8483c", - "message": "Required field.", - "code": "validation_constraint_notBlank", - "field": "metadata.value", - "invalidValue": "" - }, - { - "@type": "Error", - "guid": "eb364fd8-d6c0-41fd-84ff-72580407bbb2", - "message": "Required field.", - "code": "validation_constraint_notBlank", - "field": "owningOrganization", - "invalidValue": "" - }, - { - "@type": "Error", - "guid": "1a66a1a6-355f-44c9-83e3-11eb5cb641fa", - "message": "Map layer must have an extent for supplied mime-type", - "code": "validation_constraint_file_type_requires_extent", - "field": "mimeType" - }, - { - "@type": "Error", - "guid": "9bb8fd7c-3b31-4f75-bd35-05256c35c92e", - "message": "Invalid Contribution Definition ID, please use another.", - "code": "validation_constraint_contribution_definition_id_invalid", - "field": "contributionDefinition", - "invalidValue": "7a6641a6-d6c0-4cc9-d3e3-766d78b8483c" - } - ], - "otherAttributes": {} - } + properties: + values: + items: + $ref: "#/components/schemas/ContributedMapLayer_MapLayers" + links: + items: + $ref: "#/components/schemas/AvailableLinks_MapLayers" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + total: 1 + values: + - "@type": "ContributedMapLayer" + title: "Zones" + extent: + "@type": "MapExtent" + minimumLatitude: 41.97959187228855 + maximumLatitude: 41.98562116731833 + minimumLongitude: -93.69586944580077 + maximumLongitude: -93.68591308593747 + sortName: "Zones" + legends: + "@type": "MapLegend" + unitId: "1" + ranges: + - "@type": "MapLegendItem" + label: "Zone A" + minimum: 0 + maximum: 0 + hexColor: "#ff0000" + percent: 0.12334877135018732 + - "@type": "MapLegendItem" + label: "Zone B" + minimum: 0 + maximum: 0 + hexColor: "#ffa500" + percent: 0.3943243163515148 + - "@type": "MapLegendItem" + label: "Zone C" + minimum: 0 + maximum: 0 + hexColor: "#ffff00" + percent: 0.48232691229829794 + - "@type": "MapLegendItem" + label: "Zone D" + minimum: 0 + maximum: 0 + hexColor: "#adff2f" + percent: 0 + - "@type": "MapLegendItem" + label: "Zone E" + minimum: 0 + maximum: 0 + hexColor: "#008000" + percent: 0 + status: "QUEUED" + id: "MAP_LAYER_ID" + links: + - "@type": "Link" + rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - "@type": "Link" + rel: "image" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image" + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID" + - "@type": "Link" + rel: "mapLayerSummary" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - "@type": "Link" + rel: "fileResources" + uri: "https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources" + - "@type": "Link" + rel: "createFileResource" + uri: "https://sandboxapi.deere.complatform/mapLayers/MAP_LAYER_ID/fileResources" + MapLayerSummaryCollection: + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ContributedMapLayerSummary" + links: + items: + $ref: "#/components/schemas/AvailableLinks" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries" + total: 1 + values: + - links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID" + - rel: "owningOrganization" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + - rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FEILD_ID" + - rel: "mapLayers" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + - rel: "createMapLayer" + uri: "https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers" + id: "MAP_LAYER_SUMMARY_ID" + title: "some title" + text: "description of the map layers" + mapType: "OTHER" + metadata: + - name: "The Name" + value: "The Value" + dateCreated: "2016-01-02T16:14:23.421Z" + lastModifiedDate: "2016-01-02T16:14:23.421Z" + MapLegend: + type: "object" + properties: + "@type": + type: "string" + example: "MapLegend" + unitId: + type: "string" + description: "The unit of Legand" + example: "seeds1ha-1" + ranges: + type: "array" + items: + $ref: "#/components/schemas/MapLegendItem" + MapLegendItem: + type: "object" + properties: + "@type": + type: "string" + example: "MapLegendItem" + label: + type: "string" + description: "A label for the color" + example: "Most profitable" + minimum: + type: "number" + format: "double" + example: 10.09 + maximum: + type: "number" + format: "double" + example: 30.18 + hexColor: + type: "string" + description: "The hex color code corresponding to a color in the map layer image" + example: "#0BA74A" + percent: + type: "number" + format: "double" + example: 3.5 + Metadata: + required: + - "name" + - "value" + type: "object" + properties: + "@type": + type: "string" + example: "Metadata" + name: + type: "string" + example: "Location" + value: + type: "string" + example: "Moline, IL" + PostAvailableLinks: + properties: + owningOrganization: + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + description: "Organizations Link" + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID" + description: "Contribution Definitions Link." + PostAvailableLinks_FileResources: + properties: + owningOrganization: + description: "Organizations Link." + example: "https://sandboxapi.deere.com/platform/organizations/ORG_ID" + PostContributedMapLayerSummary: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below" + id: + type: "GUID" + description: "Map Layer Summary ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + title: + type: "string" + description: "Top level name of the Map Layer Summary" + example: "Summary of Map Layers" + text: + type: "string" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown" + example: "My summary of agronomic image data" + mapType: + type: "string" + description: "The type of data represented by the summary.1" + example: "PRESCRIPTION" + metadata: + type: "Metadata array" + description: "An array of key value pair items about the Map Layer Summary." + example: "See sample response below" + dateCreated: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2016-01-02T16:14:23.421Z" + lastModifiedDate: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was last modified." + example: "2016-01-02T16:14:23.421Z" + PostFileResponse: + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + links: + items: + $ref: "#/components/schemas/PostAvailableLinks_FileResources" + examples: + Headers: + description: "201 CREATED
          Location: https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID" + PostRequest: + properties: + links: + example: "See \"Request Links\" below
          Readonly: No" + description: "Links to other objects in the Deere ecosystem." + type: "array" + required: true + title: + example: "Summary of Map Layers
          Readonly: No" + description: "Top level name of the Map Layer Summary" + type: "string" + required: true + text: + example: "My summary of agronomic image data
          Readonly: No" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown" + type: "string" + mapType: + example: "PRESCRIPTION
          Readonly: No" + description: "The type of data represented by the summary1" + type: "string" + metadata: + example: "See sample request below
          Readonly: No" + description: "An array of key value pair items about the Map Layer Summary." + type: "Metadata array" + dateCreated: + example: "2016-01-02T16:14:23.421Z
          Readonly: No" + description: "ISO 8601 Date and time in UTC this resource was created." + type: "datetime" + PostResponse: + properties: + links: + example: "See \"Request Links\" below
          Readonly: No" + description: "Links to other objects in the Deere ecosystem." + type: "array" + title: + example: "Summary of Map Layers
          Readonly: No" + description: "Top level name of the Map Layer Summary" + type: "string" + text: + example: "My summary of agronomic image data
          Readonly: No" + description: "Describes Map Layer Summary giving a better idea of what the data is about, supports limited Markdown" + type: "string" + mapType: + example: "PRESCRIPTION
          Readonly: No" + description: "The type of data represented by the summary1" + type: "string" + metadata: + example: "See sample request below
          Readonly: No" + description: "An array of key value pair items about the Map Layer Summary." + type: "Metadata array" + dateCreated: + example: "2016-01-02T16:14:23.421Z
          Readonly: No" + description: "ISO 8601 Date and time in UTC this resource was created." + type: "datetime" + PostResponse_MapLayers: + properties: + id: + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd
          Readonly: Yes" + description: "Map Layer ID" + type: "GUID" + title: + example: "NDVI Layer
          Readonly: No" + description: "Top level name of the Map Layer" + type: "string" + required: true + text: + example: "NDVI Layer for mid-season plant health based on near infrared
          Readonly: No" + description: "Describes Map Layer. Supports limited Markdown." + type: "string" + metadata: + example: "See sample request below
          Readonly: No" + description: "An array of key value pair items about the Map Layer. Supports limited Markdown" + type: "Metadata array" + extent: + example: "See sample request below
          Readonly: No" + description: "Maximum and minimum extent of the map." + type: "Extent Object" + required: "Yes, except if submitting GeoTIFF File Resource for the Map Layer" + sortName: + example: "02
          Readonly: No" + description: "Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title." + type: "string" + legends: + example: "---
          Readonly: No" + description: "Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image." + type: "Legend Object" + status1: + example: "VALID
          Readonly: Yes" + description: "Map Layer image processing progress." + type: "string" + RequestDetails: + properties: + links: + type: "array" + description: "Links to other objects in the Deere ecosystem." + example: "See \"Available Links\" below
          Readonly: Yes, except owningOrganization" + required: true + id: + type: "string" + description: "File Resource ID" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd
          Readonly: Yes" + required: true + metadata: + type: "Metadata array" + description: "An array of key value pair items about the File Resource." + example: "See sample response below
          Readonly: No" + required: true + mimeType: + type: "string" + description: "Valid values are image/png, image/tif, image/tiff and application/zip1" + example: "image/png
          Readonly: No" + required: true + timestamp: + type: "datetime" + description: "ISO 8601 Date and time in UTC this resource was created." + example: "2019-03-02T16:14:23.421Z
          Readonly: No" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag2: "ag2" + ag3: "ag3" + OAuth2_FileResources: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" + OAuth2_MapLayers: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" + ag3: "ag3" +x-source-documents: + - endPointName: "map-layer-summaries" + id: 96 + - endPointName: "file-resources" + id: 98 + - endPointName: "map-layers" + id: 97 diff --git a/specs/raw/notifications.yaml b/specs/raw/notifications.yaml index 82a6e2f..5a42e06 100644 --- a/specs/raw/notifications.yaml +++ b/specs/raw/notifications.yaml @@ -1,537 +1,540 @@ -swagger: '3.0.0' +swagger: "3.0.0" info: - version: 0.0.1 - title: 'Notification API' - description: | - APIs for creating, monitoring the creation of, as well as the viewing of Notifications + version: "0.0.1" + title: "Notification API" + description: "APIs for creating, monitoring the creation of, as well as the viewing of Notifications\n" paths: - /notifications/{sourceEvent}: - get: - summary: Fetch single notification. - description: Retrieve a single notification by source event. - parameters: - - in: path - name: sourceEvent - description: Source event of the notification - required: true - schema: - type: string - example: 'b22956b7-0b43-40ea-a396-1fdc816ebb58' - format: uuid - responses: - 200: - description: Created - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - values: - items: - $ref: '#/components/schemas/GetResponse' - links: - items: - $ref: '#/components/schemas/GetAvailableLinks' - examples: - No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' - value: - notificationsEvents: - - geometries: '[{"type":"Point","coordinates":[-90.1805376,41.4475633]}]' - contributionDefinition: "/contributionDefinitions/148e6f00-6389-49b3-86ee-c37fc27929d6" - title: Andy Fence - Enter - text: "This machine entered the defined Geofence boundaries. \r\n\r\n **GEOFENCE** \r\nEnter \r\n\r\n**LAT/LONG LOCATION AT THE TIME OF ALERT** \r\n41.4475633, -90.1805376" - severity: HIGH - sourceEvent: b22956b7-0b43-40ea-a396-1fdc816ebb58 - eventType: CURFENCE_ALERT - minimizedNotifications: - - additionalDetails: - - name: targetResourceName - value: Andy Fusion - - name: machineCompanyId - value: '1890893' - - name: routingClass - value: '0' - - name: latitude - value: '41.4475633' - - name: visible - value: 'Y' - - name: colorId - value: '3' - - name: alertCreatedTimestamp - value: '2018-03-31T23:49:46.431Z' - - name: isAcknowledged - value: 'false' - - name: color - value: RED - - name: machineAlertDefinitionId - value: '104496' - - name: longitude - value: '-90.1805376' - - name: priorityClass - value: '10' - - name: machineAlertId - value: '1401066547' - - name: geofenceType - value: Enter - - name: targetResourceId - value: '317783' - - name: correlationId - value: '0' - - name: typeDescription - value: This machine entered the defined Geofence boundaries. - - name: appId - value: '35' - - name: deviceId - value: '461521' - - name: alertCapturedTimestamp - value: '2018-03-31T23:49:39.000Z' - - name: targetResourceType - value: Machine - - name: userTitle - value: Andy Fence - notificationState: ACTIVE - targetResourceOrgId: 123456 - dateCreated: '2018-03-31T23:49:39.000Z' - id: c84ad945-5b3e-447e-b139-f2318f73679f - 400: - $ref: '#/components/schemas/Error' - 404: - description: Not Found - 403: - description: Not authorized - /notificationEvents: post: - description: This resource creates an event that Operations Center will use to generate notifications. These notifications will be received by anyone who is subscribed to your services. Each notification event will include a link to source, which will define the event. - summary: Create Notification Event - note: Note: Event ID is available as the location header in the response. + description: "This resource creates an event that Operations Center will use to generate notifications. These notifications will be received by anyone who is subscribed to your services. Each notification event will include a link to source, which will define the event." + summary: "Create Notification Event" + note: "Note: Event ID is available as the location header in the response." requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PostNotifications' + $ref: "#/components/schemas/PostNotifications" examples: Target Resource Association: value: links: - - rel: contributionDefinition - uri: >- - https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID + - rel: "contributionDefinition" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID" eventAssociation: links: - - rel: targetResource - uri: >- - https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID - title: Some Agronomy Title - text: Detailed Agronomy Information - severity: HIGH - eventType: AGRONOMY + - rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID" + title: "Some Agronomy Title" + text: "Detailed Agronomy Information" + severity: "HIGH" + eventType: "AGRONOMY" additionalDetails: - - name: some name - value: some value + - name: "some name" + value: "some value" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/Links' + $ref: "#/components/schemas/Links" total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '201 Created
          Location: https://sandboxapi.deere.com/platform/notificationEvents/b89c2933-96da-45f4-9f93-880023611e07' + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/notificationEvents/b89c2933-96da-45f4-9f93-880023611e07" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - + Content-Type: "application/vnd.deere.axiom.v3+json" /notificationEvents/{sourceEvent}: delete: - description: This resource deletes a notification event that was previously posted to MJD as well as any generated notifications. - summary: Delete a Notification Event + description: "This resource deletes a notification event that was previously posted to MJD as well as any generated notifications." + summary: "Delete a Notification Event" parameters: - - $ref: '#/components/parameters/sourceEvent' + - $ref: "#/components/parameters/sourceEvent" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: ' 202 Accepted' + description: " 202 Accepted" + /notifications/{sourceEvent}: + get: + summary: "Fetch single notification." + description: "Retrieve a single notification by source event." + parameters: + - in: "path" + name: "sourceEvent" + description: "Source event of the notification" + required: true + schema: + type: "string" + example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + format: "uuid" + responses: + "200": + description: "Created" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/GetResponse" + links: + items: + $ref: "#/components/schemas/GetAvailableLinks" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + notificationsEvents: + - geometries: "[{\"type\":\"Point\",\"coordinates\":[-90.1805376,41.4475633]}]" + contributionDefinition: "/contributionDefinitions/148e6f00-6389-49b3-86ee-c37fc27929d6" + title: "Andy Fence - Enter" + text: "This machine entered the defined Geofence boundaries. \r + + \r + + \ **GEOFENCE** \r + + Enter \r + \r + + **LAT/LONG LOCATION AT THE TIME OF ALERT** \r + + 41.4475633, -90.1805376" + severity: "HIGH" + sourceEvent: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + eventType: "CURFENCE_ALERT" + minimizedNotifications: + - additionalDetails: + - name: "targetResourceName" + value: "Andy Fusion" + - name: "machineCompanyId" + value: "1890893" + - name: "routingClass" + value: "0" + - name: "latitude" + value: "41.4475633" + - name: "visible" + value: "Y" + - name: "colorId" + value: "3" + - name: "alertCreatedTimestamp" + value: "2018-03-31T23:49:46.431Z" + - name: "isAcknowledged" + value: "false" + - name: "color" + value: "RED" + - name: "machineAlertDefinitionId" + value: "104496" + - name: "longitude" + value: "-90.1805376" + - name: "priorityClass" + value: "10" + - name: "machineAlertId" + value: "1401066547" + - name: "geofenceType" + value: "Enter" + - name: "targetResourceId" + value: "317783" + - name: "correlationId" + value: "0" + - name: "typeDescription" + value: "This machine entered the defined Geofence boundaries." + - name: "appId" + value: "35" + - name: "deviceId" + value: "461521" + - name: "alertCapturedTimestamp" + value: "2018-03-31T23:49:39.000Z" + - name: "targetResourceType" + value: "Machine" + - name: "userTitle" + value: "Andy Fence" + notificationState: "ACTIVE" + targetResourceOrgId: 123456 + dateCreated: "2018-03-31T23:49:39.000Z" + id: "c84ad945-5b3e-447e-b139-f2318f73679f" + "400": + $ref: "#/components/schemas/Error" + "403": + description: "Not authorized" + "404": + description: "Not Found" /organizations/{orgId}/notifications/events: get: - description: 'This endpoint will let you search Notifications based on criteria specified in request parameters. The return value is the list of notifications that exist only in the user’s staff organization(s). This API cannot be used with a partner organization ID in the path. If partnership permissions are set up properly in Operations Center, partner notifications for shared resources will be available in the users staff organization which holds the partnership. Each data point will include links to: -
            -
          • targetResource: View the target (like file) associated with this notification within each MinimizedNotification object. Please refer to sample response below to see the example.
          • -
          • contributionDefinition: View the definition of "notification".
          • -
          ' - summary: Search Notifications for an Organization - note: 'Please Note: This API does not support eTags.' + description: "This endpoint will let you search Notifications based on criteria specified in request parameters. The return value is the list of notifications that exist only in the user’s staff organization(s). This API cannot be used with a partner organization ID in the path. If partnership permissions are set up properly in Operations Center, partner notifications for shared resources will be available in the users staff organization which holds the partnership. Each data point will include links to:
          • targetResource: View the target (like file) associated with this notification within each MinimizedNotification object. Please refer to sample response below to see the example.
          • contributionDefinition: View the definition of \"notification\".
          " + summary: "Search Notifications for an Organization" + note: "Please Note: This API does not support eTags." parameters: - - $ref: '#/components/parameters/orgId' - - $ref: '#/components/parameters/before' - - $ref: '#/components/parameters/after' - - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/eventTypes' - - $ref: '#/components/parameters/severities' - - $ref: '#/components/parameters/sourceEvents' - - $ref: '#/components/parameters/startDate' - - $ref: '#/components/parameters/endDate' + - $ref: "#/components/parameters/orgId" + - $ref: "#/components/parameters/before" + - $ref: "#/components/parameters/after" + - $ref: "#/components/parameters/count" + - $ref: "#/components/parameters/eventTypes" + - $ref: "#/components/parameters/severities" + - $ref: "#/components/parameters/sourceEvents" + - $ref: "#/components/parameters/startDate" + - $ref: "#/components/parameters/endDate" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: values: items: - $ref: '#/components/schemas/GetResponse' + $ref: "#/components/schemas/GetResponse" links: items: - $ref: '#/components/schemas/GetAvailableLinks' + $ref: "#/components/schemas/GetAvailableLinks" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/organizations/123456/notifications/events + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/notifications/events" total: 1 values: - - '@type': GroupedNotifications - geometries: '[{"type":"Point","coordinates":[-90.1805376,41.4475633]}]' - title: Andy Fence - Enter - text: "This machine entered the defined Geofence boundaries. \r\n\r\n **GEOFENCE** \r\nEnter \r\n\r\n**LAT/LONG LOCATION AT THE TIME OF ALERT** \r\n41.4475633, -90.1805376" - severity: HIGH - sourceEvent: b22956b7-0b43-40ea-a396-1fdc816ebb58 - eventType: CURFENCE_ALERT + - "@type": "GroupedNotifications" + geometries: "[{\"type\":\"Point\",\"coordinates\":[-90.1805376,41.4475633]}]" + title: "Andy Fence - Enter" + text: "This machine entered the defined Geofence boundaries. \r + + \r + + \ **GEOFENCE** \r + + Enter \r + + \r + + **LAT/LONG LOCATION AT THE TIME OF ALERT** \r + + 41.4475633, -90.1805376" + severity: "HIGH" + sourceEvent: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + eventType: "CURFENCE_ALERT" minimizedNotifications: - - '@type': MinimizedNotification + - "@type": "MinimizedNotification" additionalDetails: - - '@type': AdditionalDetail - name: targetResourceName - value: Andy Fusion - - '@type': AdditionalDetail - name: machineCompanyId - value: '1890893' - - '@type': AdditionalDetail - name: routingClass - value: '0' - - '@type': AdditionalDetail - name: latitude - value: '41.4475633' - - '@type': AdditionalDetail - name: visible - value: 'Y' - - '@type': AdditionalDetail - name: colorId - value: '3' - - '@type': AdditionalDetail - name: alertCreatedTimestamp - value: '2018-03-31T23:49:46.431Z' - - '@type': AdditionalDetail - name: isAcknowledged - value: 'false' - - '@type': AdditionalDetail - name: color - value: RED - - '@type': AdditionalDetail - name: machineAlertDefinitionId - value: '104496' - - '@type': AdditionalDetail - name: longitude - value: '-90.1805376' - - '@type': AdditionalDetail - name: priorityClass - value: '10' - - '@type': AdditionalDetail - name: machineAlertId - value: '1401066547' - - '@type': AdditionalDetail - name: geofenceType - value: Enter - - '@type': AdditionalDetail - name: targetResourceId - value: '317783' - - '@type': AdditionalDetail - name: correlationId - value: '0' - - '@type': AdditionalDetail - name: typeDescription - value: This machine entered the defined Geofence boundaries. - - '@type': AdditionalDetail - name: appId - value: '35' - - '@type': AdditionalDetail - name: deviceId - value: '461521' - - '@type': AdditionalDetail - name: alertCapturedTimestamp - value: '2018-03-31T23:49:39.000Z' - - '@type': AdditionalDetail - name: targetResourceType - value: Machine - - '@type': AdditionalDetail - name: userTitle - value: Andy Fence - notificationState: ACTIVE + - "@type": "AdditionalDetail" + name: "targetResourceName" + value: "Andy Fusion" + - "@type": "AdditionalDetail" + name: "machineCompanyId" + value: "1890893" + - "@type": "AdditionalDetail" + name: "routingClass" + value: "0" + - "@type": "AdditionalDetail" + name: "latitude" + value: "41.4475633" + - "@type": "AdditionalDetail" + name: "visible" + value: "Y" + - "@type": "AdditionalDetail" + name: "colorId" + value: "3" + - "@type": "AdditionalDetail" + name: "alertCreatedTimestamp" + value: "2018-03-31T23:49:46.431Z" + - "@type": "AdditionalDetail" + name: "isAcknowledged" + value: "false" + - "@type": "AdditionalDetail" + name: "color" + value: "RED" + - "@type": "AdditionalDetail" + name: "machineAlertDefinitionId" + value: "104496" + - "@type": "AdditionalDetail" + name: "longitude" + value: "-90.1805376" + - "@type": "AdditionalDetail" + name: "priorityClass" + value: "10" + - "@type": "AdditionalDetail" + name: "machineAlertId" + value: "1401066547" + - "@type": "AdditionalDetail" + name: "geofenceType" + value: "Enter" + - "@type": "AdditionalDetail" + name: "targetResourceId" + value: "317783" + - "@type": "AdditionalDetail" + name: "correlationId" + value: "0" + - "@type": "AdditionalDetail" + name: "typeDescription" + value: "This machine entered the defined Geofence boundaries." + - "@type": "AdditionalDetail" + name: "appId" + value: "35" + - "@type": "AdditionalDetail" + name: "deviceId" + value: "461521" + - "@type": "AdditionalDetail" + name: "alertCapturedTimestamp" + value: "2018-03-31T23:49:39.000Z" + - "@type": "AdditionalDetail" + name: "targetResourceType" + value: "Machine" + - "@type": "AdditionalDetail" + name: "userTitle" + value: "Andy Fence" + notificationState: "ACTIVE" targetResourceOrgId: 123456 - dateCreated: '2018-03-31T23:49:39.000Z' - id: c84ad945-5b3e-447e-b139-f2318f73679f + dateCreated: "2018-03-31T23:49:39.000Z" + id: "c84ad945-5b3e-447e-b139-f2318f73679f" links: - - '@type': Link - rel: targetResource - uri: https://sandboxapi.deere.com/platform/machines/317783 + - "@type": "Link" + rel: "targetResource" + uri: "https://sandboxapi.deere.com/platform/machines/317783" links: - - '@type': Link - rel: contribution - uri: >- - https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6 - - - - - + - "@type": "Link" + rel: "contribution" + uri: "https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Accept-Language: 'en - to specify which language you would like the notifications to be when returned in the response' - + Accept-Language: "en - to specify which language you would like the notifications to be when returned in the response" components: parameters: - sourceEvent: - in: path - name: sourceEvent - description: Source Event - required: true - schema: - type: string - example: 'b22956b7-0b43-40ea-a396-1fdc816ebb58' - format: uuid - orgId: - in: path - name: orgId - description: Organization - required: true - schema: - type: string - example: 123456 - before: - in: query - name: before - description: Criteria to search Notifications before event GUID + after: + in: "query" + name: "after" + description: "Criteria to search Notifications after event GUID." required: false schema: - type: Notification event GUID - example: 753b1ce2-74bd-4183-8e13-d0f03b9be20 - format: uuid - after: - in: query - name: after - description: Criteria to search Notifications after event GUID. + type: "Notification event GUID" + example: "753b1ce2-74bd-4183-8e13-d0f03b9be20d" + format: "uuid" + before: + in: "query" + name: "before" + description: "Criteria to search Notifications before event GUID" required: false schema: - type: Notification event GUID - example: 753b1ce2-74bd-4183-8e13-d0f03b9be20d - format: uuid + type: "Notification event GUID" + example: "753b1ce2-74bd-4183-8e13-d0f03b9be20" + format: "uuid" count: - in: query - name: count - description: Number of records, maximum up to 100 supported. + in: "query" + name: "count" + description: "Number of records, maximum up to 100 supported." required: false schema: - type: number + type: "number" example: 100 + endDate: + in: "query" + name: "endDate" + description: "Criteria to search for end date in time range." + required: false + schema: + type: "datetime" + example: "2017-07-25T08:33:27.311Z" eventTypes: - in: query - name: eventTypes - description: Criteria to search for multiple (comma separated) event types. + in: "query" + name: "eventTypes" + description: "Criteria to search for multiple (comma separated) event types." required: false schema: - type: List of String - example: FILE, ORGANIZATION, ANNOUNCEMENT + type: "List of String" + example: "FILE, ORGANIZATION, ANNOUNCEMENT" + orgId: + in: "path" + name: "orgId" + description: "Organization" + required: true + schema: + type: "string" + example: 123456 severities: - in: query - name: severities - description: Criteria to search for multiple severities. + in: "query" + name: "severities" + description: "Criteria to search for multiple severities." required: false schema: - type: List of String - example: NONE, LOW, MEDIUM + type: "List of String" + example: "NONE, LOW, MEDIUM" + sourceEvent: + in: "path" + name: "sourceEvent" + description: "Source Event" + required: true + schema: + type: "string" + example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + format: "uuid" sourceEvents: - in: query - name: sourceEvents - description: Criteria to search for multiple event GUID. + in: "query" + name: "sourceEvents" + description: "Criteria to search for multiple event GUID." required: false schema: - type: List of Notification event GUID - example: 45acf8953-2eaf-7487-9cd0-691059fcbfcb, 2acf8953-8eaf-4487-9cd0-391059fcbfcf - format: uuid + type: "List of Notification event GUID" + example: "45acf8953-2eaf-7487-9cd0-691059fcbfcb, 2acf8953-8eaf-4487-9cd0-391059fcbfcf" + format: "uuid" startDate: - in: query - name: startDate - description: Criteria to search for start date in time range. - required: false - schema: - type: datetime - example: '2017-07-25T08:33:27.311Z' - endDate: - in: query - name: endDate - description: Criteria to search for end date in time range. + in: "query" + name: "startDate" + description: "Criteria to search for start date in time range." required: false schema: - type: datetime - example: '2017-07-25T08:33:27.311Z' - + type: "datetime" + example: "2017-07-25T08:33:27.311Z" schemas: Error: - type: object + type: "object" properties: message: - type: string - description: An english description of the error - example: was invalid because + type: "string" + description: "An english description of the error" + example: " was invalid because " code: - type: string - description: A string constant representing the type of error + type: "string" + description: "A string constant representing the type of error" example: 400 field: - type: string - description: The name of the property or parameter deemed invalid - example: Machine.serialNumber + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "Machine.serialNumber" gud: - type: string - format: uuid - description: A reference to this encounter of the error, for traceability and troubleshooting - example: 9b331708-10e8-4e15-8097-a9aed7455d6d + type: "string" + format: "uuid" + description: "A reference to this encounter of the error, for traceability and troubleshooting" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" invalidValue: - type: string - description: The value that was supplied for this field in the request + type: "string" + description: "The value that was supplied for this field in the request" example: null readOnly: true - ResponseDetails: + GetAvailableLinks: properties: - eventId: - type: string - example: b22956b7-0b43-40ea-a396-1fdc816ebb58 - description: Event ID - eventStatusCode4: - type: string - example: SUCCESS - description: Event status code. - expectedNotificationCount: - type: integer - example: 2 - description: Number of notifications expected to generate from this event. - actualNotificationCount: - type: integer - example: 2 - description: Actual number of notifications generated from this event. - + contribution: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6" + description: "Contribution Definitions Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/machines/317783" + description: "Machines Link." + GetResponse: + properties: + title: + type: "string" + example: "Some Title" + description: "Event title." + geometries: + type: null + example: "See sample response below." + description: "GeoJSON representation of the location." + text: + type: "string" + example: "Detailed event text." + description: "Event description." + severity1: + type: "string" + example: "HIGH" + description: "Event severity." + eventType2: + type: "string" + example: "AGRONOMY" + description: "Event type." + sourceEvent: + type: "Event GUID" + example: "2acf8953-8eaf-4487-9cd0-391059fcbfcf" + description: "Notification Event GUID" + minimizedNotifications: + type: "List of objects" + example: "See sample response below." + description: "Minimized version of notification having additionalDetails, notificationState5, targetResourceOrgId, dateCreated and link to targetResource." + Links: + properties: + contributionDefinition: + example: "https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID" + description: "Contribution Definitions Link." + targetResource: + example: "https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID" + description: "Fields Link." PostNotifications: properties: title: - type: string - example: Some Title - description: Event title. + type: "string" + example: "Some Title" + description: "Event title." text: - type: string - example: Detailed event text - description: Event description. + type: "string" + example: "Detailed event text" + description: "Event description." severity1: - type: string - description: Event severity. - example: HIGH + type: "string" + description: "Event severity." + example: "HIGH" eventType2: - type: string - example: AGRONOMY - description: Event type. + type: "string" + example: "AGRONOMY" + description: "Event type." created: - type: datetime - example: '2015-04-30T10:23:50.000Z' - description: Event creation time (UTC). This value is only valid for Machine Alert types and is optional. + type: "datetime" + example: "2015-04-30T10:23:50.000Z" + description: "Event creation time (UTC). This value is only valid for Machine Alert types and is optional." additionalDetails: - example: See sample request below. - description: More event details. + example: "See sample request below." + description: "More event details." timeRangeDEPRECATED: - example: See sample request below. - description: DEPRECATEDTime range of the event + example: "See sample request below." + description: "DEPRECATEDTime range of the event" eventAssociation: - example: See sample request below. - description: Instructions on how to associate the resulting Notifications with resources. + example: "See sample request below." + description: "Instructions on how to associate the resulting Notifications with resources." Target Resource Event Association: properties: links: - type: string - example: '[{“rel”:”targetResource”,”/some/target/123”}]' - description: A link that contains the URI of the target resource. An event association can have multiple links. - - GetResponse: - properties: - title: - type: string - example: Some Title - description: Event title. - geometries: - type: - example: See sample response below. - description: GeoJSON representation of the location. - text: - type: string - example: Detailed event text. - description: Event description. - severity1: - type: string - example: HIGH - description: Event severity. - eventType2: - type: string - example: AGRONOMY - description: Event type. - sourceEvent: - type: Event GUID - example: 2acf8953-8eaf-4487-9cd0-391059fcbfcf - description: Notification Event GUID - minimizedNotifications: - type: List of objects - example: See sample response below. - description: Minimized version of notification having additionalDetails, notificationState5, targetResourceOrgId, dateCreated and link to targetResource. - GetAvailableLinks: - properties: - contribution: - example: https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6 - description: Contribution Definitions Link. - targetResource: - example: https://sandboxapi.deere.com/platform/machines/317783 - description: Machines Link. - Links: + type: "string" + example: "[{“rel”:”targetResource”,”/some/target/123”}]" + description: "A link that contains the URI of the target resource. An event association can have multiple links." + ResponseDetails: properties: - contributionDefinition: - example: https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID - description: Contribution Definitions Link. - targetResource: - example: https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID - description: Fields Link. + eventId: + type: "string" + example: "b22956b7-0b43-40ea-a396-1fdc816ebb58" + description: "Event ID" + eventStatusCode4: + type: "string" + example: "SUCCESS" + description: "Event status code." + expectedNotificationCount: + type: "integer" + example: 2 + description: "Number of notifications expected to generate from this event." + actualNotificationCount: + type: "integer" + example: 2 + description: "Actual number of notifications generated from this event." diff --git a/specs/raw/operators.yaml b/specs/raw/operators.yaml index 6cae3b2..ad2e6a6 100644 --- a/specs/raw/operators.yaml +++ b/specs/raw/operators.yaml @@ -1,341 +1,330 @@ -openapi: '3.0.3' -x-zally-ignore: [D013] +openapi: "3.0.3" +x-zally-ignore: + - "D013" info: - description: | - These are the endpoints for managing equipment operators - version: 1.0.0 - title: Operator API - + description: "These are the endpoints for managing equipment operators\n" + version: "1.0.0" + title: "Operator API" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" paths: /organizations/{orgId}/operators: get: - description: This endpoint will return list of operators in the system for the provided organization ID - summary: Retrieve all Operators for a given org + description: "This endpoint will return list of operators in the system for the provided organization ID" + summary: "Retrieve all Operators for a given org" parameters: - - $ref: '#/components/parameters/orgId' - - $ref: '#/components/parameters/embed' - - $ref: '#/components/parameters/recordFilter' - - $ref: '#/components/parameters/lastModifiedTime' + - $ref: "#/components/parameters/orgId" + - $ref: "#/components/parameters/embed" + - $ref: "#/components/parameters/recordFilter" + - $ref: "#/components/parameters/lastModifiedTime" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: values: items: - $ref: '#/components/schemas/GetResponseDetails' + $ref: "#/components/schemas/GetResponseDetails" links: items: - $ref: '#/components/schemas/GetAvailableLinks' + $ref: "#/components/schemas/GetAvailableLinks" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/12345/operators + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/operators" total: 1 values: - - '@type': Operator + - "@type": "Operator" links: - - '@type': Link - rel: self - uri: >- - https://sandboxapi.deere.com/platform/operators/0235d40e-02d0-44cb-a126-fff21173fc1f - name: John Doe - id: 0235d40e-02d0-44cb-a126-fff21173fc1f - dateModified: '2018-04-30T10:23:50.000Z' + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/operators/0235d40e-02d0-44cb-a126-fff21173fc1f" + name: "John Doe" + id: "0235d40e-02d0-44cb-a126-fff21173fc1f" + dateModified: "2018-04-30T10:23:50.000Z" archived: false - post: - description: This endpoint will create a new Operator in the system for the provided organization ID - summary: Create an Operator + description: "This endpoint will create a new Operator in the system for the provided organization ID" + summary: "Create an Operator" parameters: - - $ref: '#/components/parameters/orgId' + - $ref: "#/components/parameters/orgId" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag2" requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PostOperator' + $ref: "#/components/schemas/PostOperator" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ContentType' + $ref: "#/components/schemas/ContentType" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '201 Created
          Location: https://sandboxapi.deere.com/platform/operators/4r539261-5e4b-4e1c-9201-8026f47109bb' - + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/operators/4r539261-5e4b-4e1c-9201-8026f47109bb" delete: - description: This endpoint will delete every operator in the system for the provided organization ID - summary: Delete all Operators for a given org + description: "This endpoint will delete every operator in the system for the provided organization ID" + summary: "Delete all Operators for a given org" parameters: - - $ref: '#/components/parameters/orgId' + - $ref: "#/components/parameters/orgId" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" responses: - 204: - description: Created + "204": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content' - + description: "204 No Content" /organizations/{orgId}/operators/{id}: get: - description: This endpoint will return a specific operator in the system in an org for the provided Operator ID to the data of an operator in the request body - summary: Retrieve a specific Operator in an org by Operator ID + description: "This endpoint will return a specific operator in the system in an org for the provided Operator ID to the data of an operator in the request body" + summary: "Retrieve a specific Operator in an org by Operator ID" parameters: - - $ref: '#/components/parameters/orgId' - - $ref: '#/components/parameters/id' - - $ref: '#/components/parameters/embed' + - $ref: "#/components/parameters/orgId" + - $ref: "#/components/parameters/id" + - $ref: "#/components/parameters/embed" security: - - OAuth2: [ ag1 ] + - OAuth2: + - "ag1" responses: - 200: - description: Created + "200": + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: properties: values: items: - $ref: '#/components/schemas/GetResponseOperatorDetails' + $ref: "#/components/schemas/GetResponseOperatorDetails" links: items: - $ref: '#/components/schemas/GetOperatorAvailableLinks' + $ref: "#/components/schemas/GetOperatorAvailableLinks" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/12345/operators/0235d40e-02d0-44cb-a126-fff21173fc1f - id: 0235d40e-02d0-44cb-a126-fff21173fc1f - name: John Doe - dateModified: '2018-04-30T10:23:50.000Z' + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/12345/operators/0235d40e-02d0-44cb-a126-fff21173fc1f" + id: "0235d40e-02d0-44cb-a126-fff21173fc1f" + name: "John Doe" + dateModified: "2018-04-30T10:23:50.000Z" archived: false - put: - description: This endpoint will update a specific operator in the system in an org for the provided Operator ID to the data of an operator in the request body - summary: Update a specific Operator in an org by Operator ID + description: "This endpoint will update a specific operator in the system in an org for the provided Operator ID to the data of an operator in the request body" + summary: "Update a specific Operator in an org by Operator ID" parameters: - - $ref: '#/components/parameters/orgId' - - $ref: '#/components/parameters/id' + - $ref: "#/components/parameters/orgId" + - $ref: "#/components/parameters/id" security: - - OAuth2: [ ag2 ] + - OAuth2: + - "ag2" requestBody: content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PutOperator' + $ref: "#/components/schemas/PutOperator" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ContentType' + $ref: "#/components/schemas/ContentType" responses: - 204: - description: Updated + "204": + description: "Updated" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content' - + description: "204 No Content" delete: - description: This endpoint will delete a specific operator in the system in an org for the provided Operator ID - summary: Delete a specific Operator in an org by Operator ID + description: "This endpoint will delete a specific operator in the system in an org for the provided Operator ID" + summary: "Delete a specific Operator in an org by Operator ID" parameters: - - $ref: '#/components/parameters/orgId' - - $ref: '#/components/parameters/id' + - $ref: "#/components/parameters/orgId" + - $ref: "#/components/parameters/id" security: - - OAuth2: [ ag3 ] + - OAuth2: + - "ag3" responses: - 204: - description: Deleted + "204": + description: "Deleted" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content' - + description: "204 No Content" components: parameters: - orgId: - in: path - name: orgId - description: Organization ID - required: true + embed: + in: "query" + name: "embed" + description: "Include operator metadata in the response." + required: false schema: - type: string - example: 123456 - format: uuid + type: "string" + example: "showRecordMetadata" + format: "uuid" id: - in: path - name: id - description: Operator ID + in: "path" + name: "id" + description: "Operator ID" required: true schema: - type: string - example: '0235d40e-02d0-44cb-a126-fff21173fc1f' - format: uuid - embed: - in: query - name: embed - description: Include operator metadata in the response. + type: "string" + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + format: "uuid" + lastModifiedTime: + in: "query" + name: "lastModifiedTime" + description: "Start of the range for timestamp filtering" required: false schema: - type: string - example: showRecordMetadata - format: uuid - recordFilter: - in: query - name: recordFilter - description: Filter operators by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE - required: false + type: "dateTime" + example: "2019-01-01T00:00:00Z" + format: "uuid" + orgId: + in: "path" + name: "orgId" + description: "Organization ID" + required: true schema: - type: string - example: ACTIVE - format: uuid - lastModifiedTime: - in: query - name: lastModifiedTime - description: Start of the range for timestamp filtering + type: "string" + example: 123456 + format: "uuid" + recordFilter: + in: "query" + name: "recordFilter" + description: "Filter operators by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE" required: false schema: - type: dateTime - example: '2019-01-01T00:00:00Z' - format: uuid - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - org1: 'org1' - org2: 'org2' + type: "string" + example: "ACTIVE" + format: "uuid" schemas: + ContentType: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + GetAvailableLinks: + properties: + self: + example: "https://sandboxapi.deere.com/platform/organizations/123456/operators" + description: "Self Link" + GetOperatorAvailableLinks: + properties: + self: + example: "https://sandboxapi.deere.com/platform/organizations/123456/operators/0235d40e-02d0-44cb-a126-fff21173fc1f" + description: "Self Link" GetResponseDetails: properties: id: - type: string - example: 0235d40e-02d0-44cb-a126-fff21173fc1f - description: Operator ID + type: "string" + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + description: "Operator ID" name: - type: string - example: John Doe - description: Operator Name + type: "string" + example: "John Doe" + description: "Operator Name" dateModified: - type: datetime - example: 2019-03-22T08:48:20Z - description: Datetime when the entity modified, it would be null on creation. + type: "datetime" + example: "2019-03-22T08:48:20Z" + description: "Datetime when the entity modified, it would be null on creation." archived: - type: boolean - example: 'true' - description: Archived Status - + type: "boolean" + example: "true" + description: "Archived Status" GetResponseOperatorDetails: properties: id: - type: string - example: 0235d40e-02d0-44cb-a126-fff21173fc1f - description: Operator ID + type: "string" + example: "0235d40e-02d0-44cb-a126-fff21173fc1f" + description: "Operator ID" name: - type: string - example: John Doe - description: Operator Name + type: "string" + example: "John Doe" + description: "Operator Name" dateModified: - type: datetime - example: 2019-03-22T08:48:20Z - description: Datetime when the entity modified, it would be null on creation. + type: "datetime" + example: "2019-03-22T08:48:20Z" + description: "Datetime when the entity modified, it would be null on creation." archived: - type: boolean - example: 'true' - description: Archived Status + type: "boolean" + example: "true" + description: "Archived Status" PostOperator: properties: name: - example: John Doe - description: Operator Name - type: string - ContentType: - properties: - Content-Type: application/vnd.deere.axiom.v3+json + example: "John Doe" + description: "Operator Name" + type: "string" PutOperator: properties: name: - example: John Doe - description: Operator Name - type: string + example: "John Doe" + description: "Operator Name" + type: "string" required: true archived: - example: 'false' - type: string - description: Archived Status - - GetAvailableLinks: - properties: - self: - example: https://sandboxapi.deere.com/platform/organizations/123456/operators - description: Self Link - - GetOperatorAvailableLinks: - properties: - self: - example: https://sandboxapi.deere.com/platform/organizations/123456/operators/0235d40e-02d0-44cb-a126-fff21173fc1f - description: Self Link - - - - - + example: "false" + type: "string" + description: "Archived Status" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + org1: "org1" + org2: "org2" diff --git a/specs/raw/organizations.yaml b/specs/raw/organizations.yaml index 86f7994..515ce19 100644 --- a/specs/raw/organizations.yaml +++ b/specs/raw/organizations.yaml @@ -1,319 +1,312 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - title: Organizations - description: This endpoint is used to retrieve organizations for which the requesting user has permissions. + title: "Organizations" + description: "This endpoint is used to retrieve organizations for which the requesting user has permissions." version: "0.0.1" servers: - - url: https://api.deere.com/platform - description: MyJohnDeere API + - url: "https://api.deere.com/platform" + description: "MyJohnDeere API" paths: /organizations: get: - summary: List Orgs - description: This request will return a list of organizations. + summary: "List Orgs" + description: "This request will return a list of organizations." parameters: - - $ref: '#/components/parameters/UserName' - - $ref: '#/components/parameters/OrgId' - - $ref: '#/components/parameters/OrgName' - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/UserName" + - $ref: "#/components/parameters/OrgId" + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/X-deere-signature" responses: - 200: - description: Organization List + "200": + description: "Organization List" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/OrganizationLink' + $ref: "#/components/schemas/OrganizationLink" values: items: - $ref: '#/components/schemas/Organization' + $ref: "#/components/schemas/Organization" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations" total: 2 values: - - '@type': Organization - name: A First Org Name (Is Enabled) - type: customer + - "@type": "Organization" + name: "A First Org Name (Is Enabled)" + type: "customer" member: true internal: false - id: '1234' + id: "1234" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: manage_connections - uri: >- - https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234 - - '@type': Organization - name: A Second Org Name (Not Enabled) - type: customer + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "manage_connections" + uri: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" + - "@type": "Organization" + name: "A Second Org Name (Not Enabled)" + type: "customer" member: true internal: false - id: '4321' + id: "4321" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/4321 - - rel: connections - uri: >- - https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations - 403: - description: Not authorized - 404: - description: Not found + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/4321" + - rel: "connections" + uri: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations" + "403": + description: "Not authorized" + "404": + description: "Not found" /organizations/{orgId}: get: - summary: View an Organization - description: 'This request will return information about an organization, such as its name, type, and whether or not you are a member of the organization. It contains links to the following resources:' + summary: "View an Organization" + description: "This request will return information about an organization, such as its name, type, and whether or not you are a member of the organization. It contains links to the following resources:" parameters: - - $ref: '#/components/parameters/OrgIdGet' + - $ref: "#/components/parameters/OrgIdGet" responses: - 200: - description: View Organization List + "200": + description: "View Organization List" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/OrganizationLink2' + $ref: "#/components/schemas/OrganizationLink2" values: items: - $ref: '#/components/schemas/OrganizationView' + $ref: "#/components/schemas/OrganizationView" examples: Org enabled: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb" value: - '@type': Organization - name: OrgName - type: customer + "@type": "Organization" + name: "OrgName" + type: "customer" member: true internal: false - id: '1234' + id: "1234" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: manage_connections - uri: >- - https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234 + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "manage_connections" + uri: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" Org not enabled: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb" value: - '@type': Organization - name: OrgName - type: customer + "@type": "Organization" + name: "OrgName" + type: "customer" member: true internal: false - id: '4321' + id: "4321" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/4321 - - rel: connections - uri: >- - https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/4321" + - rel: "connections" + uri: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations" /users/{userName}/organizations: get: - summary: View User Orgs - description: 'This request will return a list of organizations. The response will ONLY contain organizations in which the user is a staff member (member=true). This response will NOT contain partner organizations in which the user is not a staff member (member=false).' + summary: "View User Orgs" + description: "This request will return a list of organizations. The response will ONLY contain organizations in which the user is a staff member (member=true). This response will NOT contain partner organizations in which the user is not a staff member (member=false)." parameters: - - $ref: '#/components/parameters/UserName2' - - $ref: '#/components/parameters/X-deere-signature2' + - $ref: "#/components/parameters/UserName2" + - $ref: "#/components/parameters/X-deere-signature2" responses: - 200: - description: View Organization List + "200": + description: "View Organization List" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/OrganizationLink2' + $ref: "#/components/schemas/OrganizationLink2" values: items: - $ref: '#/components/schemas/OrganizationViewGet' + $ref: "#/components/schemas/OrganizationViewGet" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b5392015e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/users/johndoe/organizations + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/users/johndoe/organizations" total: 2 values: - - '@type': Organization - name: A First Org Name (Is Enabled) - type: customer + - "@type": "Organization" + name: "A First Org Name (Is Enabled)" + type: "customer" member: true internal: false - id: '1234' + id: "1234" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: manage_connections - uri: >- - https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234 - - '@type': Organization - name: A Second Org Name (Not Enabled) - type: customer + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "manage_connections" + uri: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" + - "@type": "Organization" + name: "A Second Org Name (Not Enabled)" + type: "customer" member: true internal: false - id: '4321' + id: "4321" links: - - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/4321 - - rel: connections - uri: >- - https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/organizations - + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/4321" + - rel: "connections" + uri: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/organizations" components: parameters: - UserName: - in: query - name: userName - description: Returns a list of organizations of which a particular user is a member. + OrgId: + in: "query" + name: "orgId" + description: "Returns the name of the organization that corresponds with the given organization ID." required: false schema: - type: string - example: JohnDoe - UserName2: - in: path - name: userName - description: User Name. + type: "string" + example: 2101 + OrgIdGet: + in: "path" + name: "orgId" + description: "Organization" required: true schema: - type: string - example: JohnDoe - OrgId: - in: query - name: orgId - description: Returns the name of the organization that corresponds with the given organization ID. + type: "string" + example: 734561 + OrgName: + in: "query" + name: "orgName" + description: "Returns a list of organizations that contain the given string in their name." required: false schema: - type: string - example: 2101 - OrgName: - in: query - name: orgName - description: Returns a list of organizations that contain the given string in their name. + type: "string" + example: "Smith Farms" + UserName: + in: "query" + name: "userName" + description: "Returns a list of organizations of which a particular user is a member." required: false schema: - type: string - example: Smith Farms + type: "string" + example: "JohnDoe" + UserName2: + in: "path" + name: "userName" + description: "User Name." + required: true + schema: + type: "string" + example: "JohnDoe" X-deere-signature: - in: header - name: x-deere-signature - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. + in: "header" + name: "x-deere-signature" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." required: false schema: - type: string - example: 7r5392615e4b4e1c92018026f47109bb + type: "string" + example: "7r5392615e4b4e1c92018026f47109bb" X-deere-signature2: - in: header - name: x-deere-signature - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. + in: "header" + name: "x-deere-signature" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." required: false schema: - type: string - example: 4r5392615e4b4e1c92018026f47109bb - OrgIdGet: - in: path - name: orgId - description: Organization - required: true - schema: - type: string - example: 734561 + type: "string" + example: "4r5392615e4b4e1c92018026f47109bb" schemas: + Organization: + properties: + x-deere-signature: + type: "string" + example: "3b5392015e4b4e1c92013026f47109bb" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + id: + type: "string" + description: "The organization ID." + example: 1234 + name: + type: "string" + description: "The organization name." + example: "Smith Farms" + type: + type: "string" + description: "The organization type: customer or dealer." + example: "customer" + member: + type: "boolean" + example: "true" + description: "TRUE means that the user is a member of the org." OrganizationLink: properties: self: - example: https://sandboxapi.deere.com/platform/organizations/1234 - description: Link to organization + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Link to organization" connections: - example: https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations - description: Redirect link to enable organization access + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/select-organizations" + description: "Redirect link to enable organization access" manage_connections: - example: https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234 - description: Redirect link to manage organization access and permissions + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" + description: "Redirect link to manage organization access and permissions" OrganizationLink2: properties: self: - example: https://sandboxapi.deere.com/platform/organizations/1234 - description: Link to organization + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Link to organization" connections: - example: https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/organizations - description: Redirect link to enable organization access + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/organizations" + description: "Redirect link to enable organization access" manage_connections: - example: https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234 - description: Redirect link to manage organization access and permissions - Organization: - properties: - x-deere-signature: - type: string - example: 3b5392015e4b4e1c92013026f47109bb - description: A new x-deere-signature response header will be included if the response has changed since last api call. - id: - type: string - description: The organization ID. - example: 1234 - name: - type: string - description: The organization name. - example: Smith Farms - type: - type: string - description: 'The organization type: customer or dealer.' - example: customer - member: - type: boolean - example: 'true' - description: TRUE means that the user is a member of the org. + example: "https://connections.deere.com/connections/28efb3cb-cbd5-4888-8570-99465ea8860e/connections-dialog?orgId=1234" + description: "Redirect link to manage organization access and permissions" OrganizationView: properties: id: - type: string - description: The organization ID. + type: "string" + description: "The organization ID." example: 1234 name: - type: string - description: The organization name. - example: Smith Farms + type: "string" + description: "The organization name." + example: "Smith Farms" type: - type: string - description: 'The organization type: customer or dealer.' - example: customer + type: "string" + description: "The organization type: customer or dealer." + example: "customer" member: - type: boolean - example: 'true' - description: TRUE means that the user is a member of the org. + type: "boolean" + example: "true" + description: "TRUE means that the user is a member of the org." OrganizationViewGet: properties: x-deere-signature: - type: string - example: 3b5392015e4b4e1c92013026f47109bb - description: A new x-deere-signature response header will be included if the response has changed since last api call. + type: "string" + example: "3b5392015e4b4e1c92013026f47109bb" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." id: - type: string - description: Organization ID. + type: "string" + description: "Organization ID." example: 1234 name: - type: string - description: Organization name. - example: Smith Farms + type: "string" + description: "Organization name." + example: "Smith Farms" type: - type: string - description: 'Organization type.' - example: customer + type: "string" + description: "Organization type." + example: "customer" partnerships: - example: Apple Farms - type: string - description: Partners of this organization. + example: "Apple Farms" + type: "string" + description: "Partners of this organization." member: - type: boolean - example: 'true' - description: Indicates whether the user is a member of the organization. + type: "boolean" + example: "true" + description: "Indicates whether the user is a member of the organization." diff --git a/specs/raw/partnerships.yaml b/specs/raw/partnerships.yaml index 4219e1b..da6b9d7 100644 --- a/specs/raw/partnerships.yaml +++ b/specs/raw/partnerships.yaml @@ -1,93 +1,81 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - title: Partnerships & Permission + title: "Partnerships & Permission" version: "0.0.1" servers: - - url: https://api.deere.com/platform - description: MyJohnDeere API + - url: "https://api.deere.com/platform" + description: "MyJohnDeere API" tags: - - name: Partnership Endpoints + - name: "Partnership Endpoints" paths: /partnerships: get: - summary: List Partners - description: 'This request allows the client to view a list of partners. Each data point links to the following: -
          • fromPartnership: View the organization that initiated the partnership.
          • -
          • toPartnership: View the organization that the partner request was sent to. If the partnership has not been accepted, only the invited users email address will be returned.
          • -
          • delete: Use this link to delete the partnership.
          • -
          • permissions: View the permissions assigned within the partnership.
          • -
          • contactInvitation: The ID specific to the partnership request.
          ' + summary: "List Partners" + description: "This request allows the client to view a list of partners. Each data point links to the following:
          • fromPartnership: View the organization that initiated the partnership.
          • toPartnership: View the organization that the partner request was sent to. If the partnership has not been accepted, only the invited users email address will be returned.
          • delete: Use this link to delete the partnership.
          • permissions: View the permissions assigned within the partnership.
          • contactInvitation: The ID specific to the partnership request.
          " tags: - - Partnership Endpoints + - "Partnership Endpoints" security: - - OAuth2: [ org1 ] + - OAuth2: + - "org1" parameters: - - $ref: '#/components/parameters/X-deere-signature' + - $ref: "#/components/parameters/X-deere-signature" responses: - 200: - description: Partnerships + "200": + description: "Partnerships" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Partnerships' + $ref: "#/components/schemas/Partnerships" examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json
          - x-deere-signature: 3b6402615e4b4e1c92013026f47109bb' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b6402615e4b4e1c92013026f47109bb" value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/partnerships + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships" total: 2 values: - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc - - rel: fromPartnership - uri: https://sandboxapi.deere.com/platform/organizations/0987 - - rel: toPartnership - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: permissions - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions - - rel: contactInvitation - uri: >- - https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703 - status: ACCEPTED + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc" + - rel: "fromPartnership" + uri: "https://sandboxapi.deere.com/platform/organizations/0987" + - rel: "toPartnership" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "permissions" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" + - rel: "contactInvitation" + uri: "https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703" + status: "ACCEPTED" - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/partnerships/4ecbb066-bd4c-485e-bcf8-99a470364d5a - - rel: fromPartnership - uri: https://sandboxapi.deere.com/platform/organizations/7654 - - rel: toPartnership - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: permissions - uri: >- - https://sandboxapi.deere.com/platform/partnerships/4ecbb066-bd4c-485e-bcf8-99a470364d5a/permissions - - rel: contactInvitation - uri: >- - https://sandboxapi.deere.com/platform/partnerships/47f27b3a-2639-4bc4-a1c3-33dc0bce32ac - status: ACCEPTED - 403: - $ref: '#/components/responses/Forbidden' + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships/4ecbb066-bd4c-485e-bcf8-99a470364d5a" + - rel: "fromPartnership" + uri: "https://sandboxapi.deere.com/platform/organizations/7654" + - rel: "toPartnership" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "permissions" + uri: "https://sandboxapi.deere.com/platform/partnerships/4ecbb066-bd4c-485e-bcf8-99a470364d5a/permissions" + - rel: "contactInvitation" + uri: "https://sandboxapi.deere.com/platform/partnerships/47f27b3a-2639-4bc4-a1c3-33dc0bce32ac" + status: "ACCEPTED" + "403": + $ref: "#/components/responses/Forbidden" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - + Content-Type: "application/vnd.deere.axiom.v3+json" post: - summary: Request a Partnership - description: 'This will send an email request to create a partnership from an organization identified in the request. To discover an organization ID to send the request from, you must first query the /organizations endpoint to discover available organizations for a user.' + summary: "Request a Partnership" + description: "This will send an email request to create a partnership from an organization identified in the request. To discover an organization ID to send the request from, you must first query the /organizations endpoint to discover available organizations for a user." tags: - - Partnership Endpoints + - "Partnership Endpoints" security: - - OAuth2: [ org2 ] + - OAuth2: + - "org2" requestBody: content: application/vnd.deere.axiom.v3+json: @@ -95,468 +83,414 @@ paths: No Header: value: links: - - rel: toPartnership - uri: mailto:redacted@example.com - - rel: fromPartnership - uri: https://partnerapi.deere.com/platform/organizations/orgId + - rel: "toPartnership" + uri: "mailto:redacted@example.com" + - rel: "fromPartnership" + uri: "https://partnerapi.deere.com/platform/organizations/orgId" responses: - 200: - description: Created Partnership + "200": + description: "Created Partnership" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '201 Created
          -
          - Date: Mon, 17 Mar 2014 15:56:13 GMT
          - Server: Apache-Coyote/1.1
          - X-Deere-Handling-Server: ldxtc2
          - X-Deere-Elapsed-Ms: 2300
          - Content-Type: text/plain
          - Location: https://sandboxapi.deere.com/platform/partnerships/6076f729-d3b0-4297-bfb4-8f88b99420ac
          - Connection: Keep-Alive
          - Keep-Alive: timeout=5, max=99
          - Content-Length: 0' - 400: - $ref: '#/components/responses/BadCreateRequests' - 403: - $ref: '#/components/responses/Forbidden' + description: "201 Created

          Date: Mon, 17 Mar 2014 15:56:13 GMT
          Server: Apache-Coyote/1.1
          X-Deere-Handling-Server: ldxtc2
          X-Deere-Elapsed-Ms: 2300
          Content-Type: text/plain
          Location: https://sandboxapi.deere.com/platform/partnerships/6076f729-d3b0-4297-bfb4-8f88b99420ac
          Connection: Keep-Alive
          Keep-Alive: timeout=5, max=99
          Content-Length: 0" + "400": + $ref: "#/components/responses/BadCreateRequests" + "403": + $ref: "#/components/responses/Forbidden" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - + Content-Type: "application/vnd.deere.axiom.v3+json" /partnerships/{token}: get: - summary: Get Partnership Details - description: 'This request allows the client to view partnership details. The response links to the following resources: -
          • fromPartnership: View the organization that initiated the partnership.
          • -
          • toPartnership: View the organization that the partner request was sent to. If the partnership has not been accepted, only the invited users email address will be returned.
          • -
          • delete: Use this link to delete the partnership.
          • -
          • permissions: View the permissions assigned within the partnership.
          • -
          • contactInvitation: The ID specific to the partnership request.
          ' + summary: "Get Partnership Details" + description: "This request allows the client to view partnership details. The response links to the following resources:
          • fromPartnership: View the organization that initiated the partnership.
          • toPartnership: View the organization that the partner request was sent to. If the partnership has not been accepted, only the invited users email address will be returned.
          • delete: Use this link to delete the partnership.
          • permissions: View the permissions assigned within the partnership.
          • contactInvitation: The ID specific to the partnership request.
          " security: - - OAuth2: [ org1 ] + - OAuth2: + - "org1" tags: - - Partnership Endpoints + - "Partnership Endpoints" parameters: - - $ref: '#/components/parameters/PartnershipId' + - $ref: "#/components/parameters/PartnershipId" responses: - 200: - description: Partnerships + "200": + description: "Partnerships" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PartnershipsId' + $ref: "#/components/schemas/PartnershipsId" examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc - - rel: fromPartnership - uri: https://sandboxapi.deere.com/platform/organizations/0987 - - rel: toPartnership - uri: https://sandboxapi.deere.com/platform/organizations/1234 - - rel: permissions - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions - - rel: contactInvitation - uri: >- - https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703 - status: ACCEPTED - - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/TokenNotFound' + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc" + - rel: "fromPartnership" + uri: "https://sandboxapi.deere.com/platform/organizations/0987" + - rel: "toPartnership" + uri: "https://sandboxapi.deere.com/platform/organizations/1234" + - rel: "permissions" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" + - rel: "contactInvitation" + uri: "https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703" + status: "ACCEPTED" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/TokenNotFound" delete: - summary: Delete a Partnership - description: This request lets the client delete a partnership. + summary: "Delete a Partnership" + description: "This request lets the client delete a partnership." security: - - OAuth2: [ org2 ] + - OAuth2: + - "org2" tags: - - Partnership Endpoints + - "Partnership Endpoints" parameters: - - $ref: '#/components/parameters/PartnershipId' + - $ref: "#/components/parameters/PartnershipId" responses: - 200: - description: Deleted Partnership + "200": + description: "Deleted Partnership" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - type: integer + type: "integer" example: 1 - format: int32 + format: "int32" examples: Headers: - description: '204 No Content
          -
          - Date: Mon, 17 Mar 2014 16:01:32 GMT
          - Server: Apache-Coyote/1.1
          - X-Deere-Handling-Server: ldxtc4
          - X-Deere-Elapsed-Ms: 856
          - Content-Type: text/plain
          - Connection: Keep-Alive
          - Keep-Alive: timeout=5, max=100
          - Content-Length: 0' - 403: - $ref: '#/components/responses/Forbidden' - 404: - $ref: '#/components/responses/TokenNotFound' + description: "204 No Content

          Date: Mon, 17 Mar 2014 16:01:32 GMT
          Server: Apache-Coyote/1.1
          X-Deere-Handling-Server: ldxtc4
          X-Deere-Elapsed-Ms: 856
          Content-Type: text/plain
          Connection: Keep-Alive
          Keep-Alive: timeout=5, max=100
          Content-Length: 0" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/TokenNotFound" /partnerships/{token}/permissions: get: - summary: View Permissions in a Partnership - description: This request allows the client to view all the permissions that one partner has assigned the other. The response will also link to the Assign Permissions resource, which will allow the client to assign permissions to a partner. + summary: "View Permissions in a Partnership" + description: "This request allows the client to view all the permissions that one partner has assigned the other. The response will also link to the Assign Permissions resource, which will allow the client to assign permissions to a partner." parameters: - - $ref: '#/components/parameters/PartnershipId' - note: 'Please Note: This API does not support eTags.' + - $ref: "#/components/parameters/PartnershipId" + note: "Please Note: This API does not support eTags." security: - - OAuth2: [ org1 ] + - OAuth2: + - "org1" responses: - 200: - description: Permissions + "200": + description: "Permissions" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Permissions' + $ref: "#/components/schemas/Permissions" examples: No Header: - description: '200 OK
          - Content-Type: application/vnd.deere.axiom.v3+json' + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" value: links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions - - rel: requestPermissions - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" + - rel: "requestPermissions" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" permissions: - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions/productionAgronomicDetailData - type: productionAgronomicDetailData - status: requested + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions/productionAgronomicDetailData" + type: "productionAgronomicDetailData" + status: "requested" - links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions/prescriptionFiles - type: prescriptionFiles - status: notGiven - + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions/prescriptionFiles" + type: "prescriptionFiles" + status: "notGiven" post: - summary: Request/Assign Permissions - description: 'This request allows the client to update a partner permission or request a permission from a partner. To enable file sharing within this partnership, assign or request the relevant permission type.2' - note: '*** Note that if the client is requesting permissions from a pending partnership (after using POST /partnerships), the partnershipId in this case would be the contactInvitationId.' + summary: "Request/Assign Permissions" + description: "This request allows the client to update a partner permission or request a permission from a partner. To enable file sharing within this partnership, assign or request the relevant permission type.2" + note: "*** Note that if the client is requesting permissions from a pending partnership (after using POST /partnerships), the partnershipId in this case would be the contactInvitationId." parameters: - - $ref: '#/components/parameters/PartnershipId' + - $ref: "#/components/parameters/PartnershipId" security: - - OAuth2: [ org2 ] + - OAuth2: + - "org2" requestBody: content: application/vnd.deere.axiom.v3+json: examples: No Header: - description: 'Accept: application/vnd.deere.axiom.v3+json
          - Content-Type: application/vnd.deere.axiom.v3+json' + description: "Accept: application/vnd.deere.axiom.v3+json
          Content-Type: application/vnd.deere.axiom.v3+json" value: permissions: - - type: viewDetailsAndMapLocation - status: requested + - type: "viewDetailsAndMapLocation" + status: "requested" responses: - 200: - description: Permissions + "200": + description: "Permissions" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PermissionsPost' + $ref: "#/components/schemas/PermissionsPost" examples: Headers: - description: '204 No Content' + description: "204 No Content" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - + Content-Type: "application/vnd.deere.axiom.v3+json" components: - parameters: - X-deere-signature: - name: x-deere-signature - in: header - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. - schema: - type: string - example: 9f5396716e4b4e1c92018026f47109bb - PartnershipId: - name: token - in: path - description: Token Id - required: true - schema: - type: GUID - example: '2b1b34fc-2cc3-4a57-8120-28ea912113fc' - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - org1: 'org1' - org2: 'org2' examples: - TokenNotFound: - value: { - "@type": Errors, - errors: [ - { - "@type": Error, - guid: 123abc-123-abc-123-abc123, - message: No Partnership exists with the given partnership token. - } - ], - otherAttributes: { } - } + CreateInvalidPrimaryDealer: + value: + "@type": "Errors" + errors: + - "@type": "Error" + guid: "123abc-123-abc-123-abc123" + message: "Attempting to set a non-dealer organization as primary dealer." + code: "Attempting to set a non-dealer organization as primary dealer." + field: "uri" + invalidValue: "https://api.deere.com/platform/organizations/12345" + otherAttributes: {} NoDealerAccountExists: - value: { - "@type": Errors, - errors: [ - { - "@type": Error, - guid: 123abc-123-abc-123-abc123, - message: No dealer account exists with this accountId, - code: No dealer account exists with this accountId, - field: dealerAccountId, + value: + "@type": "Errors" + errors: + - "@type": "Error" + guid: "123abc-123-abc-123-abc123" + message: "No dealer account exists with this accountId" + code: "No dealer account exists with this accountId" + field: "dealerAccountId" invalidValue: 123412341234 - } - ], - otherAttributes: { } - } - + otherAttributes: {} OrgAccountDoesNotExist: - value: { - "@type": Errors, - errors: [ - { - "@type": Error, - guid: 123abc-123-abc-123-abc123, - message: No organization exists with given orgId., - code: No organization exists with given orgId., - field: dealerAccountId, - invalidValue: "https://api.deere.com/platform/organizations/12345" - } - ], - otherAttributes: { } - } - - CreateInvalidPrimaryDealer: - value: { - "@type": Errors, - errors: [ - { - "@type": Error, - guid: 123abc-123-abc-123-abc123, - message: Attempting to set a non-dealer organization as primary dealer., - code: Attempting to set a non-dealer organization as primary dealer., - field: uri, + value: + "@type": "Errors" + errors: + - "@type": "Error" + guid: "123abc-123-abc-123-abc123" + message: "No organization exists with given orgId." + code: "No organization exists with given orgId." + field: "dealerAccountId" invalidValue: "https://api.deere.com/platform/organizations/12345" - } - ], - otherAttributes: { } - } - responses: + otherAttributes: {} TokenNotFound: - description: Not found - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/Errors' - examples: - Partnership Not Found: - $ref: '#/components/examples/TokenNotFound' + value: + "@type": "Errors" + errors: + - "@type": "Error" + guid: "123abc-123-abc-123-abc123" + message: "No Partnership exists with the given partnership token." + otherAttributes: {} + parameters: + PartnershipId: + name: "token" + in: "path" + description: "Token Id" + required: true + schema: + type: "GUID" + example: "2b1b34fc-2cc3-4a57-8120-28ea912113fc" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9f5396716e4b4e1c92018026f47109bb" + responses: BadCreateRequests: - description: Request body was invalid + description: "Request body was invalid" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Errors' + $ref: "#/components/schemas/Errors" examples: Dealer Account Does Not Exist: - $ref: '#/components/examples/NoDealerAccountExists' + $ref: "#/components/examples/NoDealerAccountExists" Organization Does Not Exist: - $ref: '#/components/examples/OrgAccountDoesNotExist' + $ref: "#/components/examples/OrgAccountDoesNotExist" Invalid Primary Dealer Organization: - $ref: '#/components/examples/CreateInvalidPrimaryDealer' + $ref: "#/components/examples/CreateInvalidPrimaryDealer" Forbidden: - description: Not authorized + description: "Not authorized" + TokenNotFound: + description: "Not found" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + examples: + Partnership Not Found: + $ref: "#/components/examples/TokenNotFound" schemas: - Errors: - description: A list of errors - properties: - "@type": - type: string - example: Errors - errors: - type: array - items: - $ref: "#/components/schemas/Error" - otherAttributes: - type: object - Error: - description: An error object + description: "An error object" properties: "@type": - type: string - example: Error + type: "string" + example: "Error" guid: - type: string - format: guid - example: 17826sd23-e5e1-4921-8841-3c5f584r3a2e + type: "string" + format: "guid" + example: "17826sd23-e5e1-4921-8841-3c5f584r3a2e" message: - type: string - example: No dealer account exists with this accountId + type: "string" + example: "No dealer account exists with this accountId" code: - type: string - example: No dealer account exists with this accountId + type: "string" + example: "No dealer account exists with this accountId" field: - type: string - example: dealerAccountId + type: "string" + example: "dealerAccountId" invalidValue: - type: string + type: "string" example: 1234123412341234 + Errors: + description: "A list of errors" + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + otherAttributes: + type: "object" + Partnership: + description: "A partnership object" + type: "object" + properties: + x-deere-signature: + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "3b6402615e4b4e1c92013026f47109bb" + status1: + type: "string" + example: "REJECTED" + description: "View the status of the partnership" + PartnershipId: + properties: + status1: + type: "string" + example: "PENDING" + description: "View the status of the partnership" Partnerships: - description: A list of partnerships - type: object + description: "A list of partnerships" + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/PartnershipsLink' + $ref: "#/components/schemas/PartnershipsLink" total: - type: integer - format: int64 - description: Number of partnerships found. + type: "integer" + format: "int64" + description: "Number of partnerships found." example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/Partnership' - - Partnership: - description: A partnership object - type: object - properties: - x-deere-signature: - type: string - description: A new x-deere-signature response header will be included if the response has changed since last api call. - example: '3b6402615e4b4e1c92013026f47109bb' - status1: - type: string - example: REJECTED - description: View the status of the partnership - PartnershipsLink: - properties: - fromPartnership: - example: https://sandboxapi.deere.com/platform/organizations/0987 - description: Organizations Link. - toPartnership: - example: https://sandboxapi.deere.com/platform/organizations/1234 - description: Organizations Link. - permissions: - example: https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions - description: Permissions Link. - contactInvitation: - example: https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703 - description: Partnerships Link. + $ref: "#/components/schemas/Partnership" PartnershipsId: - description: A list of partnerships - type: object + description: "A list of partnerships" + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/PartnershipsLink' + $ref: "#/components/schemas/PartnershipsLink" total: - type: integer - format: int64 - description: Number of partnerships found. + type: "integer" + format: "int64" + description: "Number of partnerships found." example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/PartnershipId' - PartnershipId: + $ref: "#/components/schemas/PartnershipId" + PartnershipsLink: properties: - status1: - type: string - example: PENDING - description: View the status of the partnership + fromPartnership: + example: "https://sandboxapi.deere.com/platform/organizations/0987" + description: "Organizations Link." + toPartnership: + example: "https://sandboxapi.deere.com/platform/organizations/1234" + description: "Organizations Link." + permissions: + example: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" + description: "Permissions Link." + contactInvitation: + example: "https://sandboxapi.deere.com/platform/partnerships/c3cf441b-d814-400b-842c-44fb7ecad703" + description: "Partnerships Link." + PermissionPostValue: + properties: + type2: + type: "string" + example: "viewDetailsAndMapLocation" + description: "The type of permission." + status: + type: "string" + example: "requested" + description: "Indicates whether this permission has been granted to the partner org. Possible values are: Not Given, Requested, and Approved." + PermissionValue: + properties: + type2: + type: "string" + example: "prescription Files" + description: "The type of permission." + status: + type: "string" + example: "PENDING" + description: "View the status of the partnership" Permissions: - description: A list of permissions - type: object + description: "A list of permissions" + type: "object" properties: links: - type: array + type: "array" items: - $ref: '#/components/schemas/PermissionsLink' + $ref: "#/components/schemas/PermissionsLink" total: - type: integer - format: int64 - description: Number of permissions found. + type: "integer" + format: "int64" + description: "Number of permissions found." example: 1 values: - type: array + type: "array" items: - $ref: '#/components/schemas/PermissionValue' + $ref: "#/components/schemas/PermissionValue" PermissionsLink: properties: requestPermissions: - example: https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions - description: Permissions Link. - PermissionValue: - properties: - type2: - type: string - example: prescription Files - description: The type of permission. - status: - type: string - example: PENDING - description: View the status of the partnership + example: "https://sandboxapi.deere.com/platform/partnerships/2b1b34fc-2cc3-4a57-8120-28ea912113fc/permissions" + description: "Permissions Link." PermissionsPost: - description: A list of permissions - type: object + description: "A list of permissions" + type: "object" properties: values: - type: array + type: "array" items: - $ref: '#/components/schemas/PermissionPostValue' - PermissionPostValue: - properties: - type2: - type: string - example: viewDetailsAndMapLocation - description: The type of permission. - status: - type: string - example: requested - description: 'Indicates whether this permission has been granted to the partner org. Possible values are: Not Given, Requested, and Approved.' + $ref: "#/components/schemas/PermissionPostValue" + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + org1: "org1" + org2: "org2" diff --git a/specs/raw/products.yaml b/specs/raw/products.yaml index c773577..2bdb8bc 100644 --- a/specs/raw/products.yaml +++ b/specs/raw/products.yaml @@ -1,1329 +1,7435 @@ openapi: "3.0.0" info: - title: Inputs API - description: Provides a reference list for crop varieties + title: "Inputs API" + description: "Provides a reference list for crop varieties" version: "3.0" license: - name: INPUTS + name: "INPUTS" tags: - - name: Reference Data - - name: Products - description: Chemical/Fertilizer and Variety master data for an organization - - name: Tank Mixes - description: Tank Mix master data for an organization + - name: "Reference Data" + - name: "Products" + description: "Chemical/Fertilizer and Variety master data for an organization" + - name: "Tank Mixes" + description: "Tank Mix master data for an organization" + - name: "Active Ingredients" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - partnerapi - - sandboxapi - - api - - apicert - - apiqa.tal - - apidev.tal + - "partnerapi" + - "sandboxapi" + - "api" + - "apicert" + - "apiqa.tal" + - "apidev.tal" paths: - /organizations/{organizationId}/varieties: + /activeIngredients: get: tags: - - Varieties - summary: View varieties for an org - description: This endpoint will retrieve a collection of varieties for the specified org. - parameters: - - $ref: '#/components/parameters/OrganizationID' - - $ref: '#/components/parameters/ArchiveStatus' - - $ref: '#/components/parameters/VarietyEmbed' + - "Active Ingredients" + summary: "List of available active ingredients" security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" + description: "Returns a list of all available active ingredients." + parameters: + - $ref: "#/components/parameters/EntityTypeQueryParam" responses: - 200: - description: A collection of your org varieties. If any of the supported embeds are used, the associated data will be present as a field in the variety. + "200": + description: "List of available active ingredients." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/VarietyCollection' + $ref: "#/components/schemas/ActiveIngredientsCollection" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' value: links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=0 - - '@type': Link - rel: nextPage - uri: https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=10 - total: 20 + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/isg/activeIngredients" + total: 4 values: - - '@type': Variety - id: 8e1e0920-1265-4066-8067-8ce2ce5012b2 - name: '1299' - category: VARIETY - cropName: Cornell - companyName: Curry Seed - createdTime: "2024-12-04T07:52:51.267Z" - modifiedTime : "2024-12-06T07:52:51.267Z" - referenceGuid: '8e1e0920-1265-4066-8067-8ce2ce5012b2' - referenceId: '8e1e0920-1265-4066-8067-8ce2ce5012b2' - archived: false - countryCode: USA - documentsList: - - '@type': 'Document' - erid: '08e930ee-4c31-41b6-b57e-8c0a8e1284a4' - docType: '24(c) Registration' - productErid: '388ab719-277d-4032-a2c3-40a297d8f482' - description: 'CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed' - fileName: 'ld7OD026.pdf' - expirationDate: '2017-03-22' - childProducts: - - '@type': Variety - id: 18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc - name: 'corn123' - companyName: 1.4GROUP - cropName: SOYBEANS - archived: false - category: VARIETY - createdTime: '2025-03-21T21:12:53.865Z' - modifiedTime: '2025-04-06T15:12:52.910Z' - countryCode: USA - cleanupStatus: MERGED - parentErid: b0241592-c95a-4a8b-a2f9-3e58168ac291 - cleanupActionDate: 2025-09-22T11:24:43.855Z - documentsList: [ ] - childProducts: [ ] - - links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff - - - '@type': Variety - id: 1a63a1fe-b00f-403f-81f7-c157e0234cc4 - name: 2C788A SXRA COR - category: VARIETY - cropName: CORN_WET - companyName: MYCOGEN SEEDS - createdTime: "2024-12-04T07:52:51.267Z" - referenceGuid: '1a63a1fe-b00f-403f-81f7-c157e0234cc4' - referenceId: '8e1e0920-1265-4066-8067-8ce2ce5012b2' - archived: false - countryCode: USA - documentsList: - - '@type': 'Document' - erid: '4cb1e8c0-e801-4f19-b674-6362246be920' - docType: '24(c) Registration' - productErid: '388ab719-277d-4032-a2c3-40a297d8f482' - description: 'CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed' - fileName: 'ld7OD026.pdf' - expirationDate: '2017-03-22' - - links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/356823/varieties/c3a58145-acfc-4b73-bc1d-0d442697e053 - - - '@type': Variety - id: bd489040-c98b-403e-ac6e-ab2d7d4ac3fa - name: 33H83 - category: VARIETY - cropName: CORN_WET - companyName: Pioneer - createdTime: "2024-12-04T07:52:51.267Z" - referenceGuid: 'bd489040-c98b-403e-ac6e-ab2d7d4ac3fa' - referenceId: '8e1e0920-1265-4066-8067-8ce2ce5012b2' - archived: false - countryCode: USA - documentsList: - - '@type': 'Document' - erid: 'cf09acfc-9196-4dbb-9b38-1be02673c5ff' - docType: '24(c) Registration' - productErid: '388ab719-277d-4032-a2c3-40a297d8f482' - description: 'CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed' - fileName: 'ld7OD026.pdf' - expirationDate: '2017-03-22' - links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/356823/varieties/b006726b-38a0-44a6-b723-a966c68170b6 - 403: - description: The user has not been provided access to the varieties for this org - 404: - description: The specified organization does not exist - - post: + - "@type": "ActiveIngredient" + id: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + name: "Urea Nitrogen" + - "@type": "ActiveIngredient" + id: "e022ec44-43de-43ab-92e2-2c60da7762b9" + name: "1-aminocyclopropanecarboxylic acid" + - "@type": "ActiveIngredient" + id: "fa79f870-7aa1-48e7-9d1e-4cf98d68ca57" + name: "1-aminocyclopropanecarboxylic acid (ACC)" + - "@type": "ActiveIngredient" + id: "962bd78a-0029-4c6a-b2dd-2efab3f53285" + name: "1-Methylcyclopropene" + "401": + description: "The user does not have access to the list of active ingredients." + /chemicals: + get: tags: - - Varieties - summary: Add a variety - description: This endpoint will add a custom variety into the organization. Its name+cropName must be unique within your organization. Its crop name must be a supported crop name (see /cropTypes). - There are a number of crop names that are deprecated in the system. If the crop name is set to one of these, then it will be mapped to its corresponding valid crop name.
          -
          - Additionally, POST can be used for supporting offline creation of varieties from e.g. a mobile app, - by sending a payload with an `id` generated by the client. If an `id` is present in the payload, - the service checks the database for that `id`.
          -
          - In case no record is found, a new one is created with that `id` and the request is responded with 201.
          - Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists. - parameters: - - $ref: '#/components/parameters/OrganizationID' + - "Reference Chemicals" + summary: "Reference list of all known chemicals" security: - - OAuth2: [ eq2 ] - requestBody: - description: The product to add. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/PostVariety' - examples: - No Header: - value: - name: 2C788A SXRA COR - companyName: MYCOGEN SEEDS - cropName: CORN_WET - category: VARIETY - archived: false - createdTime: '2017-03-21T21:12:53.865Z' - modifiedTime: '2018-04-06T15:12:52.910Z' + - OAuth2: + - "eq1" + description: "List of all chemicals from industry data sources, such as CDMS." + note: "Note: Either searchString, productName, or brandName is required as a parameter in the query to get returned results. If searchString AND productName and/or brandName is added to the query, searchString will be ignored. When using searchString, results will contain items with search value from name or companyName. When using productName, value must be exact match to companyName string. When using brandName, value must be exact match to companyName string, and is case sensitive. All results will be limited to 100 values." + parameters: + - name: "searchString" + in: "query" + description: "performs a fuzzy search on product name, manufacturer, and chemical type. The search string must be at least 3 characters long." + schema: + type: "string" + example: "Roundup" + required: true + - name: "chemicalType" + in: "query" + description: "Specifies the registration number of the chemical based on the country or region/state of use." + schema: + type: "string" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + example: "INSECTICIDE" + - name: "productName" + in: "query" + description: "Specifies the name of the chemical in the global reference list." + schema: + type: "string" + example: "RoundUp" + required: true + - name: "brandName" + in: "query" + description: "Specifies the product manufacturer name of the chemical based on the region being used." + schema: + type: "string" + example: "MONSANTO AGRICULTURAL CO" + required: true + - name: "registration" + in: "query" + description: "Specifies the registration number of the chemical based on the region of use." + schema: + type: "string" + example: "89167-72-89391" + - name: "sourceSystemProductId" + in: "query" + description: "Specifies the source system product id of the chemical based on the country of use." + schema: + type: "string" + example: "905P24930" + - name: "countryCode" + in: "query" + description: "Specifies the region the chemical data belongs to. Some data may not be available in certain regions and data will not be included in the response." + schema: + type: "string" + example: "USA" responses: - 201: + "200": + description: "A collection of products matching the specified search criteria." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/responses/Created' + $ref: "#/components/schemas/ReferenceChemicalCollection" examples: - Headers: - description: '201 Created
          Location: https://sandboxapi.deere.com/platform/organizations/654321/varieties/8e1e0920-1265-4066-8067-8ce2ce5012b2' - 403: - description: The user has not been provided write access to the variety list for the org - 404: - description: The specified organization does not exist - 400: - description: Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid. - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/Errors' - 409: - description: A product already exists in this org with the specified reference Erid - contentType: - description: The request body used to create or update a client - content: - application/vnd.deere.axiom.v3+json: - schema: - properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - - /organizations/{organizationId}/varieties/{erid}: + No Header: + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/chemicals?searchString=round&itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/chemicals?searchString=round&itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "ReferenceChemical" + id: "8fb34898-64f5-5a1e-a698-34ab348220a7" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + materialClassification: "LIQUID" + category: "CHEMICAL" + epaRegistration: "a12e9i84" + referenceId: "8fb34898-64f5-5a1e-a698-34ab348220a7" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + countryCode: "USA" + type: "HERBICIDE" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: "905P24925" + - "@type": "ReferenceChemical" + id: "bef74fe4-95bf-4e00-9833-b5b8272177c8" + name: "SOURCE® Corn" + category: "CHEMICAL" + type: "HERBICIDE" + companyName: "Sound Agriculture" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2023-09-02T01:32:21.945933Z" + modifiedTime: "2023-11-15T16:40:15.451Z" + sourceSystem: "3" + sourceSystemProductId: "20265" + countryCode: "USA" + referenceId: "bef74fe4-95bf-4e00-9833-b5b8272177c8" + referenceGuid: "bef74fe4-95bf-4e00-9833-b5b8272177c8" + restrictedUse: false + - "@type": "ReferenceChemical" + id: "aa1ffc6e-edcd-4112-b62d-74cdad35fa03" + name: "Roundup Ultra®" + category: "CHEMICAL" + type: "HERBICIDE" + companyName: "BAYER CROPSCIENCE" + epaRegistration: "524-475" + registration: "524-475" + materialClassification: "LIQUID" + createdTime: "2023-09-02T01:22:00.669119Z" + modifiedTime: "2024-11-19T15:20:10.752Z" + sourceSystem: "3" + sourceSystemProductId: "856" + countryCode: "USA" + referenceId: "aa1ffc6e-edcd-4112-b62d-74cdad35fa03" + referenceGuid: "aa1ffc6e-edcd-4112-b62d-74cdad35fa03" + restrictedUse: false + "403": + description: "The user does not have access to manage products." + "404": + description: "No chemical found with this country code." + /chemicals/{erid}: get: - summary: View a specific variety - description: This endpoint will return the variety with the specified erid. - parameters: - - $ref: '#/components/parameters/OrganizationID' - - $ref: '#/components/parameters/ERID' - - $ref: '#/components/parameters/VarietyEmbed' + tags: + - "Reference Chemicals" + summary: "Get a single reference chemical" + description: "Single chemical from industry data sources, such as CDMS." security: - - OAuth2: [ eq1 ] + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/ERID" responses: - 200: - description: A variety object + "200": + description: "A single chemical matching the specified erid." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Variety' + $ref: "#/components/schemas/ReferenceChemical" examples: No Header: - description: '200 OK
          Content-Type: application/vnd.deere.axiom.v3+json' value: - '@type': Variety - id: 8e1e0920-1265-4066-8067-8ce2ce5012b2 - name: '1299' - cropName: Cornell - companyName: Curry Seed - archived: false - category: VARIETY - referenceGuid: '8e1e0920-1265-4066-8067-8ce2ce5012b2' - referenceId: '8e1e0920-1265-4066-8067-8ce2ce5012b2' - createdTime: '2017-03-21T21:12:53.865Z' - modifiedTime: '2017-03-22T21:12:53.870Z' - countryCode: USA - documentsList: - - '@type': 'Document' - erid: 'cf09acfc-9196-4dbb-9b38-1be02673c5ff' - docType: '24(c) Registration' - productErid: '388ab719-277d-4032-a2c3-40a297d8f482' - description: 'CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed' - fileName: 'ld7OD026.pdf' - expirationDate: '2017-03-22' - childProducts: - - '@type': Variety - id: 18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc - name: 'corn123' - companyName: 1.4GROUP - cropName: SOYBEANS - archived: false - category: VARIETY - createdTime: '2025-03-21T21:12:53.865Z' - modifiedTime: '2025-04-06T15:12:52.910Z' - countryCode: USA - cleanupStatus: MERGED - parentErid: b0241592-c95a-4a8b-a2f9-3e58168ac291 - cleanupActionDate: 2025-09-22T11:24:43.855Z - documentsList: [] - childProducts: [] - links: - - '@type': Link - rel: self - uri: https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff - 403: - description: The user does not have sufficient privileges to access varieties in this org - 404: - description: There is no variety matching the specified Erid + "@type": "ReferenceChemical" + id: "8fb34898-64f5-5a1e-a698-34ab348220a7" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + materialClassification: "LIQUID" + category: "CHEMICAL" + countryCode: "USA" + type: "HERBICIDE" + restrictedUse: false + sourceSystem: "3" + epaRegistration: "a12e9i84" + sourceSystemProductId: "905P24925" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + "403": + description: "The user does not have access to manage products." + "404": + description: "No chemical found matching this erid." + /chemicals/{erid}/associateToOrg/{organizationId}: + post: + tags: + - "Reference Chemicals" + summary: "Adds a single reference chemical to organization" + security: + - OAuth2: + - "eq2" + description: "This endpoint will associate a reference chemical to your organization from the global reference list. - put: - summary: Update a single variety - description: This endpoint allows the custom variety to be renamed, made active/archived, or associated to a different manufacturer or crop type. + The reference chemicals are immutable, however, they can still be archived or made available. + + If a reference chemical is created as a carrier, it cannot be changed thereafter. + + The registration of a reference chemical can also be updated. + + The response headers from the GET endpoints will include the attributes that can be overridden.\n" parameters: - - $ref: '#/components/parameters/OrganizationID' - - $ref: '#/components/parameters/ERID' - security: - - OAuth2: [ eq2 ] + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" requestBody: - description: The updated variety object. + description: "The product to add." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/PutVariety' + $ref: "#/components/schemas/PostReferenceChemical" examples: No Header: value: - name: '1299' - companyName: Curry Seed - cropName: SOYBEANS - archived: true - createdTime: '2019-03-28T14:59:57.000Z' - modifiedTime: '2019-03-27T14:59:57.000Z' + countryCode: "USA" + overrides: + - key: "archived" + value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" + value: true responses: - 204: - description: The update was completed successfully + "200": + description: "Successful association of reference chemical to org." content: application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" examples: Headers: - description: '204 No Content
          The update was completed successfully.' - 400: - description: Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid + description: "201 Created" + value: + - key: "archived" + success: true + errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." content: - application/vnd.deere.axiom.v3+json: + application/json: schema: - $ref: '#/components/schemas/Errors' - 403: - description: The user does not have sufficient privileges to update varieties in this org - 404: - description: There is no variety matching the specified Erid + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to products for organization" + "404": + description: "Organization does not exist" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - - /varieties/{erid}/associateToOrg/{organizationId}: - post: + Content-Type: "application/vnd.deere.axiom.v3+json" + /chemicals/{erid}/documents: + get: tags: - - Reference Varieties - summary: Adds a single reference variety to organization + - "Reference Chemicals" + summary: "Reference list of documents for an associated chemical" security: - - OAuth2: [ eq2 ] - description: | - This endpoint will associate a reference variety to your organization from the global reference list. - The reference varieties are immutable, however, they can still be archived or made available. - The response headers from the GET endpoints will include the attributes that can be overridden. + - OAuth2: + - "eq1" + description: "List of all the documents for a chemical from industry data sources, such as CDMS." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "A collection of documents for the specified chemical." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DocumentCollection_Chemicals" + examples: + No Header: + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/chemicals/2efdaf0a-254c-4ba2-9a1f-b3c94f962224/documents?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "next" + uri: "https://sandboxapi.deere.com/platform/chemicals/2efdaf0a-254c-4ba2-9a1f-b3c94f962224/documents?itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "Document" + erid: "1f8c12b4-126f-11ec-82a8-0242ac130003" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + docType: "24(c) Registration" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + - "@type": "Document" + erid: "6d0b01a5-05b7-4c2b-985b-c322939f92cb" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + fileName: "mp6EE011.pdf" + docType: "SDS" + description: "2/26/2021" + "403": + description: "The user does not have access to manage products." + /chemicals/{erid}/setOverridesForOrg/{organizationId}: + patch: + tags: + - "Reference Chemicals" + security: + - OAuth2: + - "eq2" + summary: "Sets organizational attributes such as isCarrier, archived, registration, etc" + description: "This endpoint will set attribute overrides while importing a reference chemical to your organization. The reference chemicals are immutable, however, they can still be archived or made available. Once set to true, the carrier attribute cannot be set to false. The registration of a reference chemical can be updated. The response headers from the GET endpoints will include the attributes that can be overridden." parameters: - - $ref: '#/components/parameters/ERID' - - $ref: '#/components/parameters/OrganizationID' + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" requestBody: - description: The product to add. + description: "The product to add." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ReferenceProductPointerRequest' + $ref: "#/components/schemas/CommonReferenceChemical" examples: No Header: value: - countryCode: USA overrides: - - key: archived + - key: "archived" + value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" value: true responses: - 200: - description: Successful association of reference variety to org. + "200": + description: "Successful update of overrides of reference chemical associated to your org." content: application/vnd.deere.axiom.v3+json: schema: - type: array + type: "array" items: - $ref: '#/components/schemas/ReferenceProductOverrideStatus' + $ref: "#/components/schemas/ReferenceProductOverrideStatus_Chemicals" examples: Headers: - description: '201 Created
          Created successfully.' + description: "200 Created" value: - - key: archived + - key: "archived" + success: true + errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" success: true - errors: [ ] - 400: - description: 'Unresolvable name conflict or other error occurred.' + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." content: application/json: schema: properties: total: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1 errors: - type: array + type: "array" items: - $ref: '#/components/schemas/Errors' - 403: - description: 'Invalid access to products for organization' - 404: - description: Organization does not exist. - 409: - description: A product already exists in this org with the specified erid. + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to reference product associated to organization" + "404": + description: "Organization does not exist" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - - /varieties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /documents/{erid}: + get: + tags: + - "Documents" + summary: "Document details w/ pdf file" + security: + - OAuth2: + - "eq1" + description: "Document details for a product with embedded pdf file (gzip+base64)." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "Document details with included pdf file." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DocumentWithPdfFile" + examples: + No Header: + value: + "@type": "Document" + erid: "cff5ba0b-1768-48a3-b3ec-dd62aac1cff3" + productErid: "7d9ec6a6-6b8f-4312-92c7-bc022b7f5351" + fileName: "ld8NF004.pdf" + docType: "Specimen Label" + description: "SAL 7/27/11" + pdfFile: "H4sIAAAAAAAAAIy7BVhduxI2XNy1aLFNcYe9cXd3l01xd3eKuzsUd5fiBYq7u0OLe6G4f+05175z7n+/f60nzySTWZPJ5J1kW..." + "403": + description: "The user does not have access to manage products." + "404": + description: "Not Found." + /fertilizers: get: tags: - - Reference Varieties - summary: Search reference catalog varieties + - "Reference Fertilizers" + summary: "Reference list of all known fertilizers" security: - - OAuth2: [ eq1 ] - description: This endpoint searches the reference catalog for varieties that match the given search criteria. This data can be used in a subsequent request to create a variety in an organization. Results are limited to 100 items. + - OAuth2: + - "eq1" + description: "List of all fertilizers from industry data sources, such as CDMS." note: "Note: Either searchString, productName, or brandName is required as a parameter in the query to get returned results. If searchString AND productName and/or brandName is added to the query, searchString will be ignored. When using searchString, results will contain items with search value from name or companyName. When using productName, value must be exact match to companyName string. When using brandName, value must be exact match to companyName string, and is case sensitive. All results will be limited to 100 values." parameters: - - name: searchString - in: query - description: Performs a fuzzy search on variety and manufacturer name. The search string must be at least 3 characters long. + - name: "searchString" + in: "query" + description: "performs a fuzzy search on product name, manufacturer, and fertilizer type. The search string must be at least 3 characters long." schema: - type: string - example: venture + type: "string" + example: "Manure" required: true - - name: cropName - in: query - description: Filters the results by crop id (see the /cropTypes API). + - name: "fertilizerType" + in: "query" + description: "Specifies the registration number of the fertilizer based on the country or region/state of use." schema: - type: string - example: SOYBEANS - - name: productName - in: query - description: Specifies the name of the variety from the global reference list. + type: "string" + enum: + - "FERTILIZER" + - "MANURE" + example: "FERTILIZER" + - name: "productName" + in: "query" + description: "Specifies the name of the fertilizer in the global reference list." schema: - type: string - example: 'SH 5614 LL/STS' + type: "string" + example: "ProNatural® Calcium Plus 1-0-0" required: true - - name: brandName - in: query - description: Specifies the product manufacturer name of the variety based on the region being used. + - name: "brandName" + in: "query" + description: "Specifies the product manufacturer name of the fertilizer based on the region being used." schema: - type: string - example: 'Southern Harvest' + type: "string" + example: "Wilbur-Ellis Company LLC" required: true - - name: sourceSystemProductId - in: query - description: Specifies the source system product id of the variety based on the country of use. + - name: "registration" + in: "query" + description: "Specifies the registration number of the fertilizer based on the region of use." + schema: + type: "string" + example: "EXEMPT" + - name: "sourceSystemProductId" + in: "query" + description: "Specifies the source system product id of the fertilizer based on the country of use." schema: - type: string - example: '79186' - - name: countryCode - in: query - description: Specifies the region the variety data belongs to. Some data may not be available in certain regions and data will not be included in the response. + type: "string" + example: "13328" + - name: "countryCode" + in: "query" + description: "Specifies the region the fertilizer data belongs to. Some data may not be available in certain regions and data will not be included in the response." schema: - type: string - example: 'USA' + type: "string" + example: "USA" responses: - 200: - description: A collection of reference varieties matching the specified search criteria. + "200": + description: "A collection of reference fertilizers matching the specified search criteria." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ReferenceVarietyCollection' + $ref: "#/components/schemas/ReferenceFertilizerCollection" examples: Headers: - description: '200 OK' + description: "200 OK" value: links: - - "@type": Link - rel: self - uri: https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=0 - - "@type": Link - rel: nextPage - uri: https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=10 + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/fertilizers?searchString=corn&itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/fertilizers?searchString=corn&itemLimit=10&pageOffset=10" total: 100 values: - - "@type": ReferenceVariety - id: 1f8c12b4-126f-11ec-82a8-0242ac130003 - referenceId: 1f8c12b4-126f-11ec-82a8-0242ac130003 - category: VARIETY - name: S73-Z5 - 50lb bag - companyName: NK - cropName: SOYBEANS - countryCode: USA - sourceSystem: '3' - sourceSystemProductId: 905P24925 - createdTime: '2017-03-21T21:12:53.865Z' - modifiedTime: '2018-04-06T15:12:52.910Z' - - "@type": ReferenceVariety - id: 75138754-6381-49c7-be9e-9e08a847075a - referenceId: 75138754-6381-49c7-be9e-9e08a847075a - category: VARIETY - name: Cornelius 155A - companyName: Cornelius Seed - cropName: ALFALFA - countryCode: USA - sourceSystem: '3' - sourceSystemProductId: 105332 - createdTime: '2023-09-02T05:10:33.415Z' - modifiedTime: '2024-11-20T02:04:39.994Z' - - 403: - description: The user does not have access to manage products. - 404: - description: No variety found with this country code. - - /varieties/{erid}: + - "@type": "Fertilizer" + id: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + referenceId: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + materialClassification: "LIQUID" + category: "FERTILIZER" + countryCode: "USA" + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + type: "MANURE" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: "905P24925" + - "@type": "Fertilizer" + id: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + referenceId: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + name: "Corn Mix LS" + companyName: "WinField United" + registration: "EXEMPT" + materialClassification: "LIQUID" + category: "FERTILIZER" + countryCode: "USA" + epaRegistration: "EXEMPT" + createdTime: "2023-11-02T22:49:10.585718Z" + modifiedTime: "2024-11-19T17:51:38.225Z" + type: "FERTILIZER" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: 13977 + "403": + description: "The user does not have access to manage products." + "404": + description: "No fertilizer found with this country code." + /fertilizers/{erid}: get: tags: - - Reference Varieties - summary: Get a single reference variety. + - "Reference Fertilizers" + summary: "Single reference fertilizer" security: - - OAuth2: [ eq1 ] - description: Single variety from industry data sources, such as CDMS. + - OAuth2: + - "eq1" + description: "Single fertilizer from industry data sources, such as CDMS." parameters: - - $ref: '#/components/parameters/ERID' + - $ref: "#/components/parameters/ERID" responses: - 200: - description: A single variety matching the specified erid. + "200": + description: "A single reference fertilizer matching the specified erid." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/ReferenceVariety' + $ref: "#/components/schemas/ReferenceFertilizer" examples: Headers: - description: '200 OK' + description: "200 OK" value: - "@type": ReferenceVariety - id: 1f8c12b4-126f-11ec-82a8-0242ac130003 - referenceId: 1f8c12b4-126f-11ec-82a8-0242ac130003 - category: VARIETY - name: S73-Z5 - 50lb bag - companyName: NK - cropName: SOYBEANS - countryCode: USA - sourceSystem: '3' - sourceSystemProductId: 905P24925 - createdTime: '2017-03-21T21:12:53.865Z' - modifiedTime: '2018-04-06T15:12:52.910Z' - 403: - description: The user does not have access to manage products. - 404: - description: No variety found matching this erid. + "@type": "Fertilizer" + id: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + referenceId: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + name: "Round Up" + companyName: "Monsanto" + registration: "a12e9i84" + epaRegistration: "a12e9i84" + materialClassification: "LIQUID" + category: "FERTILIZER" + countryCode: "USA" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + type: "MANURE" + restrictedUse: false + sourceSystem: "3" + sourceSystemProductId: "905P24925" + "403": + description: "The user does not have access to manage products." + "404": + description: "No fertilizer found matching this erid." + /fertilizers/{erid}/associateToOrg/{organizationId}: + post: + tags: + - "Reference Fertilizers" + summary: "Adds a single reference fertilizer to organization" + security: + - OAuth2: + - "eq2" + description: "This endpoint will associate a reference fertilizer to your organization from the global reference list. + + The reference fertilizers are immutable, however, they can still be archived or made available. + + If a reference fertilizer is created as a carrier, it cannot be changed thereafter. + + The registration of a reference fertilizer can also be updated. - '/varieties/{erid}/documents': + The response headers from the GET endpoints will include the attributes that can be overridden.\n" + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostReferenceFertilizer" + examples: + No Header: + value: + countryCode: "USA" + overrides: + - key: "archived" + value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" + value: true + responses: + "200": + description: "Successful association of reference fertilizer to org." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "200 Created" + value: + - key: "archived" + success: true + errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: + application/json: + schema: + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to products for organization" + "404": + description: "Organization does not exist" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /fertilizers/{erid}/documents: get: tags: - - Reference Varieties - summary: Reference list of documents for an associated seed variety. + - "Reference Fertilizers" + summary: "Reference list of documents for an associated fertilizer" security: - - OAuth2: [ eq1 ] - description: List of all the documents for a variety from industry data sources, such as CDMS. + - OAuth2: + - "eq1" + description: "List of all the documents for a fertilizer from industry data sources, such as CDMS." parameters: - - $ref: '#/components/parameters/ERID' + - $ref: "#/components/parameters/ERID" responses: - 200: - description: A collection of documents for the specified seed variety. + "200": + description: "A collection of documents for the specified fertilizer." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/DocumentCollection' + $ref: "#/components/schemas/DocumentCollection_Fertilizers" examples: Headers: - description: '200 OK' + description: "200 OK" value: links: - - "@type": Link - rel: self - uri: https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=0 - - "@type": Link - rel: nextPage - uri: https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=10 + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=10" total: 100 values: - - "@type": Document - erid: 1f8c12b4-126f-11ec-82a8-0242ac130003 - productErid: 388ab719-277d-4032-a2c3-40a297d8f482 - docType: 24(c) Registration - description: CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed - fileName: ld7OD026.pdf - expirationDate: '2017-03-22' - 403: - description: The user does not have access to manage products. - - '/varieties/{erid}/setOverridesForOrg/{organizationId}': - + - "@type": "Document" + erid: "1f8c12b4-126f-11ec-82a8-0242ac130003" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + docType: "24(c) Registration" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + - "@type": "Document" + erid: "5c2dd6b0-3f66-437c-910b-634c9e83e205" + productErid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + fileName: "mpCO7001.pdf" + docType: "SDS" + description: "April 6, 2020" + "403": + description: "The user does not have access to manage products." + /fertilizers/{erid}/setOverridesForOrg/{organizationId}: patch: tags: - - Reference Varieties - summary: Sets organizational attributes such as isCarrier, archived, registration, etc. + - "Reference Fertilizers" + summary: "Sets organizational attributes such as isCarrier, archived, registration, etc" security: - - OAuth2: [ eq2 ] - description: - This endpoint will set attribute overrides while importing a reference variety to your organization. - The reference varieties are immutable, however, they can still be archived or made available. - The response headers from the GET endpoints will include the attributes that can be overridden. + - OAuth2: + - "eq2" + description: "This endpoint will set attribute overrides while importing a reference fertilizer to your organization. The reference fertilizers are immutable, however, they can still be archived or made available. Once set to true, the carrier attribute cannot be set to false. The registration of a reference fertilizer can be updated. The response headers from the GET endpoints will include the attributes that can be overridden." parameters: - - $ref: '#/components/parameters/ERID' - - $ref: '#/components/parameters/OrganizationID' + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" requestBody: - description: The product to add. + description: "The product to add." content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/CommonProductPointerRequest' + $ref: "#/components/schemas/CommonPostReferenceFertilizer" examples: No Header: value: overrides: - - key: archived + - key: "archived" + value: true + - key: "registration" + value: "EXEMPT" + - key: "isCarrier" value: true responses: - 200: - description: Successful update of overrides of reference variety associated to your org. + "200": + description: "Successful update of overrides of reference fertilizer associated to your org." content: application/vnd.deere.axiom.v3+json: schema: - type: array + type: "array" items: - $ref: '#/components/schemas/ReferenceProductOverrideStatus' + $ref: "#/components/schemas/ReferenceProductOverrideStatus_Fertilizers" examples: Headers: - description: '200 OK' + description: "200 Created" value: - - key: archived + - key: "archived" + success: true + errors: [] + - key: "isCarrier" + success: true + errors: [] + - key: "registration" success: true - errors: [ ] - 400: - description: 'Unresolvable name conflict or other error occurred.' + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." content: application/json: schema: properties: total: - type: integer - format: int64 + type: "integer" + format: "int64" example: 1 errors: - type: array + type: "array" items: - $ref: '#/components/schemas/Errors' - 403: - description: 'Invalid access to reference product associated to organization' - 404: - description: 'Organization does not exist' + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to reference product associated to organization" + "404": + description: "Organization does not exist" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' -components: - parameters: - VarietyEmbed: - in: query - name: embed - description: An embeddable list of properties which are optional by default. - schema: - type: array - items: - type: string - enum: - - documents - - showMergedProducts - ArchiveStatus: - in: query - name: status - description: Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties. - required: false - schema: - type: string - enum: - - AVAILABLE - - ARCHIVED - - ALL - example: AVAILABLE - OrganizationID: - in: path - name: organizationId - description: The identifier of the Organization. - required: true - schema: - type: integer - example: 6781 - format: int64 - OrgId: - name: orgId - in: path - description: The organization owning the varieties. - required: true - schema: - type: number - example: 654321 - RecordFilter: - name: recordFilter - in: query - description: Filter results based on status - schema: - type: string - example: active, archived, all - Embed: - name: embed - in: query - description: Embeds extra information in the org varieties response - schema: - type: string - example: documents - Embed2: - name: embed - in: query - description: Embeds extra information in the variety response - schema: - type: string - example: documents - X-deere-signature: - name: x-deere-signature - in: header - description: x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. - schema: - type: string - example: 9r8392615e4b4e1c92018026f47109bb - VarietyId: - name: varietyId - in: path - description: The variety Id to find. - required: true - schema: - type: string - example: 8e1e0920-1265-4066-8067-8ce2ce5012b2 - VarietyId2: - name: varietyId - in: path - description: The variety Id - required: true - schema: - type: string - example: 8e1e0920-1265-4066-8067-8ce2ce5012b2 - ERID: - in: path - name: erid - description: A unique identifier for an entity formatted as a uuid. - required: true - example: cf09acfc-9196-4dbb-9b38-1be02673c5ff - schema: - type: string - format: uuid - securitySchemes: - OAuth2: - type: oauth2 - flows: - clientCredentials: - scopes: - ag2: 'ag2' - ag3: 'ag3' - schemas: - BaseResourceWithoutLink: - type: object - properties: - '@type': - type: string - example: BaseResource - id: - description: Primary identifier for resource. - type: string - format: uuid - example: 1f8c12b4-126f-11ec-82a8-0242ac130003 - Document: - type: object - allOf: - - properties: - '@type': - example: 'Document' - required: true - erid: - type: string - description: Unique id of the document - example: '08e930ee-4c31-41b6-b57e-8c0a8e1284a4' - docType: - type: string - example: '24(c) Registration' - description: Type of document for this product. - required: true - productErid: - type: string - example: 388ab719-277d-4032-a2c3-40a297d8f482 - description: The Unique id of the product. - required: true - description: - type: string - example: 'CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed' - description: Information about the document. - required: true - fileName: - type: string - example: 'ld7OD026.pdf' - description: The filename of the document. - required: true - expirationDate: - type: string - format: date - example: '2017-03-22' - readOnly: true - nullable: true - required: - - '@type' - - productErid - - docType - - description - - fileName - DocumentCollection: - type: object - allOf: - - $ref: '#/components/schemas/CollectionBase' - - properties: - values: - type: array - items: - $ref: '#/components/schemas/Document' - BaseResource: - type: object - properties: - '@type': - type: string - example: BaseResource - id: - description: Primary identifier for resource. - type: string - format: uuid - example: 1f8c12b4-126f-11ec-82a8-0242ac130003 - links: - type: array - description: Provides a reference to an associated object or list. - items: - $ref: '#/components/schemas/Link' - ReferenceVariety: - type: object + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/chemicals: + get: + tags: + - "Chemicals" + summary: "Retrieve unified list of custom and reference chemicals in your organization." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ArchiveStatus" + - $ref: "#/components/parameters/ChemicalEmbed" + responses: + "200": + description: "A collection of your org chemicals. If any of the supported embeds are used, the associated data will be present as a field in the chemical." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ChemicalCollection" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/85f76746-fba2-48d0-bf7c-e46a79b00327" + id: "85f76746-fba2-48d0-bf7c-e46a79b00327" + name: "Abacus V" + type: "INSECTICIDE" + category: "CHEMICAL" + companyName: "Rotam North America, Inc. - US" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + referenceId: "85f76746-fba2-48d0-bf7c-e46a79b00327" + referenceGuid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: + - "@type": "ActiveIngredient" + guid: "40ab45ee-96ef-4bfe-883a-fb65ced5b748" + name: "Ammonium sulfate" + percent: 40.25 + unit: "%" + value: 40.25 + availableRegistrations: + - "EXEMPT" + documentsList: + - "@type": "Document" + erid: "4360eaf3-cd0e-486d-88d9-8153ca547084" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "ldC7J001.pdf" + docType: "Specimen Label" + description: "6422SP-0418" + - "@type": "Document" + erid: "8769a734-7a91-4b6d-b829-06e50e25ebc6" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J002.pdf" + docType: "SDS" + description: "April 28, 2020" + - "@type": "Document" + erid: "d2c5f59f-1136-449e-9d62-017979f8a617" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J004.pdf" + docType: "SDS" + description: "10/29/2024" + childProducts: + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/chemicals/5e069eca-e445-41af-b870-c78390f7e7cb" + id: "5e069eca-e445-41af-b870-c78390f7e7cb" + name: "ABAMEC SC" + type: "ADDITIVE" + category: "CHEMICAL" + companyName: "1.4GROUP" + carrier: false + archived: true + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + cleanupStatus: "MERGED," + parentErid: "d8355ff0-2d14-4eee-8092-b30568cd4adb," + cleanupActionDate: "2025-09-15T11:25:16.149Z," + restrictedUse: false + countryCode: "USA" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/00e03fe1-421e-4b2d-870e-9c1f010fba66" + id: "00e03fe1-421e-4b2d-870e-9c1f010fba66" + name: "Chemical-Fungicide (Liquid)" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "Koch Agronomic Services, LLC" + carrier: false + archived: true + restrictedUse: false + countryCode: "USA" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Chemicals" + summary: "Add chemical" + parameters: + - $ref: "#/components/parameters/OrganizationID" + security: + - OAuth2: + - "eq2" + description: "This endpoint will add a custom chemical into the organization. Its name+type must be unique within your organization, unless carrier is set to true. If carrier is set to true, then type is disregarded. A chemical's carrier property cannot be changed to false once set to true. A chemical cannot be archived if it is in an active tank mix or dry blend. If a chemical is marked as archived and is used in a tank mix/dry blend, if the tank mix/dry blend is made available, then this chemical will also be made available. If passing in a liquid weight or weight unit, material classification should be set to LIQUID.

          Additionally, POST can be used for supporting offline creation of chemicals from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`.

          In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostChemical" + examples: + No Header: + value: + "@type": "Chemical" + name: "Tide Propiconazole 41.8EC" + registration: "a12e9i84" + companyName: "Tide International USA, Inc." + type: "HERBICIDE" + restrictedUse: false + materialClassification: "DRY" + carrier: false + archived: false + referenceGuid: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "a12e9i84" + responses: + "201": + description: "Create Chemicals" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/organizations/123456/chemicals/c0dcb00a-6b6f-4508-9180-679addad23f8" + "400": + description: "Schema validation error. Missing one or more of the required fields (name, company, type, material classification), or name does not meet length requirements." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user has not been provided write access to the product list for the org" + "404": + description: "The specified organization does not exist" + "409": + description: "A product already exists in this org with the requested Erid" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/chemicals/{erid}: + get: + tags: + - "Chemicals" + summary: "Retrieve a specific chemical from an organization's asset list." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/ChemicalEmbed" + responses: + "200": + description: "A chemical matching the requested erid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Chemical" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/85f76746-fba2-48d0-bf7c-e46a79b00327" + id: "85f76746-fba2-48d0-bf7c-e46a79b00327" + name: "AMS-All " + type: "ADJUVANT" + category: "CHEMICAL" + companyName: "Drexel Chemical Company" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + referenceId: "85f76746-fba2-48d0-bf7c-e46a79b00327" + referenceGuid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: + - "@type": "ActiveIngredient" + guid: "40ab45ee-96ef-4bfe-883a-fb65ced5b748" + name: "Ammonium sulfate" + percent: 40.25 + unit: "%" + value: 40.25 + availableRegistrations: + - "EXEMPT" + documentsList: + - "@type": "Document" + erid: "4360eaf3-cd0e-486d-88d9-8153ca547084" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "ldC7J001.pdf" + docType: "Specimen Label" + description: "6422SP-0418" + - "@type": "Document" + erid: "8769a734-7a91-4b6d-b829-06e50e25ebc6" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J002.pdf" + docType: "SDS" + description: "April 28, 2020" + - "@type": "Document" + erid: "d2c5f59f-1136-449e-9d62-017979f8a617" + productErid: "85f76746-fba2-48d0-bf7c-e46a79b00327" + fileName: "mpC7J004.pdf" + docType: "SDS" + description: "10/29/2024" + childProducts: + - "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/chemicals/5e069eca-e445-41af-b870-c78390f7e7cb" + id: "5e069eca-e445-41af-b870-c78390f7e7cb" + name: "ABAMEC SC" + type: "ADDITIVE" + category: "CHEMICAL" + companyName: "1.4GROUP" + carrier: false + archived: true + createdTime: "2024-10-18T10:00:08.480Z" + modifiedTime: "2024-10-18T10:00:08.729004Z" + cleanupStatus: "MERGED," + parentErid: "d8355ff0-2d14-4eee-8092-b30568cd4adb," + cleanupActionDate: "2025-09-15T11:25:16.149Z," + restrictedUse: false + countryCode: "USA" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + "403": + description: "The user does not have sufficient privileges to access products in this org" + "404": + description: "There is no product matching the specified Erid" + put: + tags: + - "Chemicals" + summary: "Update a single chemical" + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + description: "Allows the custom chemical to be renamed, made active/archived, or flagged as a carrier." + security: + - OAuth2: + - "eq2" + requestBody: + description: "The updated chemical object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutChemical" + examples: + No Header: + value: + "@type": "Chemical" + name: "Tide Propiconazole 41.8EC" + registration: "a12e9i84" + companyName: "Tide International USA, Inc." + type: "MANURE" + materialClassification: "GAS" + carrier: false + archived: false + restrictedUse: false + referenceGuid: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + liquidWeight: 3.14 + weightUnit: "lb/gal" + epaRegistration: "a12e9i84" + createdTime: "2017-03-20T21:12:53.870Z" + modifiedTime: "2017-03-22T21:12:53.870Z" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "a12e9i84" + responses: + "200": + description: "The update was completed successfully" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "An invalid type or material classification was specified." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user does not have sufficient privileges to update products in this org" + "404": + description: "There is no product matching the specified Erid" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/dryBlends: + post: + parameters: + - $ref: "#/components/parameters/OrganizationID" + tags: + - "Dry Blends" + summary: "Create a dry blend" + security: + - OAuth2: + - "eq2" + description: "Add a dry blend to the asset list of an organization. Any chemicals or fertilizers in the dry blend must exist in the organization before the dry blend is persisted. + + The name of the dry blend must be unique in your organization.
          + +
          + + Additionally, POST can be used for supporting offline creation of dry blends from e.g. a mobile app, + + by sending a payload with an `erid` generated by the client. If an `erid` is present in the payload, + + the service checks the database for that `erid`.
          + +
          + + In case no record is found, a new one is created with that `erid` and the request is responded with 201. + + Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `erid` already exists.\n" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostDryBlend" + examples: + No Header: + value: + "@type": "DryBlend" + name: "TestDryBlend" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 0 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "Mix in the carrier last" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 1.784 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/b25de35e-6062-4ecb-917d-ed145ab378d1" + targetCrops: + - "CORN_WET" + - "ALFALFA" + responses: + "201": + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/organizations/123456/dryBlends/11139377-60ab-451f-931e-1d0569f343f1" + "400": + description: "Missing a required field, or an invalid value is included in a field." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user is not allowed to manage products for this org." + "404": + description: "The specified organization does not exist." + "409": + description: "A dry blend already exists in this org with the requested erid." + contentType: + description: "The request body used to create a dry Blend" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + get: + parameters: + - $ref: "#/components/parameters/DryBlendEmbed" + - $ref: "#/components/parameters/OrganizationID" + tags: + - "Dry Blends" + summary: "Retrieve dry blends for an org" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A collection of dry blends." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DryBlendCollection" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/dryBlends?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/dryBlends?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "DryBlend" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8" + erid: "af20cf1a-2def-47ce-9861-35f51afc1ad8" + name: "dryblend_alfa" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "notes" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + targetCrops: + - "ALFALFA" + - "ALMONDS" + - "@type": "DryBlend" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/c0fac05d-a4e3-4c0d-9465-4a742ee08b11" + erid: "c0fac05d-a4e3-4c0d-9465-4a742ee08b11" + name: "dryBlend_almond" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "detail notes" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/efe46183-f5e6-43a5-9ceb-3611adc03cc3" + id: "efe46183-f5e6-43a5-9ceb-3611adc03cc3" + name: "LMA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "efe46183-f5e6-43a5-9ceb-3611adc03cc3" + referenceGuid: "efe46183-f5e6-43a5-9ceb-3611adc03cc3" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/efe46183-f5e6-43a5-9ceb-3611adc03cc3" + targetCrops: + - "ALMONDS" + "403": + description: "The user has not been provided access to the products for this org." + "404": + description: "The specified organization does not exist." + /organizations/{organizationId}/dryBlends/{erid}: + get: + parameters: + - $ref: "#/components/parameters/DryBlendEmbed" + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + tags: + - "Dry Blends" + summary: "Retrieves a specific dry blend" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A dry blend object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DryBlend" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          " + value: + "@type": "DryBlend" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8" + erid: "af20cf1a-2def-47ce-9861-35f51afc1ad8" + name: "dryblend_alfa" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "notes" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + product: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + targetCrops: + - "ALFALFA" + "403": + description: "The user has not been provided access to the products for this org." + "404": + description: "The specified organization does not exist, or does not contain the requested dry blend." + put: + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + tags: + - "Dry Blends" + summary: "Update a dry blend" + security: + - OAuth2: + - "eq2" + description: "Allows updates to be made to the name, archival status, and components of a dry blend." + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostDryBlend" + examples: + No Header: + value: + name: "TestDryBlend" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 0 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + materialClassification: "DRY" + archived: false + notes: "Mix in the carrier last" + components: + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac" + - "@type": "DryBlendComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 1.784 + vrDomainId: "vrSolutionRateMass" + unit: "lb1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/b25de35e-6062-4ecb-917d-ed145ab378d1" + targetCrops: + - "CORN_WET" + responses: + "204": + description: "The update was completed successfully." + content: + application/vnd.deere.axiom.v3+json: + examples: + Header: + description: "204 No Content" + "400": + description: "Missing a required field, or an invalid value is included in a field." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user is not allowed to manage products for this org." + "404": + description: "The specified dry blend does not exist in this organization." + contentType: + description: "The request body used to update a dry Blend" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/fertilizers: + get: + tags: + - "fertilizers" + summary: "Retrieve unified list of custom and reference fertilizers in your organization." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ArchiveStatus" + - $ref: "#/components/parameters/FertilizerEmbed" + responses: + "200": + description: "A collection of your org fertilizers. If any of the supported embeds are used, the associated data will be present as a field in the fertilizer.s" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/FertilizerCollection" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + id: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + name: "Corn Mix LS" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "WinField United" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + createdTime: "2025-09-15T11:15:38.863123Z" + referenceId: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + referenceGuid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://apiqa.tal.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + childProducts: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/3ae537ba-72ae-4446-98ca-882c54eb8fe1" + id: "3ae537ba-72ae-4446-98ca-882c54eb8fe1" + name: "cornMixLS~1" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "1.4GROUP" + createdTime: "2025-09-15T09:28:08.079Z" + modifiedTime: "2025-09-23T11:25:38.471Z" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + cleanupActionDate: "2025-09-23T11:25:38.521Z" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + childProducts: [] + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers/e2f8093a-b1ec-4bd4-a8de-aa83855cbd15" + id: "e2f8093a-b1ec-4bd4-a8de-aa83855cbd15" + type: "FERTILIZER" + category: "MANURE" + companyName: "Tide International USA,Inc." + name: "Tide Propiconazole 41.8EC" + registration: "a12e9i84" + epaRegistration: "a12e9i84" + materialClassification: "DRY" + restrictedUse: false + createdTime: "2018-04-30T08:30:19.326Z" + modifiedTime: "2018-04-26T15:13:32.890Z" + carrier: false + archived: false + carrierId: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + referenceGuid: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + referenceId: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + availableRegistrations: + - "a12e9i84, 0000264-00783-AA-0067760" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/fertilizers/6c42adb6-15ce-4f63-9528-c91470900e2c" + id: "6c42adb6-15ce-4f63-9528-c91470900e2c" + name: "SOURCE Corn" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "Sound Agriculture" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-12-05T06:43:57.118Z" + referenceId: "6c42adb6-15ce-4f63-9528-c91470900e2c" + referenceGuid: "6c42adb6-15ce-4f63-9528-c91470900e2c" + carrier: false + archived: false + restrictedUse: false + liquidWeight: 8.45 + weightUnit: "lbs/gal" + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + availableRegistrations: + - "a12e9i84, 0000264-00783-AA-0067760" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Fertilizer" + summary: "Add fertilizer" + description: "This endpoint will add a custom fertilizer into the organization. Its name+type must be unique within your organization, unless carrier is set to true. If carrier is set to true, then type is disregarded. A fertilizer's carrier property cannot be changed to false once set to true. A fertilizer cannot be archived if it is in an active tank mix or dry blend. If a fertilizer is marked as archived and is used in a tank mix/dry blend, if the tank mix/dry blend is made available, then this fertilizer will also be made available. If passing in a liquid weight or weight unit, material classification should be set to LIQUID.

          Additionally, POST can be used for supporting offline creation of fertilizers from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`.

          In case no record is found, a new one is created with that `id` and the request is responded with 201.
          Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + security: + - OAuth2: + - "eq2" + parameters: + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add. If an ERID is specified in the request, it should exist as part of the reference data set (/fertilizers); this ERID will be unique only within the context of an organization. If the ERID is omitted, a uuid will be assigned; in this case, the item will be considered a custom product, and there will be no association to any reference product. Using the reference Erid when adding a product will help to maintain a common parentage of products across organizations." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostFertilizer" + examples: + No Header: + value: + "@type": "Fertilizer" + name: "Tide Propiconazole 41.8EC" + companyName: "Tide International USA, Inc." + type: "MANURE" + materialClassification: "DRY" + registration: "a12e9i84" + restrictedUse: false + category: "FERTILIZER" + carrier: false + archived: false + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + responses: + "201": + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/organizations/123456/fertilizers/c0dcb00a-6b6f-4508-9180-679addad23f8" + "400": + description: "Schema validation error. Missing one or more of the required fields (name, company, type, material classification), or name does not meet length requirements." + "403": + description: "The user has not been provided write access to the product list for the org" + "404": + description: "The specified organization does not exist" + "409": + description: "A product already exists in this org with the requested Erid" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/fertilizers/{erid}: + get: + tags: + - "fertilizer" + summary: "Retrieve a specific fertilizer from an organization's asset list." + security: + - OAuth2: + - "eq1" + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/FertilizerEmbed" + responses: + "200": + description: "A product matching the requested Erid" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Fertilizer_Fertilizers" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + id: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + name: "Corn Mix LS" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "WinField United" + epaRegistration: "a12e9i84" + registration: "a12e9i84" + createdTime: "2025-09-15T11:15:38.863123Z" + materialClassification: "DRY" + modifiedTime: "2018-04-26T15:13:32.890Z" + referenceId: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + referenceGuid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + carrier: false + carrierId: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://apiqa.tal.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + availableRegistrations: + - "a12e9i84, 0000264-00783-AA-0067760" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + childProducts: + - "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://apiqa.tal.deere.com/platform/organizations/377848/fertilizers/3ae537ba-72ae-4446-98ca-882c54eb8fe1" + id: "3ae537ba-72ae-4446-98ca-882c54eb8fe1" + name: "cornMixLS~1" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "1.4GROUP" + createdTime: "2025-09-15T09:28:08.079Z" + modifiedTime: "2025-09-23T11:25:38.471Z" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "4dad43d3-4392-41c3-abcb-3eeed86bb3fb" + cleanupActionDate: "2025-09-23T11:25:38.521Z" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + childProducts: [] + "403": + description: "The user does not have sufficient privileges to access products in this org" + "404": + description: "There is no product matching the specified Erid" + put: + tags: + - "Fertilizer" + summary: "Update a single fertilizer" + security: + - OAuth2: + - "eq2" + description: "Allows the fertilizer custom to be renamed, made active/archived, or flagged as a carrier." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + requestBody: + description: "The updated fertilizer object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutFertilizer" + examples: + No Header: + value: + "@type": "Fertilizer" + name: "Tide Propiconazole 41.8EC" + companyName: "Tide International USA, Inc." + type: "MANURE" + materialClassification: "DRY" + registration: "a12e9i84" + restrictedUse: false + category: "FERTILIZER" + carrier: false + archived: false + liquidWeight: 3.14 + weightUnit: "lb/gal" + activeIngredients: + - name: "Urea Nitrogen" + guid: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + percent: 3.14 + unit: "%" + value: 3.14 + epaRegistration: "a12e9i84" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + responses: + "200": + description: "The update was completed successfully" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "An invalid type or material classification was specified" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user does not have sufficient privileges to update products in this org" + "404": + description: "There is no product matching the specified Erid" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/productCompanies: + get: + parameters: + - $ref: "#/components/parameters/OrganizationID" + tags: + - "Products Companies" + summary: "Retrieve product companies for an org." + security: + - OAuth2: + - "eq1" + description: "A unified list of custom and reference product companies in your organization." + responses: + "200": + description: "An collection of Companies" + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "array" + items: + $ref: "#/components/schemas/ProductCompany" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/productCompanies?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/productCompanies?itemLimit=10&pageOffset=10" + total: 1439 + values: + - "@type": "ProductCompany" + companyName: "Mosaic" + - "@type": "ProductCompany" + companyName: "Howard Fertilizer" + - "@type": "ProductCompany" + companyName: "Citizens LLC" + - "@type": "ProductCompany" + companyName: "Diamond K" + - "@type": "ProductCompany" + companyName: "The JC Smith Co" + - "@type": "ProductCompany" + companyName: "BH Hybrids" + - "@type": "ProductCompany" + companyName: "Garlic Research Labs" + - "@type": "ProductCompany" + companyName: "Atlantic - Pacific Agricultural Co., Inc." + - "@type": "ProductCompany" + companyName: "Crites Seeds Inc" + - "@type": "ProductCompany" + companyName: "Quality Borate Company" + "403": + description: "The user has not been provided access to the products for this org." + "404": + description: "The specified organization does not exist." + /organizations/{organizationId}/tankMixes: + get: + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/TankMixEmbed" + - $ref: "#/components/parameters/RecordFilter" + tags: + - "Tank Mixes" + summary: "Retrieve tank mixes for an org" + description: "This endpoint will retrieve tank mixes for an org." + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A collection of tank mixes" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/TankMixCollection" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          x-deere-signature: 3b539261-5e4b-4e1c-9201-3026f47109bb" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "0585cd6d-898a-4298-ac09-a61db88d9e7d" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 90 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + id: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + name: "28-0-0 UAN" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "---" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-11-07T06:47:38.220Z" + carrierId: "274bbd7b-24ae-11ee-9389-123df1de64f7" + referenceId: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + referenceGuid: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + notes: "" + archived: false + createdTime: "2024-11-07T06:47:39.246Z" + modifiedTime: "2024-11-07T06:47:39.246Z" + materialClassification: "LIQUID" + targetCrops: + - "ALFALFA" + - "CORN_WET" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d" + - "@type": "TankMix" + name: "214_tankmix" + orgUniqueId: "2a9a49ff-fd46-4a1f-a83d-7ce27f9c831e" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + id: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + name: "28-0-0 UAN" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "---" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-11-07T06:47:38.220Z" + carrierId: "274bbd7b-24ae-11ee-9389-123df1de64f7" + referenceId: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + referenceGuid: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 0 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + id: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + name: "Maybach" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + referenceId: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + referenceGuid: "dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + carrier: false + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/dfbe700e-87cb-4362-a23b-ff5afd1ccd4a" + notes: "" + archived: false + createdTime: "2024-11-07T06:48:29.403Z" + materialClassification: "LIQUID" + targetCrops: + - "ALMONDS" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/2a9a49ff-fd46-4a1f-a83d-7ce27f9c831e" + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Tank Mixes" + summary: "Create a tank mix" + description: "Add a tank mix to the asset list of an organization. Any chemicals or fertilizers in the tank mix must exist in the organization before the tank mix is persisted. The name of the tank mix must be unique in your organization.

          Additionally, POST can be used for supporting offline creation of tank mixes from e.g. a mobile app, by sending a payload with an `orgUniqueErid` generated by the client. If an `orgUniqueErid` is present in the payload, the service checks the database for that `orgUniqueErid`.

          In case no record is found, a new one is created with that `orgUniqueErid` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `orgUniqueErid` already exists." + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/TankMix" + examples: + No Header: + value: + "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "37eeb905-634f-43e4-9cca-dcc0f555f60e" + notes: "Mix in the carrier last" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 4.465466816647919 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateMass" + unit: "kg1ha-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 2 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0162de38-b270-472b-b20a-956900a6b8bf" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/01cfb82d-3618-4bf5-99eb-956900a6ec41" + sourceNode: "468fcde7-5d14-4bee-bedd-1a234234234" + archived: false + materialClassification: "LIQUID" + targetCrops: + - "CORN_WET" + - "ALFALFA" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/tankMixes/37eeb905-634f-43e4-9cca-dcc0f555f60e" + parameters: + - $ref: "#/components/parameters/OrganizationID" + security: + - OAuth2: + - "eq2" + responses: + "201": + description: "Create Tank mix" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/11139377-60ab-451f-931e-1d0569f343f1" + "400": + description: "Missing a required field, or an invalid value is included in a field." + "403": + description: "The user is not allowed to manage products for this org" + "404": + description: "The specified organization does not exist" + "409": + description: "A tank mix already exists in this org with the requested orgUniqueErid" + contentType: + description: "The request body used to create a tank mix" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/tankMixes/{id}: + get: + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/Id" + - $ref: "#/components/parameters/Embed2_TankMix" + tags: + - "Tank Mixes" + summary: "View a specific tank mix" + description: "This endpoint will retrieve a specific tank mix." + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A tank mix object" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/TankMixCollection" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json
          " + value: + - "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "0585cd6d-898a-4298-ac09-a61db88d9e7d" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 100 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 90 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Fertilizer" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + id: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + name: "28-0-0 UAN" + type: "FERTILIZER" + category: "FERTILIZER" + companyName: "---" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + materialClassification: "LIQUID" + createdTime: "2024-11-07T06:47:38.220Z" + carrierId: "274bbd7b-24ae-11ee-9389-123df1de64f7" + referenceId: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + referenceGuid: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 10 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + chemical: + "@type": "Chemical" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + id: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + name: "TELIA" + type: "FUNGICIDE" + category: "CHEMICAL" + companyName: "BASF" + epaRegistration: "EXEMPT" + registration: "EXEMPT" + modifiedTime: "2024-08-21T09:25:24.220763Z" + carrierId: "58984d7a-126e-4d31-98e9-1ed65a582d91" + referenceId: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + referenceGuid: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + carrier: true + archived: false + restrictedUse: false + countryCode: "USA" + agencyRegistrations: + - "@type": "AgencyRegistration" + links: + - "@type": "Link" + rel: "agency" + uri: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + registrationId: "EXEMPT" + activeIngredients: [] + availableRegistrations: [] + documentsList: [] + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + notes: "" + archived: false + createdTime: "2024-11-07T06:47:39.246Z" + modifiedTime: "2024-11-07T06:47:39.246Z" + materialClassification: "LIQUID" + targetCrops: + - "ALFALFA" + - "CORN_WET" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d" + "403": + description: "The user has not been provided access to the products for this org" + "404": + description: "The specified organization does not exist, or does not contain the requested tank mix" + put: + tags: + - "Tank Mixes" + summary: "Update a tank mix" + description: "This endpoint allows to update the metadata and the composition of a tank mix." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/Id" + security: + - OAuth2: + - "eq2" + requestBody: + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/TankMix" + examples: + No Header: + value: + "@type": "TankMix" + name: "TankMix_with_All_Crop" + orgUniqueId: "37eeb905-634f-43e4-9cca-dcc0f555f60e" + solutionRate: + "@type": "MeasurementAsDouble" + valueAsDouble: 5 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + volume: + "@type": "MeasurementAsDouble" + valueAsDouble: 1200 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal" + carrier: + "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 4.465466816647919 + vrDomainId: "vrSolutionRateLiquid" + unit: "gal1ac-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1" + components: + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateMass" + unit: "kg1ha-1" + links: + - "@type": "Link" + rel: "fertilizer" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 2 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0162de38-b270-472b-b20a-956900a6b8bf" + - "@type": "TankMixComponent" + rate: + "@type": "MeasurementAsDouble" + valueAsDouble: 3 + vrDomainId: "vrSolutionRateLiquid" + unit: "l1ha-1" + links: + - "@type": "Link" + rel: "chemical" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/01cfb82d-3618-4bf5-99eb-956900a6ec41" + sourceNode: "468fcde7-5d14-4bee-bedd-1a234234234" + archived: false + materialClassification: "LIQUID" + targetCrops: + - "ALFALFA" + - "CORN_WET" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/254751/tankMixes/37eeb905-634f-43e4-9cca-dcc0f555f60e" + responses: + "200": + description: "The update was completed successfull" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content" + "400": + description: "Missing a required field, or an invalid value is included in a field." + "403": + description: "The user is not allowed to manage products for this org" + "404": + description: "The specified tank mix does not exist in this organization" + contentType: + description: "The request body used to update a tank mix" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/varieties: + get: + tags: + - "Varieties" + summary: "View varieties for an org" + description: "This endpoint will retrieve a collection of varieties for the specified org." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ArchiveStatus" + - $ref: "#/components/parameters/VarietyEmbed" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A collection of your org varieties. If any of the supported embeds are used, the associated data will be present as a field in the variety." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/VarietyCollection" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/organizations/654321/varieties?itemLimit=10&pageOffset=10" + total: 20 + values: + - "@type": "Variety" + id: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + name: "1299" + category: "VARIETY" + cropName: "Cornell" + companyName: "Curry Seed" + createdTime: "2024-12-04T07:52:51.267Z" + modifiedTime: "2024-12-06T07:52:51.267Z" + referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + archived: false + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + childProducts: + - "@type": "Variety" + id: "18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc" + name: "corn123" + companyName: "1.4GROUP" + cropName: "SOYBEANS" + archived: false + category: "VARIETY" + createdTime: "2025-03-21T21:12:53.865Z" + modifiedTime: "2025-04-06T15:12:52.910Z" + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + cleanupActionDate: "2025-09-22T11:24:43.855Z" + documentsList: [] + childProducts: [] + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff" + - "@type": "Variety" + id: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" + name: "2C788A SXRA COR" + category: "VARIETY" + cropName: "CORN_WET" + companyName: "MYCOGEN SEEDS" + createdTime: "2024-12-04T07:52:51.267Z" + referenceGuid: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + archived: false + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "4cb1e8c0-e801-4f19-b674-6362246be920" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/c3a58145-acfc-4b73-bc1d-0d442697e053" + - "@type": "Variety" + id: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa" + name: "33H83" + category: "VARIETY" + cropName: "CORN_WET" + companyName: "Pioneer" + createdTime: "2024-12-04T07:52:51.267Z" + referenceGuid: "bd489040-c98b-403e-ac6e-ab2d7d4ac3fa" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + archived: false + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/b006726b-38a0-44a6-b723-a966c68170b6" + "403": + description: "The user has not been provided access to the varieties for this org" + "404": + description: "The specified organization does not exist" + post: + tags: + - "Varieties" + summary: "Add a variety" + description: "This endpoint will add a custom variety into the organization. Its name+cropName must be unique within your organization. Its crop name must be a supported crop name (see /cropTypes). There are a number of crop names that are deprecated in the system. If the crop name is set to one of these, then it will be mapped to its corresponding valid crop name.

          Additionally, POST can be used for supporting offline creation of varieties from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`.

          In case no record is found, a new one is created with that `id` and the request is responded with 201.
          Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists." + parameters: + - $ref: "#/components/parameters/OrganizationID" + security: + - OAuth2: + - "eq2" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PostVariety" + examples: + No Header: + value: + name: "2C788A SXRA COR" + companyName: "MYCOGEN SEEDS" + cropName: "CORN_WET" + category: "VARIETY" + archived: false + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + responses: + "201": + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/responses/Created" + examples: + Headers: + description: "201 Created
          Location: https://sandboxapi.deere.com/platform/organizations/654321/varieties/8e1e0920-1265-4066-8067-8ce2ce5012b2" + "400": + description: "Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user has not been provided write access to the variety list for the org" + "404": + description: "The specified organization does not exist" + "409": + description: "A product already exists in this org with the specified reference Erid" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /organizations/{organizationId}/varieties/{erid}: + get: + summary: "View a specific variety" + description: "This endpoint will return the variety with the specified erid." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/VarietyEmbed" + security: + - OAuth2: + - "eq1" + responses: + "200": + description: "A variety object" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Variety" + examples: + No Header: + description: "200 OK
          Content-Type: application/vnd.deere.axiom.v3+json" + value: + "@type": "Variety" + id: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + name: "1299" + cropName: "Cornell" + companyName: "Curry Seed" + archived: false + category: "VARIETY" + referenceGuid: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + referenceId: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2017-03-22T21:12:53.870Z" + countryCode: "USA" + documentsList: + - "@type": "Document" + erid: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" + docType: "24(c) Registration" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + childProducts: + - "@type": "Variety" + id: "18b7bad8-2f0a-4036-b3f6-5abbe6b2f5dc" + name: "corn123" + companyName: "1.4GROUP" + cropName: "SOYBEANS" + archived: false + category: "VARIETY" + createdTime: "2025-03-21T21:12:53.865Z" + modifiedTime: "2025-04-06T15:12:52.910Z" + countryCode: "USA" + cleanupStatus: "MERGED" + parentErid: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + cleanupActionDate: "2025-09-22T11:24:43.855Z" + documentsList: [] + childProducts: [] + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/organizations/356823/varieties/cf09acfc-9196-4dbb-9b38-1be02673c5ff" + "403": + description: "The user does not have sufficient privileges to access varieties in this org" + "404": + description: "There is no variety matching the specified Erid" + put: + summary: "Update a single variety" + description: "This endpoint allows the custom variety to be renamed, made active/archived, or associated to a different manufacturer or crop type." + parameters: + - $ref: "#/components/parameters/OrganizationID" + - $ref: "#/components/parameters/ERID" + security: + - OAuth2: + - "eq2" + requestBody: + description: "The updated variety object." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/PutVariety" + examples: + No Header: + value: + name: "1299" + companyName: "Curry Seed" + cropName: "SOYBEANS" + archived: true + createdTime: "2019-03-28T14:59:57.000Z" + modifiedTime: "2019-03-27T14:59:57.000Z" + responses: + "204": + description: "The update was completed successfully" + content: + application/vnd.deere.axiom.v3+json: + examples: + Headers: + description: "204 No Content
          The update was completed successfully." + "400": + description: "Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + "403": + description: "The user does not have sufficient privileges to update varieties in this org" + "404": + description: "There is no variety matching the specified Erid" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /varieties: + get: + tags: + - "Reference Varieties" + summary: "Search reference catalog varieties" + security: + - OAuth2: + - "eq1" + description: "This endpoint searches the reference catalog for varieties that match the given search criteria. This data can be used in a subsequent request to create a variety in an organization. Results are limited to 100 items." + note: "Note: Either searchString, productName, or brandName is required as a parameter in the query to get returned results. If searchString AND productName and/or brandName is added to the query, searchString will be ignored. When using searchString, results will contain items with search value from name or companyName. When using productName, value must be exact match to companyName string. When using brandName, value must be exact match to companyName string, and is case sensitive. All results will be limited to 100 values." + parameters: + - name: "searchString" + in: "query" + description: "Performs a fuzzy search on variety and manufacturer name. The search string must be at least 3 characters long." + schema: + type: "string" + example: "venture" + required: true + - name: "cropName" + in: "query" + description: "Filters the results by crop id (see the /cropTypes API)." + schema: + type: "string" + example: "SOYBEANS" + - name: "productName" + in: "query" + description: "Specifies the name of the variety from the global reference list." + schema: + type: "string" + example: "SH 5614 LL/STS" + required: true + - name: "brandName" + in: "query" + description: "Specifies the product manufacturer name of the variety based on the region being used." + schema: + type: "string" + example: "Southern Harvest" + required: true + - name: "sourceSystemProductId" + in: "query" + description: "Specifies the source system product id of the variety based on the country of use." + schema: + type: "string" + example: "79186" + - name: "countryCode" + in: "query" + description: "Specifies the region the variety data belongs to. Some data may not be available in certain regions and data will not be included in the response." + schema: + type: "string" + example: "USA" + responses: + "200": + description: "A collection of reference varieties matching the specified search criteria." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceVarietyCollection" + examples: + Headers: + description: "200 OK" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/varieties?searchString=corn&itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "ReferenceVariety" + id: "1f8c12b4-126f-11ec-82a8-0242ac130003" + referenceId: "1f8c12b4-126f-11ec-82a8-0242ac130003" + category: "VARIETY" + name: "S73-Z5 - 50lb bag" + companyName: "NK" + cropName: "SOYBEANS" + countryCode: "USA" + sourceSystem: "3" + sourceSystemProductId: "905P24925" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + - "@type": "ReferenceVariety" + id: "75138754-6381-49c7-be9e-9e08a847075a" + referenceId: "75138754-6381-49c7-be9e-9e08a847075a" + category: "VARIETY" + name: "Cornelius 155A" + companyName: "Cornelius Seed" + cropName: "ALFALFA" + countryCode: "USA" + sourceSystem: "3" + sourceSystemProductId: 105332 + createdTime: "2023-09-02T05:10:33.415Z" + modifiedTime: "2024-11-20T02:04:39.994Z" + "403": + description: "The user does not have access to manage products." + "404": + description: "No variety found with this country code." + /varieties/{erid}: + get: + tags: + - "Reference Varieties" + summary: "Get a single reference variety." + security: + - OAuth2: + - "eq1" + description: "Single variety from industry data sources, such as CDMS." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "A single variety matching the specified erid." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceVariety" + examples: + Headers: + description: "200 OK" + value: + "@type": "ReferenceVariety" + id: "1f8c12b4-126f-11ec-82a8-0242ac130003" + referenceId: "1f8c12b4-126f-11ec-82a8-0242ac130003" + category: "VARIETY" + name: "S73-Z5 - 50lb bag" + companyName: "NK" + cropName: "SOYBEANS" + countryCode: "USA" + sourceSystem: "3" + sourceSystemProductId: "905P24925" + createdTime: "2017-03-21T21:12:53.865Z" + modifiedTime: "2018-04-06T15:12:52.910Z" + "403": + description: "The user does not have access to manage products." + "404": + description: "No variety found matching this erid." + /varieties/{erid}/associateToOrg/{organizationId}: + post: + tags: + - "Reference Varieties" + summary: "Adds a single reference variety to organization" + security: + - OAuth2: + - "eq2" + description: "This endpoint will associate a reference variety to your organization from the global reference list. + + The reference varieties are immutable, however, they can still be archived or made available. + + The response headers from the GET endpoints will include the attributes that can be overridden.\n" + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/ReferenceProductPointerRequest" + examples: + No Header: + value: + countryCode: "USA" + overrides: + - key: "archived" + value: true + responses: + "200": + description: "Successful association of reference variety to org." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "array" + items: + $ref: "#/components/schemas/ReferenceProductOverrideStatus" + examples: + Headers: + description: "201 Created
          Created successfully." + value: + - key: "archived" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: + application/json: + schema: + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to products for organization" + "404": + description: "Organization does not exist." + "409": + description: "A product already exists in this org with the specified erid." + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + /varieties/{erid}/documents: + get: + tags: + - "Reference Varieties" + summary: "Reference list of documents for an associated seed variety." + security: + - OAuth2: + - "eq1" + description: "List of all the documents for a variety from industry data sources, such as CDMS." + parameters: + - $ref: "#/components/parameters/ERID" + responses: + "200": + description: "A collection of documents for the specified seed variety." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/DocumentCollection" + examples: + Headers: + description: "200 OK" + value: + links: + - "@type": "Link" + rel: "self" + uri: "https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=0" + - "@type": "Link" + rel: "nextPage" + uri: "https://sandboxapi.deere.com/platform/varieties/579f069a-3a0d-431d-a326-4fdbab12146c/documents?itemLimit=10&pageOffset=10" + total: 100 + values: + - "@type": "Document" + erid: "1f8c12b4-126f-11ec-82a8-0242ac130003" + productErid: "388ab719-277d-4032-a2c3-40a297d8f482" + docType: "24(c) Registration" + description: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + fileName: "ld7OD026.pdf" + expirationDate: "2017-03-22" + "403": + description: "The user does not have access to manage products." + /varieties/{erid}/setOverridesForOrg/{organizationId}: + patch: + tags: + - "Reference Varieties" + summary: "Sets organizational attributes such as isCarrier, archived, registration, etc." + security: + - OAuth2: + - "eq2" + description: "This endpoint will set attribute overrides while importing a reference variety to your organization. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden." + parameters: + - $ref: "#/components/parameters/ERID" + - $ref: "#/components/parameters/OrganizationID" + requestBody: + description: "The product to add." + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/CommonProductPointerRequest" + examples: + No Header: + value: + overrides: + - key: "archived" + value: true + responses: + "200": + description: "Successful update of overrides of reference variety associated to your org." + content: + application/vnd.deere.axiom.v3+json: + schema: + type: "array" + items: + $ref: "#/components/schemas/ReferenceProductOverrideStatus" + examples: + Headers: + description: "200 OK" + value: + - key: "archived" + success: true + errors: [] + "400": + description: "Unresolvable name conflict or other error occurred." + content: + application/json: + schema: + properties: + total: + type: "integer" + format: "int64" + example: 1 + errors: + type: "array" + items: + $ref: "#/components/schemas/Errors" + "403": + description: "Invalid access to reference product associated to organization" + "404": + description: "Organization does not exist" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" +components: + parameters: + AcceptLanguageRequestHeader: + in: "header" + name: "Accept-Language" + description: "Translates the name to the desired locale if supported. Follows RFC-3282 specifications (https://datatracker.ietf.org/doc/html/rfc3282)." + required: false + schema: + type: "string" + example: "en-us, en" + AcceptRequestHeader: + in: "header" + name: "Accept" + description: "Determines the response schema." + required: false + schema: + type: "string" + enum: + - "application/json" + - "application/vnd.deere.axiom.v3+json" + ArchiveStatus: + in: "query" + name: "status" + description: "Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties." + required: false + schema: + type: "string" + enum: + - "AVAILABLE" + - "ARCHIVED" + - "ALL" + example: "AVAILABLE" + ChemicalEmbed: + in: "query" + name: "embed" + description: "An embeddable list of properties which are optional by default." + schema: + type: "array" + items: + type: "string" + enum: + - "activeIngredients" + - "availableRegistrations" + - "documents" + - "showMergedProducts" + ChemicalId: + name: "chemicalId" + in: "path" + description: "The chemical Id to find." + required: true + schema: + type: "string" + example: "c0dcb00a-6b6f-4508-9180-679addad23f8" + DryBlendEmbed: + in: "query" + name: "embed" + description: "The list of Rels, for which objects should be included in the response payload." + schema: + type: "array" + items: + type: "string" + enum: + - "product" + ERID: + in: "path" + name: "erid" + description: "A unique identifier for an entity formatted as a uuid." + required: true + example: "cf09acfc-9196-4dbb-9b38-1be02673c5ff" + schema: + type: "string" + format: "uuid" + Embed: + name: "embed" + in: "query" + description: "Embeds extra information in the org varieties response" + schema: + type: "string" + example: "documents" + Embed2: + name: "embed" + in: "query" + description: "Embeds extra information in the variety response" + schema: + type: "string" + example: "documents" + Embed2_TankMix: + name: "embed" + in: "query" + description: "Embeds extra information in the tank mix response" + schema: + type: "string" + example: "chemical" + Embed_Chemicals: + name: "embed" + in: "query" + description: "Embeds extra information in the org chemical response" + schema: + type: "string" + example: "activeIngredients, documents" + Embed_Fertilizers: + name: "embed" + in: "query" + description: "Embeds extra information in the fertilizer response." + schema: + type: "string" + example: "activeIngredients, documents" + Embed_TankMix: + name: "embed" + in: "query" + description: "Embeds extra information in the org tank mixes response" + schema: + type: "string" + example: "chemical" + EntityTypeQueryParam: + in: "query" + name: "entityType" + description: "Filters the results by the provided entity type. Example: CHEMICAL" + required: false + schema: + type: "string" + enum: + - "CHEMICAL" + - "FERTILIZER" + FertilizerEmbed: + in: "query" + name: "embed" + description: "An embeddable list of properties which are optional by default." + schema: + type: "array" + items: + type: "string" + enum: + - "activeIngredients" + - "availableRegistrations" + - "documents" + - "showMergedProducts" + FertilizerId: + name: "fertilizerId" + in: "path" + description: "The fertilizer Id to find." + required: true + schema: + type: "string" + example: "c0dcb00a-6b6f-4508-9180-679addad23f8" + Id: + name: "id" + in: "path" + description: "TankMixes id." + required: true + schema: + type: "string" + example: "89220e2a-04af-4d03-82de-1ac9a4edfa4f" + OrgId: + name: "orgId" + in: "path" + description: "The organization owning the varieties." + required: true + schema: + type: "number" + example: 654321 + OrgId2: + name: "orgId" + in: "path" + description: "The organization owning the chemicals." + required: true + schema: + type: "number" + example: 123456 + OrgId2_Fertilizers: + name: "orgId" + in: "path" + description: "The owning organization of the product." + required: true + schema: + type: "number" + example: 123456 + OrgId_Chemicals: + name: "orgId" + in: "path" + description: "The organization owning the chemicals." + required: true + schema: + type: "number" + example: 123456 + OrgId_Fertilizers: + name: "orgId" + in: "path" + description: "The organization owning the fertilizers." + required: true + schema: + type: "number" + example: 123456 + OrgId_TankMix: + name: "orgId" + in: "path" + description: "The organization owning the tank mix." + required: true + schema: + type: "number" + example: 123456 + OrganizationID: + in: "path" + name: "organizationId" + description: "The identifier of the Organization." + required: true + schema: + type: "integer" + example: 6781 + format: "int64" + RecordFilter: + name: "recordFilter" + in: "query" + description: "Filter results based on status" + schema: + type: "string" + example: "active, archived, all" + TankMixEmbed: + in: "query" + name: "embed" + description: "The list of Rels, for which objects should be included in the response payload." + schema: + type: "array" + items: + type: "string" + enum: + - "chemical" + VarietyEmbed: + in: "query" + name: "embed" + description: "An embeddable list of properties which are optional by default." + schema: + type: "array" + items: + type: "string" + enum: + - "documents" + - "showMergedProducts" + VarietyId: + name: "varietyId" + in: "path" + description: "The variety Id to find." + required: true + schema: + type: "string" + example: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + VarietyId2: + name: "varietyId" + in: "path" + description: "The variety Id" + required: true + schema: + type: "string" + example: "8e1e0920-1265-4066-8067-8ce2ce5012b2" + X-deere-signature: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r8392615e4b4e1c92018026f47109bb" + X-deere-signature_Chemicals: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same GUID next time." + schema: + type: "GUID" + example: "9r839261-5e4b-4e1c-9201-8026f47109bb" + X-deere-signature_Fertilizers: + name: "x-deere-signature" + in: "header" + description: "x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time." + schema: + type: "string" + example: "9r839261-5e4b-4e1c-9201-8026f47109bb" + responses: + Created: + description: "Created" + schemas: + ActiveIngredient: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + ActiveIngredientEmbed: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + guid: + type: "string" + format: "uuid" + example: "9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4" + description: "The unique identifier for the active ingredient." + percentDEPRECATED: + type: "number" + format: "double" + example: 3.14 + description: "The percentage value of the active ingredient.'" + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the Chemical/Fertilizer." + nullable: false + ActiveIngredientEmbed_DryBlends: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the chemical/fertilizer." + nullable: false + ActiveIngredientEmbed_Fertilizers: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the Chemical/Fertilizer." + nullable: false + ActiveIngredientEmbed_TankMix: + type: "object" + properties: + "@type": + type: "string" + example: "ActiveIngredient" + id: + type: "string" + example: "30ca101c-e78f-4e45-a248-1ce9622c7f10" + format: "uuid" + description: "The primary identifier of the active ingredient." + nullable: false + name: + type: "string" + description: "The name of the active ingredient." + example: "Urea Nitrogen" + nullable: false + unit: + type: "string" + example: "%" + description: "The unit of measurement used for the value of active ingredient." + nullable: false + value: + type: "number" + format: "double" + example: 3.14 + description: "The value of the active ingredient in the chemical/fertilizer." + nullable: false + ActiveIngredientsCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_ActiveIngredients" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredient" + BaseResource: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link" + BaseResourceWithoutLink: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + BaseResource_Chemicals: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_Chemicals" + BaseResource_Companies: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_Companies" + BaseResource_Documents: + type: "object" + properties: + "@type": + required: true + type: "string" + example: "BaseResource" + id: + required: true + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_Documents" + BaseResource_DryBlends: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_DryBlends" + BaseResource_TankMix: + type: "object" + properties: + "@type": + type: "string" + example: "BaseResource" + id: + description: "Primary identifier for resource." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_TankMix" + Chemical: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_Chemicals" + - properties: + "@type": + example: "Chemical" + id: + description: "The primary identifier for the chemical that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + deprecated: true + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the chemical." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + referenceIdDEPRECATED: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "product reference id" + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed" + description: "List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document_Chemicals" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + agencyRegistrationsDEPRECATED: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "Registration detail used for regulatory purposes." + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + childProducts: + type: "array" + items: + $ref: "#/components/schemas/ChildChemical" + description: "List of child products." + ChemicalCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Chemicals" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Chemical" + Chemical_DryBlends: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_DryBlends" + - properties: + "@type": + example: "Chemical" + id: + description: "The primary identifier for the chemical/fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the chemical/fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical/fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of the chemical/fertilizer." + restrictedUse: + type: "boolean" + default: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical/fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + default: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + default: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the chemical/fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the chemical/fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_DryBlends" + description: "List of active ingredients present in the chemical/fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used" + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documents: + type: "array" + items: + $ref: "#/components/schemas/Document_DryBlends" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + ChildChemical: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_Chemicals" + - properties: + "@type": + example: "Chemical" + id: + description: "The primary identifier for the chemical that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + deprecated: true + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the chemical." + companyName: + type: "string" + description: "The brand of the chemical." + nullable: false + example: "Monsanto" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed" + description: "List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document_Chemicals" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + agencyRegistrationsDEPRECATED: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "Registration detail used for regulatory purposes." + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + ChildFertilizer: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + example: "Fertilizer" + id: + description: "The primary identifier for the fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + nullable: false + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type of the fertilizer." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + agencyRegistrationsDEPRECATED: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "production registration number details" + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + ChildVariety: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + example: "Variety" + id: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + nullable: false + description: "The primary identifier for the variety that is unique to your organization." + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." + nullable: false + category: + type: "string" + enum: + - "VARIETY" + example: "VARIETY" + cropName: + type: "string" + example: "SOYBEANS" + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." + nullable: false + companyName: + type: "string" + description: "The brand of the variety." + example: "NK" + nullable: false + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." + example: false + nullable: false + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2017-03-21T21:12:53.865Z" + description: "product created time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2018-04-06T15:12:52.910Z" + description: "product modified time" + readOnly: true + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label." + CollectionBase: + type: "object" + properties: + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link" + total: + type: "integer" + format: "int32" + example: 100 + CollectionBase_ActiveIngredients: + type: "object" + properties: + total: + type: "integer" + format: "int32" + example: 100 + links: + type: "array" + items: + $ref: "#/components/schemas/Link_ActiveIngredients" + CollectionBase_Chemicals: + type: "object" + properties: + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + - $ref: "#/components/schemas/Link_Chemicals" + total: + type: "integer" + format: "int32" + example: 100 + CollectionBase_DryBlends: + type: "object" + properties: + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_DryBlends" + total: + type: "integer" + format: "int32" + example: 100 + CollectionBase_Fertilizers: + type: "object" + properties: + links: + type: "array" + items: + $ref: "#/components/schemas/Link" + total: + type: "integer" + format: "int32" + example: 100 + CommonPostReferenceFertilizer: + type: "object" + properties: + overrides: + type: "array" + items: + type: "object" + properties: + key: + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "isCarrier" + - "archived" + - "registration" + value: + type: "string" + description: "Value for the override parameter" + example: true + CommonProductPointerRequest: + type: "object" + properties: + overrides: + nullable: true + type: "array" + items: + $ref: "#/components/schemas/OverrideKeyValuePair" + CommonReferenceChemical: + type: "object" + properties: + overrides: + type: "array" + items: + type: "object" + properties: + key: + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "isCarrier" + - "archived" + - "registration" + value: + type: "string" + description: "Value for the override parameter" + example: true + Created: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc.turer" + type2: + type: "string" + description: "The type of chemical" + example: "HERBICIDE" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification1: + type: "string" + description: "Material classification of a product." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + Created_Fertilizers: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc." + type2: + type: "string" + description: "The type of fertilizer" + example: "FERTILIZER" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification1: + type: "string" + description: "Material classification of a product." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + activeIngredients: + type: "array" + allOf: + - $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + Document: + type: "object" + allOf: + - properties: + "@type": + example: "Document" + required: true + erid: + type: "string" + description: "Unique id of the document" + example: "08e930ee-4c31-41b6-b57e-8c0a8e1284a4" + docType: + type: "string" + example: "24(c) Registration" + description: "Type of document for this product." + required: true + productErid: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product." + required: true + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + required: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + required: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productErid" + - "docType" + - "description" + - "fileName" + DocumentCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Document" + DocumentCollection_Chemicals: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Chemicals" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Document_Chemicals" + DocumentCollection_Fertilizers: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Fertilizers" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Document" + DocumentWithPdfFile: + type: "object" + allOf: + - $ref: "#/components/schemas/Document_Documents" + - properties: + pdfFile: + required: true + type: "string" + example: "H4sIAAAAAAAAAIy7BVhduxI2XNy1aLFNcYe9cXd3l01xd3eKuzsUd5fiBYq7u0OLe6G4f+05175z7n+/f60nzySTWZPJ5J1kW..." + description: "The pdf file of the document after compression (gzip) and encoding (base64)" + Document_Chemicals: + type: "object" + allOf: + - properties: + "@type": + example: "Document" + required: true + productErid: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product where document attached." + required: true + erid: + type: "string" + example: "2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7" + description: "The Unique id of the document." + required: true + docType: + type: "string" + example: "24(c) Registration" + description: "Type of document for this product." + required: true + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + required: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + required: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productErid" + - "docType" + - "description" + - "fileName" + Document_Documents: + type: "object" + allOf: + - properties: + "@type": + required: true + type: "string" + example: "Document" + description: "The type of the document." + erid: + type: "string" + format: "uuid" + example: "cff5ba0b-1768-48a3-b3ec-dd62aac1cff3" + description: "The unique identifier for the document." + productErid: + type: "string" + format: "uuid" + example: "7d9ec6a6-6b8f-4312-92c7-bc022b7f5351" + description: "The unique identifier for the product associated with the document." + fileName: + required: true + type: "string" + example: "ld8NF004.pdf" + description: "The name of the file." + docType: + required: true + type: "string" + example: "Specimen Label" + description: "The type of the document." + description: + required: true + type: "string" + example: "SAL 7/27/11" + description: "A description of the document." + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + Document_DryBlends: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_DryBlends" + - properties: + "@type": + example: "Document" + required: true + productId: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product." + required: true + erid: + type: "string" + example: "2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7" + description: "The Unique id of the document." + required: true + docType: + type: "string" + example: "24(c) Registration" + required: true + description: "Type of document for this product." + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + required: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + required: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productId" + - "docType" + - "description" + - "fileName" + Document_TankMix: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_TankMix" + - properties: + "@type": + example: "Document" + required: true + productId: + type: "string" + example: "388ab719-277d-4032-a2c3-40a297d8f482" + description: "The Unique id of the product where document attached." + required: true + erid: + type: "string" + example: "2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7" + description: "The Unique id of the document." + required: true + docType: + type: "string" + example: "24(c) Registration" + description: "Type of document for this product." + required: true + description: + type: "string" + example: "CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed" + description: "Information about the document." + required: true + fileName: + type: "string" + example: "ld7OD026.pdf" + description: "The filename of the document." + required: true + expirationDate: + type: "string" + format: "date" + example: "2017-03-22" + readOnly: true + nullable: true + required: + - "@type" + - "productId" + - "docType" + - "description" + - "fileName" + DryBlend: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlend" + description: "The type of the dry blend." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8" + description: "The URI of the linked resource." + erid: + type: "string" + example: "af20cf1a-2def-47ce-9861-35f51afc1ad8" + description: "The unique identifier for the dry blend." + name: + type: "string" + example: "dryblend_alfa" + description: "The name of the dry blend." + solutionRate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 10 + description: "The solution rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateMass" + description: "The domain ID for the solution rate measurement." + unit: + type: "string" + example: "lb1ac-1" + description: "The unit of measure for the solution rate." + materialClassification: + type: "string" + example: "DRY" + description: "Material classification of the dry blend." + archived: + type: "boolean" + example: false + description: "Whether or not this dry blend is actively used." + notes: + type: "string" + example: "notes" + description: "Notes about the dry blend." + components: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlendComponent" + description: "The type of the dry blend component." + rate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 5 + description: "The rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateMass" + description: "The domain ID for the rate measurement." + unit: + type: "string" + example: "lb1ac-1" + description: "The unit of measure for the rate." + product: + type: "object" + properties: + "@type": + type: "string" + example: "Chemical" + description: "The type of the chemical/fertilizer." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The URI of the linked resource." + id: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The unique identifier for the chemical/fertilizer." + name: + type: "string" + example: "TELIA" + description: "The name of the chemical/fertilizer." + type: + type: "string" + example: "FUNGICIDE" + description: "The type of the chemical/fertilizer." + category: + type: "string" + example: "CHEMICAL" + description: "The category of the chemical/fertilizer." + companyName: + type: "string" + example: "BASF" + description: "The name of the company that manufactures the chemical/fertilizer." + epaRegistration: + type: "string" + example: "EXEMPT" + description: "The EPA registration status of the chemical/fertilizer." + registration: + type: "string" + example: "EXEMPT" + description: "The registration status of the chemical/fertilizer." + modifiedTime: + type: "string" + format: "date-time" + example: "2024-08-21T09:25:24.220763Z" + description: "The time when the chemical/fertilizer was last modified." + carrierId: + type: "string" + example: "58984d7a-126e-4d31-98e9-1ed65a582d91" + description: "The carrier ID of the chemical/fertilizer." + referenceId: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference ID of the chemical/fertilizer." + referenceGuid: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference GUID of the chemical/fertilizer." + carrier: + type: "boolean" + example: true + description: "Whether or not the chemical/fertilizer is a carrier." + archived: + type: "boolean" + example: false + description: "Whether or not the chemical/fertilizer is actively used." + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the chemical/fertilizer is restricted use." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + agencyRegistrations: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the agency registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the linked resource." + registrationId: + type: "string" + example: "EXEMPT" + description: "The registration ID of the agency registration." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + DryBlendCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_DryBlends" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/DryBlend" + DryBlendComponent: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlend Component" + rate: + $ref: "#/components/schemas/MeasurementAsDouble" + product: + $ref: "#/components/schemas/Chemical_DryBlends" + links: + type: "array" + description: "Provides a reference to an associated object or list." + items: + $ref: "#/components/schemas/Link_DryBlends" + Errors: + type: "object" + format: "Errors/DataValidationException" + properties: + "@type": + type: "string" + example: "Errors" + errors: + type: "array" + items: + type: "object" + format: "Error/ConstraintViolation" + properties: + "@type": + type: "string" + example: "Error" + guid: + type: "string" + format: "uuid" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + message: + type: "string" + description: "An english description of the error." + example: "The given crop type does not exist" + code: + type: "string" + example: "validation_constraint_crop_type_does_not_exist" + description: "A string constant representing the type of error." + field: + type: "string" + example: "targetCrops" + description: "The name of the property or parameter deemed invalid." + invalidValue: + type: "string" + example: "CORN_WET" + description: "The value that was supplied for this field in the request." + otherAttributes: + example: {} + type: "object" + Fertilizer: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource_DryBlends" + - properties: + "@type": + example: "Fertilizer" + id: + description: "The primary identifier for the fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + nullable: false + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type of the fertilizer." + restrictedUse: + type: "boolean" + default: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + default: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + default: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_DryBlends" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + description: "List of available registrations for the countries this product is registered in." + documents: + type: "array" + items: + $ref: "#/components/schemas/Document_DryBlends" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + FertilizerCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase_Fertilizers" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/Fertilizer_Fertilizers" + Fertilizer_Fertilizers: + type: "object" + allOf: + - $ref: "#/components/schemas/BaseResource" + - properties: + "@type": + example: "Fertilizer" + id: + description: "The primary identifier for the fertilizer that is unique to your organization." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" + nullable: false + name: + type: "string" + example: "Round Up" + nullable: false + description: "The common name of the fertilizer." + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + nullable: false + example: "Monsanto" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + nullable: false + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type of the fertilizer." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + referenceIdDEPRECATED: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "product reference id" + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + carrierId: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "The primary identifier in case it is a carrier." + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + availableRegistrations: + type: "array" + description: "List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used." + items: + type: "string" + example: "432-1512A, 0000264-00783-AA-0067760" + documentsList: + type: "array" + items: + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used." + parentErid: + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" + cleanupStatus: + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." + cleanupActionDate: + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." + agencyRegistrationsDEPRECATED: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "production registration number details" + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + childProducts: + type: "array" + items: + $ref: "#/components/schemas/ChildFertilizer" + description: "List of child products." + Link: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + uri: + type: "string" + format: "uri" + example: "api_route" + description: "The location of the resource" + Link_ActiveIngredients: + type: "object" + description: "Provides a reference to an associated object or list." + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + uri: + type: "string" + format: "uri" + example: "https://sandboxapi.deere.com/platform/organizations/876542/activeIngredients?itemLimit=10&pageOffset=0" + description: "The location of the resource" + Link_Chemicals: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/{api_route}" + description: "The URI of the route." + Link_Companies: + type: "object" + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the \"embed\" value." + required: true + uri: + type: "string" + format: "uri" + example: "https://sandboxapi.deere.com/platform/organizations/876542/productCompanies?itemLimit=10&pageOffset=0" + description: "The location of the resource" + required: true + Link_Documents: + properties: + rel: + type: "string" + example: "self" + description: "The identifier for the associated resource. If the resource is embeddable, this is also the 'embed' value." + required: true + uri: + type: "string" + format: "uri" + example: "https://sandboxapi.deere.com/platform/" + description: "The location of the resource" + required: true + Link_DryBlends: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/{api_route}" + description: "The URI of the route." + Link_TankMix: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/{api_route}" + description: "The URI of the route." + MeasurementAsDouble: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + valueAsDouble: + type: "number" + format: "double" + example: 3.14 + unit: + type: "string" + description: "The unit of measure for this value." + example: "gal1ac-1" + vrDomainId: + type: "string" + description: "The corresponding domainErid from the EIC/Adapt representation system." + example: "vrSolutionRateLiquid" + OverrideKeyValuePair: + type: "object" + properties: + key: + nullable: false + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" + enum: + - "archived" + value: + nullable: false + type: "object" + description: "Value for override parameter, can be string, number or boolean" + example: true + required: + - "key" + - "value" + PostChemical: + type: "object" + allOf: + - properties: + "@type": + example: "Chemical" + name: + type: "string" + example: "Round Up" + description: "The common name of the chemical." + required: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical." + example: "Monsanto" + required: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the chemical." + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + nullable: false + type: + type: "string" + nullable: false + required: true + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "The type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + nullable: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + nullable: false + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modification time" + agencyRegistrationsDEPRECATED: + type: "array" + items: + $ref: "#/components/schemas/agencyRegistrations" + description: "Registration detail used for regulatory purposes." + PostDryBlend: + type: "object" + properties: + DryBlend: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlend" + description: "The type of the dry blend." + name: + type: "string" + example: "TestDryBlend" + required: true + description: "The name of the dry blend." + solutionRate: + type: "object" + required: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + required: true + format: "double" + example: 0 + description: "The value of the measurement as a double." + vrDomainId: + type: "string" + required: true + example: "vrSolutionRateMass" + description: "The domain ID for the measurement." + unit: + type: "string" + required: true + example: "lb1ac-1" + description: "The unit of measure for the value." + materialClassification: + type: "string" + required: true + example: "DRY" + description: "Material classification of the dry blend." + archived: + type: "boolean" + example: false + description: "Whether or not this dry blend is actively used." + notes: + type: "string" + example: "Mix in the carrier last" + description: "Notes about the dry blend." + components: + type: "array" + required: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "DryBlendComponent" + description: "The type of the dry blend component." + rate: + type: "object" + required: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + required: true + format: "double" + example: 100 + description: "The rate value as a double." + vrDomainId: + type: "string" + required: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + required: true + example: "gal1ac-1" + description: "The unit of measure for the rate." + links: + type: "array" + required: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + required: true + example: "chemical" + description: "The relationship of the link either fertilizer or chemical." + uri: + type: "string" + required: true + example: "https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac" + description: "The URI of the linked resource." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + PostFertilizer: + type: "object" + allOf: + - properties: + "@type": + example: "Fertilizer" + name: + type: "string" + example: "Manure" + description: "The common name of the fertilizer." + required: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + example: "Monsanto" + required: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + type: + type: "string" + enum: + - "MANURE" + - "FERTILIZER" + description: "The type for the fertilizer." + required: true + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + required: + - "name" + - "companyName" + - "type" + PostReferenceChemical: + allOf: + - type: "object" + properties: + countryCode: + type: "string" + description: "Country of the product to which it belongs" + example: "USA" + required: true + required: + - "countryCode" + - $ref: "#/components/schemas/CommonReferenceChemical" + PostReferenceFertilizer: + allOf: + - properties: + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + required: true + - $ref: "#/components/schemas/CommonPostReferenceFertilizer" + PostVariety: + type: "object" + allOf: + - properties: + "@type": + example: "Variety" + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." + required: true + cropName: + type: "string" + example: "SOYBEANS" + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." + required: true + companyName: + type: "string" + description: "The brand of the variety." + example: "NK" + required: true + category: + type: "string" + enum: + - "VARIETY" + example: "VARIETY" + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." + example: false + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2017-03-21T21:12:53.865Z" + description: "product created time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2018-04-06T15:12:52.910Z" + description: "product modified time" + required: + - "name" + - "cropName" + - "companyName" + ProductCompany: + type: "object" + allOf: + - properties: + companyName: + type: "string" + example: "Monsanto" + description: "The name of the input manufacturer for chemical, fertilizer or variety." + "@type": + example: "ProductCompany" + required: + - "@type" + - "id" + - "links" + - "companyName" + PutChemical: + type: "object" + required: + - "name" + - "companyName" + - "type" + allOf: + - properties: + "@type": + example: "Chemical" + name: + type: "string" + example: "Round Up" + description: "The common name of the chemical." + required: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the chemical." + example: "Monsanto" + required: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" + type: + type: "string" + nullable: false + example: "HERBICIDE" + required: true + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "The type for the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints." + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2017-03-21T21:12:53.865Z" + description: "product creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2018-04-06T15:12:52.910Z" + description: "product modification time" + readOnly: true + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed" + description: "List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + PutFertilizer: + type: "object" + allOf: + - properties: + "@type": + example: "Fertilizer" + name: + type: "string" + example: "Manure" + description: "The common name of the fertilizer." + required: true + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + companyName: + type: "string" + description: "The brand of the fertilizer." + example: "Monsanto" + required: true + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the fertilizer." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + type: + type: "string" + nullable: false + enum: + - "MANURE" + - "FERTILIZER" + description: "The type for the fertilizer." + required: true + restrictedUse: + type: "boolean" + example: false + description: "Whether or not the product is restricted for use by the governing entity." + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix." + example: false + carrier: + type: "boolean" + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type." + example: false + liquidWeight: + type: "number" + format: "double" + example: 3.14 + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + weightUnit: + type: "string" + example: "lb/gal" + description: "Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available." + activeIngredients: + type: "array" + items: + $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" + description: "List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used." + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "production registration number" + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + required: + - "name" + - "companyName" + - "type" + PutVariety: + type: "object" + allOf: + - properties: + "@type": + example: "Variety" + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." + required: true + cropName: + type: "string" + example: "SOYBEANS" + required: true + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API). **NOTE:** See /cropTypes for the list of available crop types that are supported." + companyName: + type: "string" + description: "The brand of the variety." + example: "NK" + required: true + category: + type: "string" + enum: + - "VARIETY" + example: "VARIETY" + archived: + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." + example: false + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product created time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modified time" + required: + - "name" + - "cropName" + - "companyName" + RecordMetadata: + type: "object" + description: "Data structure for record metadata capturing information about the creation and last update of an entity. + + For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg).
          + + NOTES
          + + * Some attributes are only visible if the API Client has the required license.
          + + * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.)\n" + properties: + userCreationTimestamp: + type: "string" + description: "Timestamp of entity creation" + readOnly: true + example: "2018-04-30T10:23:50.000Z" + userLastModifiedTimestamp: + type: "string" + description: "Timestamp of entity modification" + readOnly: true + example: "2018-05-01T08:11:23.000Z" + ReferenceChemical: + type: "object" allOf: - - $ref: '#/components/schemas/BaseResource' + - $ref: "#/components/schemas/BaseResource_Chemicals" - properties: - '@type': - example: 'ReferenceVariety' + "@type": + example: "ReferenceChemical" id: - description: Primary identifier for reference variety. - type: string - format: uuid - example: 1f8c12b4-126f-11ec-82a8-0242ac130003 + type: "string" + format: "uuid" + example: "8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The primary identifier of the reference chemical." nullable: false - referenceIdDEPRECATED: - type: string - example: 87b4a1e7-210b-482c-8a7a-19e9f644e914 - format: uuid - description: product id of the reference variety - category: - type: string - enum: - - VARIETY - example: VARIETY name: - type: string - example: S73-Z5 - 50lb bag - description: The common name of the reference variety. + type: "string" + example: "Round Up" + description: "The common name of the reference chemical." nullable: false - referenceGuid: - type: string - example: 87b4a1e7-210b-482c-8a7a-19e9f644e914 - format: uuid - description: Optional. Denotes whether this product is from the global reference list. companyName: - type: string - description: The name of the input manufacturer. - example: NK + type: "string" + description: "The name of the input manufacturer." + example: "Monsanto" nullable: false - cropName: - type: string - example: SOYBEANS - description: The identifier of the crop type that this reference variety is associated with (see the Crop Types API). + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." nullable: false + referenceIdDEPRECATED: + type: "string" + example: "8fb34898-64f5-5a1e-a698-34ab348220a7" + format: "uuid" + description: "product reference id" + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "The state of reference chemical." + category: + type: "string" + enum: + - "CHEMICAL" + example: "CHEMICAL" countryCode: - type: string - example: USA - description: Specifies the region the reference variety data belongs to. Some data may not be available in certain regions and data will not be included in the response. + type: "string" + example: "USA" + description: "Specifies the region the reference chemical data belongs to. Some data may not be available in certain regions and data will not be included in the response." + type: + type: "string" + nullable: false + example: "HERBICIDE" + enum: + - "ADDITIVE" + - "ADJUVANT" + - "DEFOLIANT" + - "FUNGICIDE" + - "GROWTH_REGULATOR" + - "HERBICIDE" + - "INSECTICIDE" + - "NITROGEN_STABILIZER" + description: "Specifies the type of chemical." + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." sourceSystem: - type: string - format: integer - description: The source system for the reference variety. + type: "string" + format: "integer" + description: "The source system for the reference chemical." example: 3 nullable: false sourceSystemProductId: - type: string - description: The source system identifier for the reference variety. - example: 905P24925 + type: "string" + description: "The source system identifier for the reference chemical." + example: "905P24925" nullable: false + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "product registration id" createdTimeDEPRECATED: - type: string - format: date-time + type: "string" + format: "date-time" example: "2019-03-27T14:59:57.000Z" - description: product created time + description: "product creation time" modifiedTimeDEPRECATED: - type: string - format: date-time + type: "string" + format: "date-time" example: "2019-03-27T14:59:57.000Z" - description: product modified time - Link: - type: object - properties: - '@type': - type: string - example: 'Link' - description: 'The type of the link.' - rel: - type: string - example: self - description: The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. - uri: - type: string - format: uri - example: api_route - description: The location of the resource - CollectionBase: - type: object - properties: - links: - type: array - description: Provides a reference to an associated object or list. - items: - $ref: '#/components/schemas/Link' - total: - type: integer - format: int32 - example: 100 - ReferenceVarietyCollection: - type: object + description: "product modification time" + ReferenceChemicalCollection: + type: "object" allOf: - - $ref: '#/components/schemas/CollectionBase' + - $ref: "#/components/schemas/CollectionBase_Chemicals" - properties: values: - type: array + type: "array" items: - $ref: '#/components/schemas/ReferenceVariety' - OverrideKeyValuePair: - type: object - properties: - key: - nullable: false - type: string - description: 'Key for override parameter when setting overrides for a reference product' - example: archived - enum: - - archived - value: - nullable: false - type: object - description: 'Value for override parameter, can be string, number or boolean' - example: true - required: - - key - - value - CommonProductPointerRequest: - type: object - properties: - overrides: - nullable: true - type: array - items: - $ref: '#/components/schemas/OverrideKeyValuePair' - ReferenceProductPointerRequest: + $ref: "#/components/schemas/ReferenceChemical" + ReferenceFertilizer: + type: "object" allOf: + - $ref: "#/components/schemas/BaseResource" - properties: - countryCode: - type: string - example: USA - description: Country of the product to which it belongs. - required: true - - $ref: '#/components/schemas/CommonProductPointerRequest' - - VarietyCollection: - type: object + "@type": + type: "string" + example: "Fertilizer" + id: + type: "string" + example: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + description: "The primary identifier for the fertilizer." + name: + type: "string" + example: "Round Up" + description: "The common name of the reference fertilizer." + nullable: false + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Monsanto" + nullable: false + registration: + type: "string" + example: "a12e9i84" + description: "Registration id used for regulatory purposes." + nullable: false + materialClassification: + type: "string" + enum: + - "DRY" + - "LIQUID" + - "GAS" + example: "LIQUID" + description: "Specifies the state of the chemical." + category: + type: "string" + enum: + - "FERTILIZER" + example: "FERTILIZER" + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." + countryCode: + type: "string" + example: "USA" + description: "Specifies the region the reference fertilizer data belongs to. Some data may not be available in certain regions and data will not be included in the response." + type: + type: "string" + nullable: false + example: "MANURE" + enum: + - "MANURE" + - "FERTILIZER" + description: "Specifies the type of the reference fertilizer." + referenceIdDEPRECATED: + type: "string" + example: "beaa8d07-1cef-4eea-99b6-19f129e988ed" + format: "uuid" + description: "product reference id" + epaRegistrationDEPRECATED: + type: "string" + example: "a12e9i84" + description: "production registration number details" + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production creation time" + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "production modification time" + restrictedUse: + type: "boolean" + example: false + nullable: false + description: "Whether or not the product is restricted for use by the governing entity." + sourceSystem: + type: "string" + format: "integer" + description: "The source system for the reference fertilizer." + example: 3 + nullable: false + sourceSystemProductId: + type: "string" + description: "The source system identifier for the reference fertilizer." + example: "905P24925" + nullable: false + ReferenceFertilizerCollection: + type: "object" allOf: - - $ref: '#/components/schemas/CollectionBase' + - $ref: "#/components/schemas/CollectionBase_Fertilizers" - properties: values: - type: array + type: "array" items: - $ref: '#/components/schemas/Variety' + $ref: "#/components/schemas/ReferenceFertilizer" ReferenceProductOverrideStatus: - type: object + type: "object" properties: key: nullable: false - type: string - description: 'Key for override parameter when setting overrides for a reference product' - example: archived + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "archived" enum: - - archived + - "archived" success: nullable: false - type: boolean - description: 'Whether or not the override was successfully applied' + type: "boolean" + description: "Whether or not the override was successfully applied" example: true errors: - $ref: '#/components/schemas/Errors' - PutVariety: - type: object + $ref: "#/components/schemas/Errors" + ReferenceProductOverrideStatus_Chemicals: + type: "object" + properties: + key: + nullable: false + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "isCarrier" + enum: + - "isCarrier" + - "archived" + - "registration (chemicals and fertilizers only)" + success: + nullable: false + type: "boolean" + description: "Whether or not the override was successfully applied" + example: true + errors: + $ref: "#/components/schemas/Errors" + ReferenceProductOverrideStatus_Fertilizers: + type: "object" + properties: + key: + nullable: false + type: "string" + description: "Key for override parameter when setting overrides for a reference product" + example: "isCarrier" + enum: + - "isCarrier" + - "archived" + - "registration (chemicals and fertilizers only)" + success: + nullable: false + type: "boolean" + description: "Whether or not the override was successfully applied" + example: true + errors: + $ref: "#/components/schemas/Errors" + ReferenceProductPointerRequest: allOf: - properties: - '@type': - example: 'Variety' - name: - type: string - example: S73-Z5 - 50lb bag - description: The common name of the variety. - required: true - cropName: - type: string - example: SOYBEANS - required: true - description: 'The identifier of the crop type that this variety is associated with (see the Crop Types API). **NOTE:** See /cropTypes for the list of available crop types that are supported.' - companyName: - type: string - description: The brand of the variety. - example: NK + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs." required: true - category: - type: string - enum: - - VARIETY - example: VARIETY - archived: - type: boolean - description: Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. - example: false - createdTimeDEPRECATED: - type: string - format: date-time - example: "2019-03-27T14:59:57.000Z" - description: product created time - modifiedTimeDEPRECATED: - type: string - format: date-time - example: "2019-03-27T14:59:57.000Z" - description: product modified time - required: - - name - - cropName - - companyName - VarietyIdUpdate: - properties: - name: - type: string - example: RL8288HB - description: The common name of the variety. - companyName: - type: string - example: AgVenture - description: The name of the input manufacturer. - cropName: - type: string - example: CORN_WET - description: The identifier of the crop type that this variety is associated with. - archived: - type: boolean - example: false - description: Whether or not this product is actively used. Defaults to false. - ChildVariety: - type: object + - $ref: "#/components/schemas/CommonProductPointerRequest" + ReferenceVariety: + type: "object" allOf: - - $ref: '#/components/schemas/BaseResource' + - $ref: "#/components/schemas/BaseResource" - properties: - '@type': - example: 'Variety' + "@type": + example: "ReferenceVariety" id: - type: string - example: 87b4a1e7-210b-482c-8a7a-19e9f644e914 - format: uuid - nullable: false - description: The primary identifier for the variety that is unique to your organization. - name: - type: string - example: S73-Z5 - 50lb bag - description: The common name of the variety. + description: "Primary identifier for reference variety." + type: "string" + format: "uuid" + example: "1f8c12b4-126f-11ec-82a8-0242ac130003" nullable: false + referenceIdDEPRECATED: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "product id of the reference variety" category: - type: string + type: "string" enum: - - VARIETY - example: VARIETY - cropName: - type: string - example: SOYBEANS - description: The identifier of the crop type that this variety is associated with (see the Crop Types API). + - "VARIETY" + example: "VARIETY" + name: + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the reference variety." nullable: false + referenceGuid: + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." companyName: - type: string - description: The brand of the variety. - example: NK + type: "string" + description: "The name of the input manufacturer." + example: "NK" nullable: false - archived: - type: boolean - description: Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. - example: false + cropName: + type: "string" + example: "SOYBEANS" + description: "The identifier of the crop type that this reference variety is associated with (see the Crop Types API)." + nullable: false + countryCode: + type: "string" + example: "USA" + description: "Specifies the region the reference variety data belongs to. Some data may not be available in certain regions and data will not be included in the response." + sourceSystem: + type: "string" + format: "integer" + description: "The source system for the reference variety." + example: 3 + nullable: false + sourceSystemProductId: + type: "string" + description: "The source system identifier for the reference variety." + example: "905P24925" nullable: false createdTimeDEPRECATED: - type: string - format: date-time - example: "2017-03-21T21:12:53.865Z" - description: product created time + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product created time" modifiedTimeDEPRECATED: - type: string - format: date-time - example: "2018-04-06T15:12:52.910Z" - description: product modified time - readOnly: true - countryCode: - type: string - example: USA - description: Country of the product to which it belongs - parentErid: - type: string - example: b0241592-c95a-4a8b-a2f9-3e58168ac291 - description: 'Parent id of the child in which the product is merged' - cleanupStatus: - type: string - example: MERGED - description: 'Showing the status of cleanup.' - cleanupActionDate: - type: string - example: 2025-09-22T11:24:43.855Z - description: 'Clean up action time' - documentsList: - type: array + type: "string" + format: "date-time" + example: "2019-03-27T14:59:57.000Z" + description: "product modified time" + ReferenceVarietyCollection: + type: "object" + allOf: + - $ref: "#/components/schemas/CollectionBase" + - properties: + values: + type: "array" + items: + $ref: "#/components/schemas/ReferenceVariety" + TankMix: + properties: + "@type": + type: "string" + example: "TankMix" + description: "The type of the tank mix." + name: + type: "string" + required: true + example: "TankMix_with_All_Crop" + description: "The name of the tank mix." + notes: + type: "string" + example: "Mix in the carrier last" + description: "Notes about the Tank mix." + solutionRate: + type: "object" + required: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + required: true + format: "double" + example: 5 + description: "The value of the measurement as a double." + vrDomainId: + type: "string" + required: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the measurement." + unit: + type: "string" + required: true + example: "gal1ac-1" + description: "The unit of measure for the value." + volume: + type: "object" + required: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + required: true + format: "double" + example: 1200 + description: "The volume value as a double." + vrDomainId: + type: "string" + required: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the volume measurement." + unit: + type: "string" + required: true + example: "gal" + description: "The unit of measure for the volume." + carrier: + required: true + type: "object" + properties: + "@type": + type: "string" + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + required: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + required: true + example: 4.465466816647919 + description: "The rate value as a double." + vrDomainId: + type: "string" + required: true + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + required: true + example: "gal1ac-1" + description: "The unit of measure for the rate." + links: + type: "array" + required: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + required: true + example: "fertilizer" + description: "The relationship of the link." + uri: + type: "string" + required: true + example: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1" + description: "The URI of the linked resource." + components: + required: true + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + required: true + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + required: true + format: "double" + example: 3 + description: "The rate value as a double." + vrDomainId: + type: "string" + required: true + example: "vrSolutionRateMass" + description: "The domain ID for the rate measurement." + unit: + type: "string" + required: true + example: "kg1ha-1" + description: "The unit of measure for the rate." + links: + type: "array" + required: true + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + required: true + example: "fertilizer" + description: "The relationship of the link either fertilizer or chemical." + uri: + type: "string" + required: true + example: "https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b" + description: "The URI of the linked resource." + archived: + type: "boolean" + example: false + description: "Whether or not this tank mix is actively used." + materialClassification: + type: "string" + example: "LIQUID" + required: true + description: "Material classification of the tank mix." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + TankMixCollection: + properties: + x-deere-signature: + type: "string" + description: "A new x-deere-signature response header will be included if the response has changed since last api call." + example: "3b5392615e4b4e1c92013026f47109bb" + "@type": + type: "string" + example: "TankMix" + description: "The type of the tank mix." + name: + type: "string" + example: "TankMix_with_All_Crop" + description: "The name of the tank mix." + orgUniqueIdDEPRECATED: + type: "string" + example: "0585cd6d-898a-4298-ac09-a61db88d9e7d" + description: "The unique identifier for the organization." + solutionRate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 100 + description: "The value of the measurement as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateLiquid" + description: "The domain ID for the measurement." + unit: + type: "string" + example: "gal1ac-1" + description: "The unit of measure for the value." + volume: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 1200 + description: "The volume value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateLiquid" + description: "The domain ID for the volume measurement." + unit: + type: "string" + example: "gal" + description: "The unit of measure for the volume." + carrier: + type: "object" + properties: + "@type": + type: "string" + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 90 + description: "The rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + example: "gal1ac-1" + description: "The unit of measure for the rate." + chemical: + type: "object" + properties: + "@type": + type: "string" + example: "Fertilizer" + description: "The type of the chemical/fertilizer." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The URI of the linked resource." + id: + type: "string" + example: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The identifier for the chemical/fertilizer." + name: + type: "string" + example: "28-0-0 UAN" + description: "The name of the chemical/fertilizer." + type: + type: "string" + example: "FERTILIZER" + description: "The type of the chemical/fertilizer." + category: + type: "string" + example: "FERTILIZER" + description: "The category of the chemical/fertilizer." + companyName: + type: "string" + example: "BASF" + description: "The name of the company." + epaRegistrationDEPRECATED: + type: "string" + example: "EXEMPT" + description: "The EPA registration status." + registration: + type: "string" + example: "EXEMPT" + description: "The registration status." + materialClassification: + type: "string" + example: "LIQUID" + description: "The material classification." + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2024-11-07T06:47:38.220Z" + description: "The time when the chemical/fertilizer was created." + carrierId: + type: "string" + example: "274bbd7b-24ae-11ee-9389-123df1de64f7" + description: "The carrier ID." + referenceIdDEPRECATED: + type: "string" + example: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The reference ID." + referenceGuid: + type: "string" + example: "3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The reference GUID." + carrier: + type: "boolean" + example: true + description: "Whether the chemical/fertilizer is a carrier." + archived: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is archived." + restrictedUse: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is restricted use." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + agencyRegistrationsDEPRECATED: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the agency registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the linked resource." + registrationId: + type: "string" + example: "EXEMPT" + description: "The registration ID." + links: + type: "array" items: - $ref: '#/components/schemas/Document' - description: List of documents for the variety. For example, Tech Sheet, SDS Label. + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "fertilizer" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd" + description: "The URI of the linked resource." + components: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "TankMixComponent" + description: "The type of the tank mix component." + rate: + type: "object" + properties: + "@type": + type: "string" + example: "MeasurementAsDouble" + description: "The type of the measurement." + valueAsDouble: + type: "number" + format: "double" + example: 10 + description: "The rate value as a double." + vrDomainId: + type: "string" + example: "vrSolutionRateLiquid" + description: "The domain ID for the rate measurement." + unit: + type: "string" + example: "gal1ac-1" + description: "The unit of measure for the rate." + chemical: + type: "object" + properties: + "@type": + type: "string" + example: "Chemical" + description: "The type of the chemical/fertilizer." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The URI of the linked resource." + id: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The identifier for the chemical/fertilizer." + name: + type: "string" + example: "TELIA" + description: "The name of the chemical/fertilizer." + type: + type: "string" + example: "FUNGICIDE" + description: "The type of the chemical/fertilizer." + category: + type: "string" + example: "CHEMICAL" + description: "The category of the chemical/fertilizer." + companyName: + type: "string" + example: "BASF" + description: "The name of the company." + epaRegistrationDEPRECATED: + type: "string" + example: "EXEMPT" + description: "The EPA registration status." + registration: + type: "string" + example: "EXEMPT" + description: "The registration status." + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2024-08-21T09:25:24.220763Z" + description: "The time when the chemical/fertilizer was modified." + carrierId: + type: "string" + example: "58984d7a-126e-4d31-98e9-1ed65a582d91" + description: "The carrier ID." + referenceIdDEPRECATED: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference ID." + referenceGuid: + type: "string" + example: "a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The reference GUID." + carrier: + type: "boolean" + example: true + description: "Whether the chemical/fertilizer is a carrier." + archived: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is archived." + restrictedUse: + type: "boolean" + example: false + description: "Whether the chemical/fertilizer is restricted use." + countryCode: + type: "string" + example: "USA" + description: "Country of the product to which it belongs" + agencyRegistrationsDEPRECATED: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the agency registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the linked resource." + registrationId: + type: "string" + example: "EXEMPT" + description: "The registration ID." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "chemical" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d" + description: "The URI of the linked resource." + notes: + type: "string" + example: "this is tankmix notes" + description: "Notes about the tank mix." + archived: + type: "boolean" + example: false + description: "Whether or not this tank mix is actively used." + createdTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2024-11-07T06:47:39.246Z" + description: "The time when the tank mix was created." + modifiedTimeDEPRECATED: + type: "string" + format: "date-time" + example: "2024-11-07T06:47:39.246Z" + description: "The time when the tank mix was modified." + materialClassification: + type: "string" + example: "LIQUID" + description: "Material classification of the tank mix." + targetCrops: + type: "Array of string" + example: + - "CORN_WET" + - "ALFALFA" + description: "The name of the crop that this variety is associated with." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "self" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d" + description: "The URI of the linked resource." + Updated: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc.turer" + type2: + type: "string" + description: "The type of chemical" + example: "HERBICIDE" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification1: + type: "string" + description: "The product form. This is required during updates (as it may currently be null), but cannot be changed once set." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + Updated_Fertilizers: + properties: + name: + type: "string" + description: "The common name of this product." + example: "Tide Propiconazole 41.8EC" + companyName: + type: "string" + description: "The name of the input manufacturer." + example: "Tide International USA, Inc." + type2: + type: "string" + description: "The type of fertilizer" + example: "FERTILIZER" + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used." + materialClassification1: + type: "string" + description: "The product form. This is required during updates (as it may currently be null), but cannot be changed once set." + example: "DRY" + carrier: + type: "boolean" + example: false + description: "Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context." + registrationId: + type: "string" + description: "Registration Id" + example: "0084229-00011-AA-0000000" + activeIngredients: + type: "array" + allOf: + - $ref: "#/components/schemas/ActiveIngredientEmbed_Fertilizers" Variety: - type: object + type: "object" allOf: - - $ref: '#/components/schemas/BaseResource' + - $ref: "#/components/schemas/BaseResource" - properties: - '@type': - example: 'Variety' + "@type": + example: "Variety" id: - type: string - example: 87b4a1e7-210b-482c-8a7a-19e9f644e914 - format: uuid + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" nullable: false - description: The primary identifier for the variety that is unique to your organization. + description: "The primary identifier for the variety that is unique to your organization." name: - type: string - example: S73-Z5 - 50lb bag - description: The common name of the variety. + type: "string" + example: "S73-Z5 - 50lb bag" + description: "The common name of the variety." nullable: false category: - type: string + type: "string" enum: - - VARIETY - example: VARIETY + - "VARIETY" + example: "VARIETY" cropName: - type: string - example: SOYBEANS - description: The identifier of the crop type that this variety is associated with (see the Crop Types API). + type: "string" + example: "SOYBEANS" + description: "The identifier of the crop type that this variety is associated with (see the Crop Types API)." nullable: false companyName: - type: string - description: The brand of the variety. - example: NK + type: "string" + description: "The brand of the variety." + example: "NK" nullable: false archived: - type: boolean - description: Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. + type: "boolean" + description: "Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization." example: false nullable: false referenceGuid: - type: string - example: 87b4a1e7-210b-482c-8a7a-19e9f644e914 - format: uuid - description: 'Optional. Denotes whether this product is from the global reference list.' + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "Optional. Denotes whether this product is from the global reference list." referenceIdDEPRECATED: - type: string - example: 87b4a1e7-210b-482c-8a7a-19e9f644e914 - format: uuid - description: product id of the reference variety + type: "string" + example: "87b4a1e7-210b-482c-8a7a-19e9f644e914" + format: "uuid" + description: "product id of the reference variety" createdTimeDEPRECATED: - type: string - format: date-time + type: "string" + format: "date-time" example: "2017-03-21T21:12:53.865Z" - description: product created time + description: "product created time" modifiedTimeDEPRECATED: - type: string - format: date-time + type: "string" + format: "date-time" example: "2018-04-06T15:12:52.910Z" - description: product modified time + description: "product modified time" readOnly: true countryCode: - type: string - example: USA - description: Country of the product to which it belongs + type: "string" + example: "USA" + description: "Country of the product to which it belongs" parentErid: - type: string - example: b0241592-c95a-4a8b-a2f9-3e58168ac291 - description: 'Parent id of the child in which the product is merged' + type: "string" + example: "b0241592-c95a-4a8b-a2f9-3e58168ac291" + description: "Parent id of the child in which the product is merged" cleanupStatus: - type: string - example: MERGED - description: 'Showing the status of cleanup.' + type: "string" + example: "MERGED" + description: "Showing the status of cleanup." cleanupActionDate: - type: string - example: 2025-09-22T11:24:43.855Z - description: 'Clean up action time' + type: "string" + example: "2025-09-22T11:24:43.855Z" + description: "Clean up action time" documentsList: - type: array + type: "array" items: - $ref: '#/components/schemas/Document' - description: List of documents for the variety. For example, Tech Sheet, SDS Label. + $ref: "#/components/schemas/Document" + description: "List of documents for the variety. For example, Tech Sheet, SDS Label." childProducts: - type: array + type: "array" items: - $ref: '#/components/schemas/ChildVariety' - description: List of child products. - Errors: - type: object - format: Errors/DataValidationException - properties: - '@type': - type: string - example: Errors - errors: - type: array - items: - type: object - format: Error/ConstraintViolation - properties: - '@type': - type: string - example: Error - guid: - type: string - format: uuid - example: 9b331708-10e8-4e15-8097-a9aed7455d6d - message: - type: string - description: An english description of the error. - example: The given crop type does not exist - code: - type: string - example: validation_constraint_crop_type_does_not_exist - description: A string constant representing the type of error. - field: - type: string - example: targetCrops - description: The name of the property or parameter deemed invalid. - invalidValue: - type: string - example: CORN_WET - description: The value that was supplied for this field in the request. - otherAttributes: - example: { } - type: object - PostVariety: - type: object + $ref: "#/components/schemas/ChildVariety" + description: "List of child products." + VarietyCollection: + type: "object" allOf: + - $ref: "#/components/schemas/CollectionBase" - properties: - '@type': - example: 'Variety' - name: - type: string - example: S73-Z5 - 50lb bag - description: The common name of the variety. - required: true - cropName: - type: string - example: SOYBEANS - description: The identifier of the crop type that this variety is associated with (see the Crop Types API). - required: true - companyName: - type: string - description: The brand of the variety. - example: NK - required: true - category: - type: string - enum: - - VARIETY - example: VARIETY - archived: - type: boolean - description: Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. - example: false - createdTimeDEPRECATED: - type: string - format: date-time - example: "2017-03-21T21:12:53.865Z" - description: product created time - modifiedTimeDEPRECATED: - type: string - format: date-time - example: "2018-04-06T15:12:52.910Z" - description: product modified time - required: - - name - - cropName - - companyName + values: + type: "array" + items: + $ref: "#/components/schemas/Variety" VarietyCreate: properties: name: - type: string - example: 2C788A SXRA COR - description: The common name of the variety. + type: "string" + example: "2C788A SXRA COR" + description: "The common name of the variety." companyName: - type: string - example: MYCOGEN SEEDS - description: The name of the input manufacturer. + type: "string" + example: "MYCOGEN SEEDS" + description: "The name of the input manufacturer." cropName: - type: string - example: CORN_WET - description: The identifier of the crop type that this variety is associated with. + type: "string" + example: "CORN_WET" + description: "The identifier of the crop type that this variety is associated with." archived: - type: boolean + type: "boolean" example: false - description: Whether or not this product is actively used. + description: "Whether or not this product is actively used." referenceId: - type: string - description: The identifier of the associated reference variety, if applicable. This is optional, but helps to capture product lineage and improve consistency across organizations. - example: 1a63a1fe-b00f-403f-81f7-c157e0234cc4 - - responses: - Created: - description: Created - # FIXME: why does schema validator not like this? - # headers: - # Location: - # description: The uri of the newly created resource. - # schema: - # type: string - # format: uri + type: "string" + description: "The identifier of the associated reference variety, if applicable. This is optional, but helps to capture product lineage and improve consistency across organizations." + example: "1a63a1fe-b00f-403f-81f7-c157e0234cc4" + VarietyIdUpdate: + properties: + name: + type: "string" + example: "RL8288HB" + description: "The common name of the variety." + companyName: + type: "string" + example: "AgVenture" + description: "The name of the input manufacturer." + cropName: + type: "string" + example: "CORN_WET" + description: "The identifier of the crop type that this variety is associated with." + archived: + type: "boolean" + example: false + description: "Whether or not this product is actively used. Defaults to false." + agencyRegistrations: + type: "array" + properties: + "@type": + type: "string" + example: "AgencyRegistration" + description: "The type of the registration." + links: + type: "array" + items: + type: "object" + properties: + "@type": + type: "string" + example: "Link" + description: "The type of the link." + rel: + type: "string" + example: "agency" + description: "The relationship of the link." + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7" + description: "The URI of the agency." + registrationId: + type: "string" + example: "a12e9i84" + description: "The registration ID for the agency." + securitySchemes: + OAuth2: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag2: "ag2" + ag3: "ag3" + OAuth2_Companies: + type: "oauth2" + flows: + clientCredentials: + scopes: + ag1: "ag1" +x-source-documents: + - endPointName: "varieties" + id: 9 + - endPointName: "active-ingredients" + id: 15 + - endPointName: "chemicals" + id: 10 + - endPointName: "companies" + id: 14 + - endPointName: "documents" + id: 16 + - endPointName: "dry-blends" + id: 13 + - endPointName: "fertilizers" + id: 11 + - endPointName: "tank-mix" + id: 12 diff --git a/specs/raw/summary.json b/specs/raw/summary.json index 5757412..96032aa 100644 --- a/specs/raw/summary.json +++ b/specs/raw/summary.json @@ -1,141 +1,363 @@ { - "fetchedAt": "2026-06-19T08:01:35.999Z", + "fetchedAt": "2026-07-02T10:19:49.876Z", "baseUrl": "https://developer.deere.com/devDoc/apiDetails", "specs": [ { "id": 27, "name": "field-operations-api", - "file": "field-operations-api.yaml" + "file": "field-operations-api.yaml", + "docs": [ + { + "endPointName": "field-operation", + "id": 27 + }, + { + "endPointName": "measurement-type", + "id": 28 + } + ] }, { "id": 5, "name": "fields", - "file": "fields.yaml" + "file": "fields.yaml", + "docs": [ + { + "id": 5, + "endPointName": "fields" + } + ] }, { "id": 22, "name": "farms", - "file": "farms.yaml" + "file": "farms.yaml", + "docs": [ + { + "id": 22, + "endPointName": "farms" + } + ] }, { "id": 84, "name": "clients", - "file": "clients.yaml" + "file": "clients.yaml", + "docs": [ + { + "id": 84, + "endPointName": "clients" + } + ] }, { "id": 106, "name": "organizations", - "file": "organizations.yaml" + "file": "organizations.yaml", + "docs": [ + { + "id": 106, + "endPointName": "organizations" + } + ] }, { "id": 74, "name": "boundaries", - "file": "boundaries.yaml" + "file": "boundaries.yaml", + "docs": [ + { + "id": 74, + "endPointName": "boundaries" + } + ] }, { "id": 8, "name": "equipment", - "file": "equipment.yaml" + "file": "equipment.yaml", + "docs": [ + { + "id": 8, + "endPointName": "equipment" + } + ] }, { "id": 68, "name": "crop-types", - "file": "crop-types.yaml" + "file": "crop-types.yaml", + "docs": [ + { + "id": 68, + "endPointName": "crop-types" + } + ] }, { "id": 4, "name": "assets", - "file": "assets.yaml" + "file": "assets.yaml", + "docs": [ + { + "id": 4, + "endPointName": "assets" + } + ] }, { "id": 100, "name": "users", - "file": "users.yaml" + "file": "users.yaml", + "docs": [ + { + "id": 100, + "endPointName": "users" + } + ] }, { "id": 101, "name": "operators", - "file": "operators.yaml" + "file": "operators.yaml", + "docs": [ + { + "id": 101, + "endPointName": "operators" + } + ] }, { "id": 18, "name": "files", - "file": "files.yaml" + "file": "files.yaml", + "docs": [ + { + "endPointName": "files-api", + "id": 18 + }, + { + "endPointName": "file-transfers", + "id": 19 + } + ] }, { "id": 81, "name": "flags", - "file": "flags.yaml" + "file": "flags.yaml", + "docs": [ + { + "endPointName": "flags", + "id": 81 + }, + { + "endPointName": "flag-categories", + "id": 82 + }, + { + "endPointName": "flag-categories-preferences", + "id": 83 + } + ] }, { "id": 78, "name": "guidance-lines", - "file": "guidance-lines.yaml" + "file": "guidance-lines.yaml", + "docs": [ + { + "id": 78, + "endPointName": "guidance-lines" + } + ] }, { "id": 96, "name": "map-layers", - "file": "map-layers.yaml" + "file": "map-layers.yaml", + "docs": [ + { + "endPointName": "map-layer-summaries", + "id": 96 + }, + { + "endPointName": "file-resources", + "id": 98 + }, + { + "endPointName": "map-layers", + "id": 97 + } + ] }, { "id": 9, "name": "products", - "file": "products.yaml" + "file": "products.yaml", + "docs": [ + { + "endPointName": "varieties", + "id": 9 + }, + { + "endPointName": "active-ingredients", + "id": 15 + }, + { + "endPointName": "chemicals", + "id": 10 + }, + { + "endPointName": "companies", + "id": 14 + }, + { + "endPointName": "documents", + "id": 16 + }, + { + "endPointName": "dry-blends", + "id": 13 + }, + { + "endPointName": "fertilizers", + "id": 11 + }, + { + "endPointName": "tank-mix", + "id": 12 + } + ] }, { "id": 103, "name": "webhook", - "file": "webhook.yaml" + "file": "webhook.yaml", + "docs": [ + { + "endPointName": "event-subscription", + "id": 103 + }, + { + "endPointName": "event-subscription-delivery", + "id": 104 + } + ] }, { "id": 75, "name": "connection-management", - "file": "connection-management.yaml" + "file": "connection-management.yaml", + "docs": [ + { + "id": 75, + "endPointName": "connection-management" + } + ] }, { "id": 23, "name": "machine-locations", - "file": "machine-locations.yaml" + "file": "machine-locations.yaml", + "docs": [ + { + "endPointName": "location-history", + "id": 23 + }, + { + "endPointName": "breadcrumbs", + "id": 24 + } + ] }, { "id": 29, "name": "machine-alerts", - "file": "machine-alerts.yaml" + "file": "machine-alerts.yaml", + "docs": [ + { + "id": 29, + "endPointName": "machine-alerts" + } + ] }, { "id": 30, "name": "machine-device-state-reports", - "file": "machine-device-state-reports.yaml" + "file": "machine-device-state-reports.yaml", + "docs": [ + { + "id": 30, + "endPointName": "machine-device-state-reports" + } + ] }, { "id": 31, "name": "machine-engine-hours", - "file": "machine-engine-hours.yaml" + "file": "machine-engine-hours.yaml", + "docs": [ + { + "id": 31, + "endPointName": "machine-engine-hours" + } + ] }, { "id": 32, "name": "machine-hours-of-operation", - "file": "machine-hours-of-operation.yaml" + "file": "machine-hours-of-operation.yaml", + "docs": [ + { + "id": 32, + "endPointName": "machine-hours-of-operation" + } + ] }, { "id": 66, "name": "harvest-id", - "file": "harvest-id.yaml" + "file": "harvest-id.yaml", + "docs": [ + { + "id": 66, + "endPointName": "harvest-id" + } + ] }, { "id": 72, "name": "aemp", - "file": "aemp.yaml" + "file": "aemp.yaml", + "docs": [ + { + "id": 72, + "endPointName": "aemp" + } + ] }, { "id": 73, "name": "equipment-measurement", - "file": "equipment-measurement.yaml" + "file": "equipment-measurement.yaml", + "docs": [ + { + "id": 73, + "endPointName": "equipment-measurement" + } + ] }, { "id": 85, "name": "partnerships", - "file": "partnerships.yaml" + "file": "partnerships.yaml", + "docs": [ + { + "id": 85, + "endPointName": "partnerships" + } + ] } ], "notFound": [ diff --git a/specs/raw/users.yaml b/specs/raw/users.yaml index 3949f09..3b8f8cd 100644 --- a/specs/raw/users.yaml +++ b/specs/raw/users.yaml @@ -1,99 +1,95 @@ -openapi: 3.0.1 +openapi: "3.0.1" info: - title: Users API - description: This endpoint returns information about the user, such as first and last name, the account name, etc. This call can be used by a logged-in user to view their own information. - version: 1.0.0 + title: "Users API" + description: "This endpoint returns information about the user, such as first and last name, the account name, etc. This call can be used by a logged-in user to view their own information." + version: "1.0.0" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - sandboxapi - - partnerapi + - "api" + - "apicert" + - "apiqa.tal" + - "sandboxapi" + - "partnerapi" paths: /users/{username}: get: - summary: View User Info - description: 'This endpoint returns information about the user, such as first and last name, the account name, etc. This call can be used by a logged-in user to view their own information.
          The response also contains links to the following resources: -
          • organizations: View a list of organizations to which the user belongs.
          • -
          • files: View a list of files belonging to the user.
          ' + summary: "View User Info" + description: "This endpoint returns information about the user, such as first and last name, the account name, etc. This call can be used by a logged-in user to view their own information.
          The response also contains links to the following resources:
          • organizations: View a list of organizations to which the user belongs.
          • files: View a list of files belonging to the user.
          " parameters: - - name: username - in: path - description: Filter by username. + - name: "username" + in: "path" + description: "Filter by username." required: true schema: - type: string - default: N/A - example: JohnDoe - - name: embed - in: query - description: Add user's staff organizations and available links to response. + type: "string" + default: "N/A" + example: "JohnDoe" + - name: "embed" + in: "query" + description: "Add user's staff organizations and available links to response." required: false schema: - type: string - default: N/A - example: Organizations + type: "string" + default: "N/A" + example: "Organizations" responses: - 200: - description: The users. + "200": + description: "The users." content: application/vnd.deere.axiom.v3+json: schema: - type: object + type: "object" properties: links: items: - $ref: '#/components/schemas/UsersLink' + $ref: "#/components/schemas/UsersLink" values: items: - $ref: '#/components/schemas/UsersValue' + $ref: "#/components/schemas/UsersValue" examples: No Header: - description: '200 OK
          - Content-Type:application/vnd.deere.axiom.v3+jso' + description: "200 OK
          Content-Type:application/vnd.deere.axiom.v3+jso" value: - '@type': User - accountName: johndoe - givenName: John - familyName: Doe - userType: Customer + "@type": "User" + accountName: "johndoe" + givenName: "John" + familyName: "Doe" + userType: "Customer" links: - - '@type': Link - rel: self - uri: ' https://sandboxapi.deere.com/platform/users/johndoe' + - "@type": "Link" + rel: "self" + uri: " https://sandboxapi.deere.com/platform/users/johndoe" followable: true - - '@type': Link - rel: organizations - uri: ' https://sandboxapi.deere.com/platform/users/johndoe/organizations' + - "@type": "Link" + rel: "organizations" + uri: " https://sandboxapi.deere.com/platform/users/johndoe/organizations" followable: true - components: schemas: UsersLink: properties: organizations: - example: https://sandboxapi.deere.com/platform/users/johndoe/organizations - description: Organizations Link. + example: "https://sandboxapi.deere.com/platform/users/johndoe/organizations" + description: "Organizations Link." UsersValue: properties: accountName: - type: string - example: JohnDoe - description: User's account name. + type: "string" + example: "JohnDoe" + description: "User's account name." givenName: - type: string - example: John - description: User's first name. + type: "string" + example: "John" + description: "User's first name." familyName: - type: string - example: Doe - description: User's last name. + type: "string" + example: "Doe" + description: "User's last name." userType: - type: string - example: Customer - description: User's type. Examples are customer, dealer, internal + type: "string" + example: "Customer" + description: "User's type. Examples are customer, dealer, internal" diff --git a/specs/raw/webhook.yaml b/specs/raw/webhook.yaml index 45d7ffa..472304c 100644 --- a/specs/raw/webhook.yaml +++ b/specs/raw/webhook.yaml @@ -1,128 +1,165 @@ -openapi: '3.0.0' +openapi: "3.0.0" info: - title: Subscribe API - version: 0.0.1 - description: APIs to manage the subscription service - + title: "Subscribe API" + version: "0.0.1" + description: "APIs to manage the subscription service" servers: - - url: https://{environment}.deere.com/platform + - url: "https://{environment}.deere.com/platform" variables: environment: - default: api + default: "api" enum: - - api - - apicert - - apiqa.tal - - apidev.tal - - sandboxapi - - partnerapi + - "api" + - "apicert" + - "apiqa.tal" + - "apidev.tal" + - "sandboxapi" + - "partnerapi" paths: + /eventSubscriptionDelivery: + patch: + summary: "Update Event Subscription Delivery" + description: "This resource will update an event subscription delivery" + operationId: "updateDelivery" + requestBody: + required: true + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/SubscriptionUpdateResponse" + examples: + No Header: + value: + authorizationHeaderValue: "Bearer 123abc" + concurrentDeliveries: 5 + maxBatchSize: 5 + status: "Active" + responses: + "200": + $ref: "#/components/responses/UpdatedResponse_EventSubscriptionDelivery" + "400": + $ref: "#/components/responses/BadRequestResponse_EventSubscriptionDelivery" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" + get: + description: "This resource will return your event subscription delivery status" + summary: "Get Event Subscription Delivery" + operationId: "getDelivery" + responses: + "200": + $ref: "#/components/responses/DeliveryResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + contentType: + description: "The request body used to create or update a client" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + Content-Type: "application/vnd.deere.axiom.v3+json" /eventSubscriptions: post: - summary: Create an Event Subscription - description: "This resource will create an event subscription for a user. It returns a list of event subscriptions. To create a subscription for an event, your client must have access to the event's associated api. The response will include links to:- -
            -
          • user: The subscribed user provided by the current authorization context.
          • -
          • self: The created subscription.
          • -
          " - operationId: createSubscription + summary: "Create an Event Subscription" + description: "This resource will create an event subscription for a user. It returns a list of event subscriptions. To create a subscription for an event, your client must have access to the event's associated api. The response will include links to:-
          • user: The subscribed user provided by the current authorization context.
          • self: The created subscription.
          " + operationId: "createSubscription" parameters: - - $ref: '#/components/parameters/EventTypeId' - - $ref: '#/components/parameters/Filters' - - $ref: '#/components/parameters/TargetEndpoint' - - $ref: '#/components/parameters/Status' - - $ref: '#/components/parameters/DisplayName' - - $ref: '#/components/parameters/Token' + - $ref: "#/components/parameters/EventTypeId" + - $ref: "#/components/parameters/Filters" + - $ref: "#/components/parameters/TargetEndpoint" + - $ref: "#/components/parameters/Status" + - $ref: "#/components/parameters/DisplayName" + - $ref: "#/components/parameters/Token" requestBody: content: application/vnd:deere:axiom:v3+json: examples: No Header: value: - eventTypeId: fieldOperation + eventTypeId: "fieldOperation" filters: - - key: orgId + - key: "orgId" values: - - '123456' - - key: fieldOperationType + - "123456" + - key: "fieldOperationType" values: - - seeding - - key: cropSeason + - "seeding" + - key: "cropSeason" values: - - '2017' - - '2018' - - key: fieldId + - "2017" + - "2018" + - key: "fieldId" values: - - '12345' + - "12345" targetEndpoint: - targetType: https - uri: https://example.com/api/receiveEvents - status: Active - displayName: Org 123456 Seeding Field Ops Subscription - token: REDACTED + targetType: "https" + uri: "https://example.com/api/receiveEvents" + status: "Active" + displayName: "Org 123456 Seeding Field Ops Subscription" + token: "REDACTED" responses: - '200': - $ref: '#/components/responses/CreatedSubscription' - '400': - $ref: '#/components/responses/BadRequestResponse' - '403': - $ref: '#/components/responses/DoesNotHaveAccessResponse' + "200": + $ref: "#/components/responses/CreatedSubscription" + "400": + $ref: "#/components/responses/BadRequestResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' - + Content-Type: "application/vnd.deere.axiom.v3+json" get: - summary: Get Event Subscriptions - description: This resource will return a paged list of event subscriptions for the user. The endpoint will return all Active, Expired, and Terminated subscriptions. - operationId: getSubscriptions + summary: "Get Event Subscriptions" + description: "This resource will return a paged list of event subscriptions for the user. The endpoint will return all Active, Expired, and Terminated subscriptions." + operationId: "getSubscriptions" responses: - '200': - $ref: '#/components/responses/SubscriptionCollectionResponse' - '403': - $ref: '#/components/responses/DoesNotHaveAccessResponse' + "200": + $ref: "#/components/responses/SubscriptionCollectionResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" /eventSubscriptions/{id}: get: - summary: Get an Event Subscription - description: 'This resource will get a single event subscription by id. The response will include links to: -
            -
          • user: The subscribed user provided by the current authorization context.
          • -
          • self: The subscription itself.
          • -
          ' - operationId: getSubscriptionById + summary: "Get an Event Subscription" + description: "This resource will get a single event subscription by id. The response will include links to:
          • user: The subscribed user provided by the current authorization context.
          • self: The subscription itself.
          " + operationId: "getSubscriptionById" parameters: - - $ref: '#/components/parameters/Id' + - $ref: "#/components/parameters/Id" responses: - '200': - $ref: '#/components/responses/SubscriptionResponse' - '403': - $ref: '#/components/responses/DoesNotHaveAccessResponse' - '404': - $ref: '#/components/responses/InputValueIsInvalidResponse' + "200": + $ref: "#/components/responses/SubscriptionResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/InputValueIsInvalidResponse" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" put: - description: 'This resource will update an event subscription for a user. - Only certain fields are editable.' - operationId: updateSubscriptionById - summary: Update an Event Subscription + description: "This resource will update an event subscription for a user. Only certain fields are editable." + operationId: "updateSubscriptionById" + summary: "Update an Event Subscription" parameters: - - $ref: '#/components/parameters/Id' + - $ref: "#/components/parameters/Id" requestBody: required: true content: @@ -130,606 +167,714 @@ paths: examples: No Header: value: - id: ae4b499c-1111-2222-3333-d7498cd7d9dd - eventTypeId: fieldOperation + id: "ae4b499c-1111-2222-3333-d7498cd7d9dd" + eventTypeId: "fieldOperation" filters: - - key: orgId + - key: "orgId" values: - - '123456' - - key: fieldOperationType + - "123456" + - key: "fieldOperationType" values: - - seeding + - "seeding" targetEndpoint: - targetType: https - uri: https://website.com/api/receiveEvents - status: Active - displayName: Org 123456 Seeding Field Ops Subscription - token: REDACTED + targetType: "https" + uri: "https://website.com/api/receiveEvents" + status: "Active" + displayName: "Org 123456 Seeding Field Ops Subscription" + token: "REDACTED" links: - - rel: user - uri: https://sandboxapi.deere.com/platform/users/subscribedUser - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd + - rel: "user" + uri: "https://sandboxapi.deere.com/platform/users/subscribedUser" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" schema: - $ref: '#/components/requestBodies/SubscriptionUpdateRequest' + $ref: "#/components/requestBodies/SubscriptionUpdateRequest" responses: - '200': - $ref: '#/components/responses/UpdatedResponse' - '400': - $ref: '#/components/responses/BadRequestResponse' - '403': - $ref: '#/components/responses/DoesNotHaveAccessResponse' - '404': - $ref: '#/components/responses/InputValueIsInvalidResponse' + "200": + $ref: "#/components/responses/UpdatedResponse" + "400": + $ref: "#/components/responses/BadRequestResponse" + "403": + $ref: "#/components/responses/DoesNotHaveAccessResponse" + "404": + $ref: "#/components/responses/InputValueIsInvalidResponse" contentType: - description: The request body used to create or update a client + description: "The request body used to create or update a client" content: application/vnd.deere.axiom.v3+json: schema: properties: - Content-Type: 'application/vnd.deere.axiom.v3+json' + Content-Type: "application/vnd.deere.axiom.v3+json" components: parameters: - Id: - in: path - name: id - description: Event Subscription ID as a GUID. - required: true + DisplayName: + in: "request" + name: "displayName" + description: "Human-readable name to easily identify the event subscription." + required: false schema: - type: string - default: N/A - example: 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd + type: "string" + default: "N/A" + example: "My Data Subscription" EventTypeId: - in: request - name: eventTypeId - description: See Event Types for valid event type names. + in: "request" + name: "eventTypeId" + description: "See Event Types for valid event type names." required: true schema: - type: string - default: N/A - example: heartbeat + type: "string" + default: "N/A" + example: "heartbeat" Filters: - in: request - name: filters1 - description: List of MetadataFilters to filter events on metadata. - required: Depends on eventType2 + in: "request" + name: "filters1" + description: "List of MetadataFilters to filter events on metadata." + required: "Depends on eventType2" schema: - type: array - default: N/A - example: See sample request below - TargetEndpoint: - in: request - name: targetEndpoint - description: The postback endpoint that receives the event(s). + type: "array" + default: "N/A" + example: "See sample request below" + HTTPTargetEndpointAuthorizationHeader: + name: "Authorization" + in: "header" + description: "If set via the eventSubscriptionDelivery endpoint, we will include an Authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb." + required: false + schema: + $ref: "#/components/schemas/AuthorizationHeader" + Id: + in: "path" + name: "id" + description: "Event Subscription ID as a GUID." required: true schema: - type: '---' - default: N/A - example: See sample request below + type: "string" + default: "N/A" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" Status: - in: request - name: status4 - description: The status of the event subscription. Only a status of Active can be specified on subscription creation. + in: "request" + name: "status4" + description: "The status of the event subscription. Only a status of Active can be specified on subscription creation." required: false schema: - type: string - default: Active - example: Active - DisplayName: - in: request - name: displayName - description: Human-readable name to easily identify the event subscription. - required: false + type: "string" + default: "Active" + example: "Active" + TargetEndpoint: + in: "request" + name: "targetEndpoint" + description: "The postback endpoint that receives the event(s)." + required: true schema: - type: string - default: N/A - example: My Data Subscription + type: "---" + default: "N/A" + example: "See sample request below" Token: - in: request - name: token - description: A string that was sent with each delivery to validate the sender. - required: false - schema: - type: string - default: N/A - example: Follows pattern '^[A-Za-z0-9+/=]{0,256}$' - HTTPTargetEndpointAuthorizationHeader: - name: Authorization - in: header - description: If set via the eventSubscriptionDelivery endpoint, we will include an Authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. + in: "request" + name: "token" + description: "A string that was sent with each delivery to validate the sender." required: false schema: - $ref: '#/components/schemas/AuthorizationHeader' - + type: "string" + default: "N/A" + example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'" requestBodies: - SubscriptionRequest: - required: true - content: - application/vnd.deere.axiom.v3+json: - schema: - $ref: '#/components/schemas/SubscriptionRequestContent' - - SubscriptionUpdateRequest: - $ref: '#/components/schemas/SubscriptionResponseContent' DeliveryUpdateRequest: required: true content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/DeliveryContent' + $ref: "#/components/schemas/DeliveryContent" HTTPTargetEndpointRequest: required: true content: application/json: schema: - $ref: '#/components/schemas/HTTPTargetEndpointEventsContent' + $ref: "#/components/schemas/HTTPTargetEndpointEventsContent" + SubscriptionRequest: + required: true + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/SubscriptionRequestContent" + SubscriptionUpdateRequest: + $ref: "#/components/schemas/SubscriptionResponseContent" responses: - SubscriptionResponse: - description: Subscription + BadRequestResponse: + description: "Bad Request" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors" + BadRequestResponse_EventSubscriptionDelivery: + description: "Bad Request" + content: + application/vnd.deere.axiom.v3+json: + schema: + $ref: "#/components/schemas/Errors_EventSubscriptionDelivery" + CreatedSubscription: + description: "Created" content: application/vnd.deere.axiom.v3+json: schema: + type: "object" properties: links: + type: "array" items: - $ref: '#/components/schemas/CreatedSubscriptionLinks' + $ref: "#/components/schemas/CreatedSubscriptionLinks" values: items: - $ref: '#/components/schemas/CreatedSubscriptionValues' + $ref: "#/components/schemas/CreatedSubscriptionValues" examples: No Header: value: - id: ae4b499c-1111-2222-3333-d7498cd7d9dd - eventTypeId: fieldOperation + id: "ae4b499c-1111-2222-3333-d7498cd7d9dd" + eventTypeId: "fieldOperation" filters: - - key: orgId + - key: "orgId" values: - - '123456' - - key: fieldOperationType + - "123456" + - key: "fieldOperationType" values: - - seeding + - "seeding" + - key: "cropSeason" + values: + - "2017" + - "2018" + - key: "fieldId" + values: + - "12345" targetEndpoint: - targetType: https - uri: https://website.com/api/receiveEvents - status: Active - displayName: Org 123456 Seeding Field Ops Subscription - clientKey: REDACTED - token: REDACTED + targetType: "https" + uri: "https://website.com/api/receiveEvents" + status: "Active" + displayName: "Org 123456 Seeding Field Ops Subscription" + clientKey: "REDACTED" + token: "REDACTED" links: - - rel: user - uri: https://sandboxapi.deere.com/platform/users/subscribedUser - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd - + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" + DeletedResponse: + description: "Deleted" + content: + application/vnd.deere.axiom.v3+json: + schema: + description: "A deleted response" + DeliveryResponse: + description: "Delivery" + content: + application/vnd.deere.axiom.v3+json: + schema: + properties: + values: + items: + $ref: "#/components/schemas/SubscriptionUpdateResponseGet" + links: + items: + $ref: "#/components/schemas/SubscriptionDeliveryLink" + examples: + No Header: + value: + authorizationHeaderValue: "Bearer 123abc" + clientKey: "REDACTED" + status: "Active" + concurrentDeliveries: 5 + maxBatchSize: 10 + links: + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptionDelivery" + DoesNotHaveAccessResponse: + description: "Does not have access" + InputValueIsInvalidResponse: + description: "Not found" SubscriptionCollectionResponse: - description: Subscriptions + description: "Subscriptions" content: application/vnd.deere.axiom.v3+json: schema: properties: links: items: - $ref: '#/components/schemas/SubscriptionCollectionResponseContent' + $ref: "#/components/schemas/SubscriptionCollectionResponseContent" examples: No Header: value: links: - - rel: self - uri: https://sandboxapi.deere.com/platform/eventSubscriptions + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptions" total: 1 values: - - id: ae4b499c-1111-2222-3333-d7498cd7d9dd - eventTypeId: fieldOperation + - id: "ae4b499c-1111-2222-3333-d7498cd7d9dd" + eventTypeId: "fieldOperation" filters: - - key: orgId + - key: "orgId" values: - - '123456' - - key: fieldOperationType + - "123456" + - key: "fieldOperationType" values: - - seeding - - key: cropSeason + - "seeding" + - key: "cropSeason" values: - - '2017' - - '2018' - - key: fieldId + - "2017" + - "2018" + - key: "fieldId" values: - - '12345' + - "12345" targetEndpoint: - targetType: https - uri: https://example.com/api/receiveEvents - status: Active - displayName: Org123456SeedingFieldOpsSubscription - clientKey: REDACTED - token: REDACTED + targetType: "https" + uri: "https://example.com/api/receiveEvents" + status: "Active" + displayName: "Org123456SeedingFieldOpsSubscription" + clientKey: "REDACTED" + token: "REDACTED" links: - - rel: user - uri: https://sandboxapi.deere.com/platform/users/subscribedUser - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd - - CreatedSubscription: - description: Created + - rel: "user" + uri: "https://sandboxapi.deere.com/platform/users/subscribedUser" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" + SubscriptionResponse: + description: "Subscription" content: application/vnd.deere.axiom.v3+json: schema: - type: object properties: links: - type: array items: - $ref: '#/components/schemas/CreatedSubscriptionLinks' + $ref: "#/components/schemas/CreatedSubscriptionLinks" values: items: - $ref: '#/components/schemas/CreatedSubscriptionValues' + $ref: "#/components/schemas/CreatedSubscriptionValues" examples: No Header: value: - id: ae4b499c-1111-2222-3333-d7498cd7d9dd - eventTypeId: fieldOperation + id: "ae4b499c-1111-2222-3333-d7498cd7d9dd" + eventTypeId: "fieldOperation" filters: - - key: orgId + - key: "orgId" values: - - '123456' - - key: fieldOperationType + - "123456" + - key: "fieldOperationType" values: - - seeding - - key: cropSeason - values: - - '2017' - - '2018' - - key: fieldId - values: - - '12345' + - "seeding" targetEndpoint: - targetType: https - uri: https://website.com/api/receiveEvents - status: Active - displayName: Org 123456 Seeding Field Ops Subscription - clientKey: REDACTED - token: REDACTED + targetType: "https" + uri: "https://website.com/api/receiveEvents" + status: "Active" + displayName: "Org 123456 Seeding Field Ops Subscription" + clientKey: "REDACTED" + token: "REDACTED" links: - - rel: self - uri: >- - https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd - - DeletedResponse: - description: Deleted - content: - application/vnd.deere.axiom.v3+json: - schema: - description: A deleted response - + - rel: "user" + uri: "https://sandboxapi.deere.com/platform/users/subscribedUser" + - rel: "self" + uri: "https://sandboxapi.deere.com/platform/eventSubscriptions/ae4b499c-1111-2222-3333-d7498cd7d9dd" UpdatedResponse: - description: Subscription + description: "Subscription" content: application/vnd.deere.axiom.v3+json: schema: properties: total: - description: Number of results in the list - type: integer - format: int64 + description: "Number of results in the list" + type: "integer" + format: "int64" example: 70 examples: Headers: - description: '204 No Content' - - InputValueIsInvalidResponse: - description: Not found - - DoesNotHaveAccessResponse: - description: Does not have access - - BadRequestResponse: - description: Bad Request + description: "204 No Content" + UpdatedResponse_EventSubscriptionDelivery: + description: "Update Subscriptions delivery" content: application/vnd.deere.axiom.v3+json: schema: - $ref: '#/components/schemas/Errors' - - + properties: + total: + description: "Number of results in the list" + type: "integer" + format: "int64" + example: 70 + examples: + Headers: + description: "204 No Content" schemas: - HTTPTargetEndpointEventsContent: - description: A list of events - type: array - items: - $ref: '#/components/schemas/HTTPTargetEndpointEventContent' - - HTTPTargetEndpointEventContent: - description: An event - type: object - properties: - clientKey: - type: string - description: The client key that made the subscription - example: johndeere-abcdef - eventTypeId: - type: string - example: fieldOperation - targetResource: - type: string - format: url - example: https://sandboxapi.deere.com/platform/fieldOperations/795b80cf-eb03-4c43-a9e1-f46eb0fbf912 - token: - type: string - pattern: '^[A-Za-z0-9+/=]{0,256}$' - description: a string that will be sent with each delivery to validate the sender. Accepts the base 64 character set. - example: 'abc123ABC+/=' - metadata: - type: array - items: - $ref: '#/components/schemas/HTTPTargetEndpointEventMetadata' - links: - $ref: '#/components/schemas/Links' - required: - - clientKey - - eventTypeId - - targetResource - - metadata - - links - - HTTPTargetEndpointEventMetadata: - type: object - description: Generic key value pair - properties: - key: - type: string - example: orgId - value: - type: string - example: 12345 - - Links: - type: array - items: - $ref: '#/components/schemas/Link' - readOnly: true - - Link: - description: Link to another resource - type: object - required: - - rel - - uri - properties: - rel: - type: string - example: self - uri: - type: string - example: https://sandboxapi.deere.com/platform/users/USER - - Errors: - type: array - items: - $ref: '#/components/schemas/Error' + AuthorizationHeader: + type: "string" + maxLength: 4096 + nullable: true + example: "Bearer " + description: "If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb." CreatedSubscriptionLinks: properties: user: - example: https://sandboxapi.deere.com/platform/users/USER - description: The link back to the subscribed user. + example: "https://sandboxapi.deere.com/platform/users/USER" + description: "The link back to the subscribed user." self: - example: https://sandboxapi.deere.com/platform/eventSubscriptions/SUBSCRIPTION_ID - description: The link to the created subscription. - + example: "https://sandboxapi.deere.com/platform/eventSubscriptions/SUBSCRIPTION_ID" + description: "The link to the created subscription." CreatedSubscriptionValues: properties: id: - type: string - format: uuid - example: 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd - description: Event Subscription ID as a GUID. + type: "string" + format: "uuid" + example: "83ks9gh3-29fj-9302-837j-92jlsk92jd095kd" + description: "Event Subscription ID as a GUID." eventTypeId: - type: string - description: See Event Types for valid event names - example: heartbeat + type: "string" + description: "See Event Types for valid event names" + example: "heartbeat" filters1: - type: array - description: List of MetadataFilters to filter events on metadata. - example: See the sample response below + type: "array" + description: "List of MetadataFilters to filter events on metadata." + example: "See the sample response below" targetEndpoint3: - example: See the sample response below - type: '---' - description: The postback endpoint that receives the event(s). + example: "See the sample response below" + type: "---" + description: "The postback endpoint that receives the event(s)." status4: - type: string - example: Active - description: The status of the event subscription. + type: "string" + example: "Active" + description: "The status of the event subscription." displayName: - type: string - example: My Data Subscription - description: Human-readable name to easily identify the event subscription. + type: "string" + example: "My Data Subscription" + description: "Human-readable name to easily identify the event subscription." clientKey: - type: string - example: REDACTED - description: The client key used to create the subscription. + type: "string" + example: "REDACTED" + description: "The client key used to create the subscription." token: - type: string - pattern: '^[A-Za-z0-9+/=]{0,256}$' - description: A string that was sent with each delivery to validate the sender. - example: Follows pattern '^[A-Za-z0-9+/=]{0,256}$' + type: "string" + pattern: "^[A-Za-z0-9+/=]{0,256}$" + description: "A string that was sent with each delivery to validate the sender." + example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'" links: - description: Links to other resources. - example: See the sample response below - type: array - + description: "Links to other resources." + example: "See the sample response below" + type: "array" + DeliveryContent: + type: "object" + description: "Delivery" + properties: + clientKey: + type: "string" + example: "johndeere-abcdef" + readOnly: true + status: + $ref: "#/components/schemas/DeliveryStatus" + authorizationHeaderValue: + $ref: "#/components/schemas/AuthorizationHeader" + concurrentDeliveries: + type: "integer" + example: 5 + format: "int32" + minimum: 1 + maximum: 10 + maxBatchSize: + type: "integer" + example: 5 + format: "int32" + minimum: 1 + maximum: 256 + links: + $ref: "#/components/schemas/Links" + DeliveryStatus: + type: "string" + enum: + - "Active" + - "Paused" Error: - type: object + type: "object" properties: guid: - type: string - format: guid - example: 11111111-2222-3333-4444-555555555555 + type: "string" + format: "guid" + example: "11111111-2222-3333-4444-555555555555" message: - type: string - description: An english description of the error - example: was invalid because + type: "string" + description: "An english description of the error" + example: " was invalid because " code: - type: string - description: A string constant representing the type of error + type: "string" + description: "A string constant representing the type of error" example: 400 field: - type: string - description: The name of the property or parameter deemed invalid - example: example-field + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "example-field" invalidValue: - type: string - description: The value that was supplied for this field in the request - example: Bad value - - SubscriptionRequestContent: - description: A subscription request - type: object + type: "string" + description: "The value that was supplied for this field in the request" + example: "Bad value" + Error_EventSubscriptionDelivery: + type: "object" properties: - eventTypeId: - $ref: '#/components/schemas/EventTypeId' - filters: - type: array - items: - $ref: '#/components/schemas/Filter' - targetEndpoint: - $ref: '#/components/schemas/HttpsSubscription' - status: - type: string - enum: [Active] - default: Active - displayName: - type: string - example: mySubscribedEndPoint - token: - type: string - pattern: '^[A-Za-z0-9+/=]{0,256}$' - description: a string that well be sent with each delivery to validate the sender. Accepts the base 64 character set. - example: 'abc123ABC+/=' - required: - - eventTypeId - - targetEndpoint - + message: + type: "string" + description: "An english description of the error" + example: " was invalid because " + code: + type: "string" + description: "A string constant representing the type of error" + example: 400 + field: + type: "string" + description: "The name of the property or parameter deemed invalid" + example: "Machine.serialNumber" + gud: + type: "string" + format: "uuid" + description: "A reference to this encounter of the error, for traceability and troubleshooting" + example: "9b331708-10e8-4e15-8097-a9aed7455d6d" + invalidValue: + type: "string" + description: "The value that was supplied for this field in the request" + example: null + readOnly: true + Errors: + type: "array" + items: + $ref: "#/components/schemas/Error" + Errors_EventSubscriptionDelivery: + type: "array" + items: + $ref: "#/components/schemas/Error_EventSubscriptionDelivery" + readOnly: true + EventTypeId: + type: "string" + description: "See [Event Types](https://developer-portal.deere.com/#/myjohndeere/data-subscription-service/event-types) for valid event names" + readOnly: true + example: "exampleEvent" Filter: - type: object - description: Consists of a key and list of values used to filter events based on metadata. + type: "object" + description: "Consists of a key and list of values used to filter events based on metadata." properties: key: - type: string - example: orgId + type: "string" + example: "orgId" values: - type: array + type: "array" + items: + type: "string" + example: "1234" + required: + - "key" + - "values" + HTTPTargetEndpointEventContent: + description: "An event" + type: "object" + properties: + clientKey: + type: "string" + description: "The client key that made the subscription" + example: "johndeere-abcdef" + eventTypeId: + type: "string" + example: "fieldOperation" + targetResource: + type: "string" + format: "url" + example: "https://sandboxapi.deere.com/platform/fieldOperations/795b80cf-eb03-4c43-a9e1-f46eb0fbf912" + token: + type: "string" + pattern: "^[A-Za-z0-9+/=]{0,256}$" + description: "a string that will be sent with each delivery to validate the sender. Accepts the base 64 character set." + example: "abc123ABC+/=" + metadata: + type: "array" items: - type: string - example: '1234' + $ref: "#/components/schemas/HTTPTargetEndpointEventMetadata" + links: + $ref: "#/components/schemas/Links" required: - - key - - values - + - "clientKey" + - "eventTypeId" + - "targetResource" + - "metadata" + - "links" + HTTPTargetEndpointEventMetadata: + type: "object" + description: "Generic key value pair" + properties: + key: + type: "string" + example: "orgId" + value: + type: "string" + example: 12345 + HTTPTargetEndpointEventsContent: + description: "A list of events" + type: "array" + items: + $ref: "#/components/schemas/HTTPTargetEndpointEventContent" + HttpsSubscription: + description: "A HTTPS subscription" + type: "object" + required: + - "targetType" + - "uri" + properties: + targetType: + type: "string" + example: "https" + uri: + type: "string" + example: "https//example.com/callme" + Link: + description: "Link to another resource" + type: "object" + required: + - "rel" + - "uri" + properties: + rel: + type: "string" + example: "self" + uri: + type: "string" + example: "https://sandboxapi.deere.com/platform/users/USER" + Links: + type: "array" + items: + $ref: "#/components/schemas/Link" + readOnly: true SubscriptionCollectionResponseContent: - type: object + type: "object" properties: self: - description: The link of the request. - example: https://sandboxapi.deere.com/platform/eventSubscriptions - SubscriptionResponseContentPut: - description: A subscription response - type: object + description: "The link of the request." + example: "https://sandboxapi.deere.com/platform/eventSubscriptions" + SubscriptionDeliveryLink: + properties: + self: + description: "The link to the event subscription's delivery status." + example: "https://sandboxapi.deere.com/platform/eventSubscriptionDelivery" + SubscriptionRequestContent: + description: "A subscription request" + type: "object" properties: + eventTypeId: + $ref: "#/components/schemas/EventTypeId" + filters: + type: "array" + items: + $ref: "#/components/schemas/Filter" targetEndpoint: - example: See the sample response below - type: '---' - description: The postback endpoint that receives the event(s). + $ref: "#/components/schemas/HttpsSubscription" status: - type: string - example: Active - description: The status of the event subscription. + type: "string" + enum: + - "Active" + default: "Active" displayName: - type: string - example: My Data Subscription - description: Human-readable name to easily identify the event subscription. - clientKey: - type: string - example: REDACTED - description: The client key used to create the subscription. + type: "string" + example: "mySubscribedEndPoint" token: - type: string - pattern: '^[A-Za-z0-9+/=]{0,256}$' - description: A string that was sent with each delivery to validate the sender. - example: Follows pattern '^[A-Za-z0-9+/=]{0,256}$' + type: "string" + pattern: "^[A-Za-z0-9+/=]{0,256}$" + description: "a string that well be sent with each delivery to validate the sender. Accepts the base 64 character set." + example: "abc123ABC+/=" + required: + - "eventTypeId" + - "targetEndpoint" SubscriptionResponseContent: - description: A subscription response - type: object + description: "A subscription response" + type: "object" properties: targetEndpoint3: - type: --- - description: The postback endpoint that receives the event(s). - example: 'See the sample request below
          Editable: Yes' + type: "---" + description: "The postback endpoint that receives the event(s)." + example: "See the sample request below
          Editable: Yes" status4: - description: The status of the event subscription. - type: string - example: 'active
          Editable: Yes' + description: "The status of the event subscription." + type: "string" + example: "active
          Editable: Yes" displayName: - type: string - description: Human-readable name to easily identify the event subscription. - example: 'My Data Subscription
          Editable: Yes' + type: "string" + description: "Human-readable name to easily identify the event subscription." + example: "My Data Subscription
          Editable: Yes" token: - type: string - description: A string that was sent with each delivery to validate the sender. + type: "string" + description: "A string that was sent with each delivery to validate the sender." example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'
          Editable: Yes" - - HttpsSubscription: - description: A HTTPS subscription - type: object - required: - - targetType - - uri + SubscriptionResponseContentPut: + description: "A subscription response" + type: "object" properties: - targetType: - type: string - example: 'https' - uri: - type: string - example: https//example.com/callme - - EventTypeId: - type: string - description: See [Event Types](https://developer-portal.deere.com/#/myjohndeere/data-subscription-service/event-types) for valid event names - readOnly: true - example: exampleEvent - - DeliveryContent: - type: object - description: Delivery + targetEndpoint: + example: "See the sample response below" + type: "---" + description: "The postback endpoint that receives the event(s)." + status: + type: "string" + example: "Active" + description: "The status of the event subscription." + displayName: + type: "string" + example: "My Data Subscription" + description: "Human-readable name to easily identify the event subscription." + clientKey: + type: "string" + example: "REDACTED" + description: "The client key used to create the subscription." + token: + type: "string" + pattern: "^[A-Za-z0-9+/=]{0,256}$" + description: "A string that was sent with each delivery to validate the sender." + example: "Follows pattern '^[A-Za-z0-9+/=]{0,256}$'" + SubscriptionUpdateResponse: properties: + authorizationHeaderValue: + type: "string" + description: "If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. Set this value to null to disable this functionality." + example: "Bearer abc123
          Editable: Yes" + status: + example: "Active
          Editable: Yes" + type: "string" + description: "The status of the event subscription delivery." + concurrentDeliveries: + type: "number" + description: "Concurrency of the event subscription delivery (default: 1, min: 1, max: 10)." + example: "5
          Editable: Yes" clientKey: - type: string - example: johndeere-abcdef - readOnly: true - status: - $ref: '#/components/schemas/DeliveryStatus' - authorizationHeaderValue: - $ref: '#/components/schemas/AuthorizationHeader' + type: "string" + description: "The client key used to create the subscription." + example: "johndeere-1234567898765432123456789876543212345678
          Editable: No" + maxBatchSize: + type: "number" + description: "Maximum batch size of the event subscription delivery (default: 10, min: 1, max: 256)." + example: "10
          Editable: Yes" + links: + type: "array" + example: "See the sample request below
          Editable: No" + description: "Links to other resources." + SubscriptionUpdateResponseGet: + properties: + authorizationHeaderValue: + type: "string" + description: "If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. Set this value to null to disable this functionality." + example: "Bearer abc123" + status: + example: "Active" + type: "string" + description: "The status of the event subscription." concurrentDeliveries: - type: integer - example: 5 - format: int32 - minimum: 1 - maximum: 10 - maxBatchSize: - type: integer + type: "number" + description: "Concurrency of the event subscription delivery (default: 1, min: 1, max: 10)." example: 5 - format: int32 - minimum: 1 - maximum: 256 + maxBatchSize: + type: "number" + description: "Maximum batch size of the event subscription delivery (default: 10, min: 1, max: 256)." + example: 10 + clientKey: + type: "string" + description: "The client key used to create the subscription." + example: "REDACTED" links: - $ref: '#/components/schemas/Links' - - DeliveryStatus: - type: string - enum: [Active, Paused] - - AuthorizationHeader: - type: string - maxLength: 4096 - nullable: true - example: Bearer - description: If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. + type: "array" + example: "See the sample request below" + description: "Links to other resources." +x-source-documents: + - endPointName: "event-subscription" + id: 103 + - endPointName: "event-subscription-delivery" + id: 104 diff --git a/src/api-servers.generated.ts b/src/api-servers.generated.ts index 35c1924..2f217cf 100644 --- a/src/api-servers.generated.ts +++ b/src/api-servers.generated.ts @@ -2,7 +2,6 @@ * API server configuration per spec — single source of truth for URL resolution. * * @generated by scripts/generate-api-servers.ts — do not edit manually - * Last generated: 2026-05-26T15:57:02.992Z * * Env coverage matrix (X = supported, - = throws UnsupportedEnvironmentError): * diff --git a/src/api/assets.ts b/src/api/assets.ts index ebaa598..a13476c 100644 --- a/src/api/assets.ts +++ b/src/api/assets.ts @@ -18,59 +18,21 @@ export class AssetsApi { constructor(private readonly client: DeereClient) {} /** - * Get all assets - * @description This endpoint will retrieve all assets for an organization. - * @generated from GET /organizations/{orgId}/assets - */ - async list( - orgId: string, - params?: { embed?: string }, - options?: RequestOptions - ): Promise> { - const query = new URLSearchParams(); - if (params?.embed !== undefined) query.set('embed', String(params.embed)); - const queryString = query.toString(); - const path = `/organizations/${orgId}/assets${queryString ? `?${queryString}` : ''}`; - return this.client.get>( - this.spec, - path, - options - ); - } - /** - * Get all items (follows pagination automatically) - * @generated from GET /organizations/{orgId}/assets + * Get Asset Catalog List + * @description This endpoint will retrieve the Asset Catalog List. + * @generated from GET /assetCatalog */ - async listAll( - orgId: string, - params?: { embed?: string }, + async getAssetcatalog( options?: RequestOptions - ): Promise { - const query = new URLSearchParams(); - if (params?.embed !== undefined) query.set('embed', String(params.embed)); - const queryString = query.toString(); - const path = `/organizations/${orgId}/assets${queryString ? `?${queryString}` : ''}`; - return this.client.getAll( + ): Promise> { + const path = `/assetCatalog`; + return this.client.get>( this.spec, path, options ); } - /** - * Create a new asset - * @description This endpoint will create a new asset. - * @generated from POST /organizations/{orgId}/assets - */ - async create( - orgId: string, - data: components['schemas']['CreatePostValues'], - options?: RequestOptions - ): Promise { - const path = `/organizations/${orgId}/assets`; - await this.client.post(this.spec, path, data, options); - } - /** * Get a specific asset * @description This endpoint will retrieve a specific asset by its unique ID. @@ -157,20 +119,58 @@ export class AssetsApi { } /** - * Get Asset Catalog List - * @description This endpoint will retrieve the Asset Catalog List. - * @generated from GET /assetCatalog + * Get all assets + * @description This endpoint will retrieve all assets for an organization. + * @generated from GET /organizations/{orgId}/assets */ - async getAssetcatalog( + async list( + orgId: string, + params?: { embed?: string }, options?: RequestOptions - ): Promise> { - const path = `/assetCatalog`; - return this.client.get>( + ): Promise> { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${orgId}/assets${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** + * Get all items (follows pagination automatically) + * @generated from GET /organizations/{orgId}/assets + */ + async listAll( + orgId: string, + params?: { embed?: string }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${orgId}/assets${queryString ? `?${queryString}` : ''}`; + return this.client.getAll( this.spec, path, options ); } + + /** + * Create a new asset + * @description This endpoint will create a new asset. + * @generated from POST /organizations/{orgId}/assets + */ + async create( + orgId: string, + data: components['schemas']['CreatePostValues'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/assets`; + await this.client.post(this.spec, path, data, options); + } } // Re-export types for convenience diff --git a/src/api/boundaries.ts b/src/api/boundaries.ts index 0a8ad43..1ae1561 100644 --- a/src/api/boundaries.ts +++ b/src/api/boundaries.ts @@ -17,6 +17,33 @@ export class BoundariesApi { constructor(private readonly client: DeereClient) {} + /** + * Generate a Boundary from a FieldOperation + * @description Given a , this endpoint will generate and return a boundary + * that surrounds the area worked by that field operation. Any gaps in that + * field operation will be treated as interior rings. This endpoint returns + * the generated boundary, giving you the opportunity to change the boundary + * name, clean up any unwanted interiors, etc. before back into Operations + * Center. There are two cases where this API will return an HTTP 400 - Bad + * Request: If the field already has an active boundary. In this case, please + * use the existing boundary - it is likely more accurate than a generated + * boundary. If the field has been merged. In this case, a FieldOperation may + * only cover one part of the merged field, resulting in an inaccurate + * boundary. + * @generated from GET /fieldOperations/{operationId}/boundary + */ + async get( + operationId: string, + options?: RequestOptions + ): Promise> { + const path = `/fieldOperations/${operationId}/boundary`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** * View Boundaries in an Org * @description View boundaries in an organization. fields: View the field @@ -95,33 +122,6 @@ export class BoundariesApi { return this.client.post(this.spec, path, data, options); } - /** - * Generate a Boundary from a FieldOperation - * @description Given a , this endpoint will generate and return a boundary - * that surrounds the area worked by that field operation. Any gaps in that - * field operation will be treated as interior rings. This endpoint returns - * the generated boundary, giving you the opportunity to change the boundary - * name, clean up any unwanted interiors, etc. before back into Operations - * Center. There are two cases where this API will return an HTTP 400 - Bad - * Request: If the field already has an active boundary. In this case, please - * use the existing boundary - it is likely more accurate than a generated - * boundary. If the field has been merged. In this case, a FieldOperation may - * only cover one part of the merged field, resulting in an inaccurate - * boundary. - * @generated from GET /fieldOperations/{operationId}/boundary - */ - async get( - operationId: string, - options?: RequestOptions - ): Promise> { - const path = `/fieldOperations/${operationId}/boundary`; - return this.client.get>( - this.spec, - path, - options - ); - } - /** * Get a specific boundary * @description This endpoint will retrieve a specific boundary. diff --git a/src/api/clients.ts b/src/api/clients.ts index 21e7e88..e142033 100644 --- a/src/api/clients.ts +++ b/src/api/clients.ts @@ -17,6 +17,28 @@ export class ClientsApi { constructor(private readonly client: DeereClient) {} + /** + * View a Client's Field + * @description View the field to which a specific client belongs. For the + * client, the response links to the following resources: boundaries: View the + * boundaries that belong to this field. clients: View the client that belongs + * to this field. farms: View the farms within this field. owningOrganization: + * View the organization that owns the field. + * @generated from GET /organizations/{orgID}/clients/{id}/fields + */ + async listFields( + orgID: string, + id: string, + options?: RequestOptions + ): Promise> { + const path = `/organizations/${orgID}/clients/${id}/fields`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** * List Clients in an Org * @description Retrieve all of the clients for an organization @@ -146,28 +168,6 @@ export class ClientsApi { options ); } - - /** - * View a Client's Field - * @description View the field to which a specific client belongs. For the - * client, the response links to the following resources: boundaries: View the - * boundaries that belong to this field. clients: View the client that belongs - * to this field. farms: View the farms within this field. owningOrganization: - * View the organization that owns the field. - * @generated from GET /organizations/{orgID}/clients/{id}/fields - */ - async listFields( - orgID: string, - id: string, - options?: RequestOptions - ): Promise> { - const path = `/organizations/${orgID}/clients/${id}/fields`; - return this.client.get>( - this.spec, - path, - options - ); - } } // Re-export types for convenience diff --git a/src/api/crop-types.ts b/src/api/crop-types.ts index 763e2da..f7ab89c 100644 --- a/src/api/crop-types.ts +++ b/src/api/crop-types.ts @@ -52,16 +52,6 @@ export class CropTypesApi { return this.client.getAll(this.spec, path, options); } - /** - * View a specific cropType - * @description This endpoint will return details of specific cropType. - * @generated from GET /cropTypes/{name} - */ - async get(name: string, options?: RequestOptions): Promise { - const path = `/cropTypes/${name}`; - return this.client.get(this.spec, path, options); - } - /** * View a specific cropType * @description This endpoint will return details of specific cropType. @@ -75,6 +65,16 @@ export class CropTypesApi { return this.client.get(this.spec, path, options); } + /** + * View a specific cropType + * @description This endpoint will return details of specific cropType. + * @generated from GET /cropTypes/{name} + */ + async get(name: string, options?: RequestOptions): Promise { + const path = `/cropTypes/${name}`; + return this.client.get(this.spec, path, options); + } + /** * Retrieve all crop types for a specific organization * @description This endpoint will return a list of all crop types for a diff --git a/src/api/equipment.ts b/src/api/equipment.ts index b25f65f..e3151d0 100644 --- a/src/api/equipment.ts +++ b/src/api/equipment.ts @@ -47,7 +47,7 @@ export class EquipmentApi { itemLimit?: number; }, options?: RequestOptions - ): Promise> { + ): Promise> { const query = new URLSearchParams(); if (params?.ids !== undefined) query.set('ids', String(params.ids)); if (params?.serialNumbers !== undefined) @@ -65,54 +65,11 @@ export class EquipmentApi { if (params?.itemLimit !== undefined) query.set('itemLimit', String(params.itemLimit)); const queryString = query.toString(); const path = `/equipment${queryString ? `?${queryString}` : ''}`; - return this.client.get>(this.spec, path, options); - } - - /** - * Create equipment - * @description This resource allows the client to create a piece of equipment - * within a user’s organization. Getting Started The process of contributing - * equipment to John Deere can be broken down into three primary steps. - * Determine the Equipment’s model IDs Create the Equipment Contribute - * Measurements. Please see the for more information on uploading measurements - * for the created equipment. Determining the Equipment’s model Call the GET - * /equipmentMakes API endpoint to get a list of all equipment makes and a - * respective “id” of the equipment make you require. Call the GET - * /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated - * equipment ISG types for that specific equipment make and obtain a - * respective “id” for a specific ISG type you require. Call the GET - * /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the - * final “id” of the equipment model you require. Alternatively, you may call - * the GET /equipmentModels endpoint if you know the model name you are - * searching for. For example - * /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will - * include all models with search string results and include make and isgType - * “id” as well as model “id”. Creating the Equipment Make a POST request to - * the /organizations/{orgId}/equipment API to create the piece of equipment - * in the user’s org. In this request you will provide the type of the - * equipment, a serialNumber (optional), name (displayed to the user in - * Operations Center), and the equipment model IDs. type: Machine or Implement - * serialNumber: A string identifier that is 30 characters or fewer. Must be - * unique within an organization. name: The name displayed in Operation - * Center, 30 characters or fewer. Must be unique within an organization. - * model: The id for the Model of the vehicle, found from the API in the - * previous step of this document. A successful POST will result in a 201 - * Created response. The “location” header in the response will contain the - * URI to the new equipment, with the final segment being the organization - * specific machine ID (ie - * “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the - * machine 12345). If you attempt to create a machine with a serialNumber that - * already exists in that organization, you get a response code 400 Bad - * Request. The body will include the error information. - * @generated from POST /organizations/{organizationId}/equipment - */ - async create( - organizationId: string, - data: components['schemas']['createEquipment'], - options?: RequestOptions - ): Promise { - const path = `/organizations/${organizationId}/equipment`; - await this.client.post(this.spec, path, data, options); + return this.client.get>( + this.spec, + path, + options + ); } /** @@ -127,12 +84,12 @@ export class EquipmentApi { embed?: 'devices' | 'equipment' | 'pairingDetails' | 'icon' | 'offsets' | 'capabilities'; }, options?: RequestOptions - ): Promise { + ): Promise { const query = new URLSearchParams(); if (params?.embed !== undefined) query.set('embed', String(params.embed)); const queryString = query.toString(); const path = `/equipment/${id}${queryString ? `?${queryString}` : ''}`; - return this.client.get(this.spec, path, options); + return this.client.get(this.spec, path, options); } /** @@ -163,6 +120,33 @@ export class EquipmentApi { await this.client.delete(this.spec, path, options); } + /** + * Get equipment ISG types + * @description This operation retrieves a list of Equipment ISG Types based + * on the supplied query parameters. + * @generated from GET /equipmentISGTypes + */ + async listEquipmentisgtypes( + params?: { + category?: 'machine' | 'implement'; + deprecated?: 'false' | 'true' | 'all'; + embed?: 'equipmentModels' | 'recordMetadata'; + }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.category !== undefined) query.set('category', String(params.category)); + if (params?.deprecated !== undefined) query.set('deprecated', String(params.deprecated)); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/equipmentISGTypes${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** * Get equipment makes * @description This resource allows the client to view equipment makes and @@ -202,94 +186,6 @@ export class EquipmentApi { return this.client.get(this.spec, path, options); } - /** - * Get equipment types by make id - * @description This resource allows the client to view equipment types by - * providing an equipment make ID. - * @generated from GET /equipmentMakes/{equipmentMakeId}/equipmentTypes - */ - async getEquipmenttypes( - equipmentMakeId: string, - options?: RequestOptions - ): Promise> { - const path = `/equipmentMakes/${equipmentMakeId}/equipmentTypes`; - return this.client.get>( - this.spec, - path, - options - ); - } - - /** - * Get equipment types - * @description This resource allows the client to view equipment types and - * their associated IDs and names. - * @generated from GET /equipmentTypes - */ - async listEquipmenttypes( - options?: RequestOptions - ): Promise> { - const path = `/equipmentTypes`; - return this.client.get>( - this.spec, - path, - options - ); - } - - /** - * Get equipment models - * @description This resource allows the client to view equipment models in - * our reference database and their associated IDs and names. - * @generated from GET /equipmentModels - */ - async listEquipmentmodels( - params?: { - embed?: 'make' | 'type' | 'isgType'; - equipmentModelName?: 'string or partial string with * wildcard search'; - }, - options?: RequestOptions - ): Promise> { - const query = new URLSearchParams(); - if (params?.embed !== undefined) query.set('embed', String(params.embed)); - if (params?.equipmentModelName !== undefined) - query.set('equipmentModelName', String(params.equipmentModelName)); - const queryString = query.toString(); - const path = `/equipmentModels${queryString ? `?${queryString}` : ''}`; - return this.client.get>( - this.spec, - path, - options - ); - } - - /** - * Get equipment ISG types - * @description This operation retrieves a list of Equipment ISG Types based - * on the supplied query parameters. - * @generated from GET /equipmentISGTypes - */ - async listEquipmentisgtypes( - params?: { - category?: 'machine' | 'implement'; - deprecated?: 'false' | 'true' | 'all'; - embed?: 'equipmentModels' | 'recordMetadata'; - }, - options?: RequestOptions - ): Promise> { - const query = new URLSearchParams(); - if (params?.category !== undefined) query.set('category', String(params.category)); - if (params?.deprecated !== undefined) query.set('deprecated', String(params.deprecated)); - if (params?.embed !== undefined) query.set('embed', String(params.embed)); - const queryString = query.toString(); - const path = `/equipmentISGTypes${queryString ? `?${queryString}` : ''}`; - return this.client.get>( - this.spec, - path, - options - ); - } - /** * Get equipment ISG types by make id * @description This operation retrieves a list of Equipment ISG Types for @@ -375,6 +271,114 @@ export class EquipmentApi { const path = `/equipmentMakes/${equipmentMakeId}/equipmentISGTypes/${equipmentISGTypeId}/equipmentModels/${equipmentModelId}`; return this.client.get(this.spec, path, options); } + + /** + * Get equipment types by make id + * @description This resource allows the client to view equipment types by + * providing an equipment make ID. + * @generated from GET /equipmentMakes/{equipmentMakeId}/equipmentTypes + */ + async getEquipmenttypes( + equipmentMakeId: string, + options?: RequestOptions + ): Promise> { + const path = `/equipmentMakes/${equipmentMakeId}/equipmentTypes`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Get equipment models + * @description This resource allows the client to view equipment models in + * our reference database and their associated IDs and names. + * @generated from GET /equipmentModels + */ + async listEquipmentmodels( + params?: { + embed?: 'make' | 'type' | 'isgType'; + equipmentModelName?: 'string or partial string with * wildcard search'; + }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + if (params?.equipmentModelName !== undefined) + query.set('equipmentModelName', String(params.equipmentModelName)); + const queryString = query.toString(); + const path = `/equipmentModels${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Get equipment types + * @description This resource allows the client to view equipment types and + * their associated IDs and names. + * @generated from GET /equipmentTypes + */ + async listEquipmenttypes( + options?: RequestOptions + ): Promise> { + const path = `/equipmentTypes`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Create equipment + * @description This resource allows the client to create a piece of equipment + * within a user’s organization. Getting Started The process of contributing + * equipment to John Deere can be broken down into three primary steps. + * Determine the Equipment’s model IDs Create the Equipment Contribute + * Measurements. Please see the for more information on uploading measurements + * for the created equipment. Determining the Equipment’s model Call the GET + * /equipmentMakes API endpoint to get a list of all equipment makes and a + * respective “id” of the equipment make you require. Call the GET + * /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated + * equipment ISG types for that specific equipment make and obtain a + * respective “id” for a specific ISG type you require. Call the GET + * /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the + * final “id” of the equipment model you require. Alternatively, you may call + * the GET /equipmentModels endpoint if you know the model name you are + * searching for. For example + * /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will + * include all models with search string results and include make and isgType + * “id” as well as model “id”. Creating the Equipment Make a POST request to + * the /organizations/{orgId}/equipment API to create the piece of equipment + * in the user’s org. In this request you will provide the type of the + * equipment, a serialNumber (optional), name (displayed to the user in + * Operations Center), and the equipment model IDs. type: Machine or Implement + * serialNumber: A string identifier that is 30 characters or fewer. Must be + * unique within an organization. name: The name displayed in Operation + * Center, 30 characters or fewer. Must be unique within an organization. + * model: The id for the Model of the vehicle, found from the API in the + * previous step of this document. A successful POST will result in a 201 + * Created response. The “location” header in the response will contain the + * URI to the new equipment, with the final segment being the organization + * specific machine ID (ie + * “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the + * machine 12345). If you attempt to create a machine with a serialNumber that + * already exists in that organization, you get a response code 400 Bad + * Request. The body will include the error information. + * @generated from POST /organizations/{organizationId}/equipment + */ + async create( + organizationId: string, + data: components['schemas']['createEquipment'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/equipment`; + await this.client.post(this.spec, path, data, options); + } } // Re-export types for convenience diff --git a/src/api/farms.ts b/src/api/farms.ts index 2c4d74c..d90fc56 100644 --- a/src/api/farms.ts +++ b/src/api/farms.ts @@ -17,6 +17,29 @@ export class FarmsApi { constructor(private readonly client: DeereClient) {} + /** + * View a Farm's Field + * @description View details on the field to which a specified farm belongs. + * The response will link to the following resources: boundaries: View the + * boundaries of this field. clients: View the clients associated with this + * field. farms: View the farms belonging to this field. owningOrganization: + * View the organization that owns the field. activeBoundary: View the active + * boundary of this field. + * @generated from GET /organizations/{orgID}/farms/{id}/fields + */ + async listFields( + orgID: string, + id: string, + options?: RequestOptions + ): Promise> { + const path = `/organizations/${orgID}/farms/${id}/fields`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** * View Farms in an Org * @description Retrieve all of the farms for an organization @@ -129,29 +152,6 @@ export class FarmsApi { options ); } - - /** - * View a Farm's Field - * @description View details on the field to which a specified farm belongs. - * The response will link to the following resources: boundaries: View the - * boundaries of this field. clients: View the clients associated with this - * field. farms: View the farms belonging to this field. owningOrganization: - * View the organization that owns the field. activeBoundary: View the active - * boundary of this field. - * @generated from GET /organizations/{orgID}/farms/{id}/fields - */ - async listFields( - orgID: string, - id: string, - options?: RequestOptions - ): Promise> { - const path = `/organizations/${orgID}/farms/${id}/fields`; - return this.client.get>( - this.spec, - path, - options - ); - } } // Re-export types for convenience diff --git a/src/api/field-operations-api.ts b/src/api/field-operations-api.ts index 92d9674..f46fbf4 100644 --- a/src/api/field-operations-api.ts +++ b/src/api/field-operations-api.ts @@ -17,6 +17,141 @@ export class FieldOperationsApi { constructor(private readonly client: DeereClient) {} + /** + * View a Field Operation + * @description View a single field operation. The response will include links + * to: organization: The organization which owns this data. field: The field + * in which this operation was performed. self: The field operation. + * @generated from GET /fieldOperations/{operationId} + */ + async get( + operationId: string, + params?: { embed?: 'measurementTypes' }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/fieldOperations/${operationId}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + + /** + * Field Operation Measurements + * @description Field Operations include a variety of measurements collected + * when the operation is performed in the field. This endpoint returns an + * array of measurement types available for a given field operation. Two + * categories of measurements are available today: Target: Target measurements + * refer to what the machine or implement attempted to perform in the field. + * Result: Result measurements refer to what the machine or implement actually + * accomplished in the field. For example, the SeedingRateTarget measurement + * describes the rate at which the equipment attempted to plant seeds, while + * the SeedingRateResult measurement describes the rate at which seeds were + * actually planted by the equipment. Target measurements may be consistent + * throughout the entire operation (the operator may have applied a single + * rate across an entire field) but result measurements will vary during the + * operation as they account for machine error, operator error, and + * environmental factors. The difference in rate and location are easily + * visible in the associated map image. Note: The values included in the + * responses will depend on their availability as well as the field operation + * type (Seeding, Application Tank Mix, Application Single Product, Harvest + * Yield Contour, or Harvest Yield Result). Please refer . "carting" + * operations as well as construction operations "constructionmilling", + * "constructionpaving", "constructioncompacting", "constructioncrushing", + * "constructionstabilizingrecycling" are not supported at this time. + * @generated from GET /fieldOperations/{operationId}/measurementTypes + */ + async listMeasurementTypes( + operationId: string, + options?: RequestOptions + ): Promise> { + const path = `/fieldOperations/${operationId}/measurementTypes`; + return this.client.get>(this.spec, path, options); + } + + /** + * Field Operation Measurement + * @description Field Operations include a variety of measurements collected + * when the operation is performed in the field. This endpoint returns an + * array of measurement types available for a given field operation. Two + * categories of measurements are available today: Target: Target measurements + * refer to what the machine or implement attempted to perform in the field. + * Result: Result measurements refer to what the machine or implement actually + * accomplished in the field. For example, the SeedingRateTarget measurement + * describes the rate at which the equipment attempted to plant seeds, while + * the SeedingRateResult measurement describes the rate at which seeds were + * actually planted by the equipment. Target measurements may be consistent + * throughout the entire operation (the operator may have applied a single + * rate across an entire field) but result measurements will vary during the + * operation as they account for machine error, operator error, and + * environmental factors. The difference in rate and location are easily + * visible in the associated map image. Note: The values included in the + * responses will depend on their availability as well as the field operation + * type (Seeding, Application Tank Mix, Application Single Product, Harvest + * Yield Contour, or Harvest Yield Result). To view the different responses + * for each field operation type, view the documentation above. Please refer + * Note: This API has two possible accept headers. One will give a response + * with totals, and the other will give a response with a Base64 encoded + * image. For the image layer, A map image is available for each measurement + * offering a visual depiction of the data. Argonomic data points are grouped + * either by label (such as variety name) or numerical range, and this + * information provided in the JSON response as a map legend. + * @generated from GET /fieldOperations/{operationId}/measurementTypes/{measurementType} + */ + async getMeasurementTypes( + operationId: string, + measurementType: string, + options?: RequestOptions + ): Promise { + const path = `/fieldOperations/${operationId}/measurementTypes/${measurementType}`; + return this.client.get( + this.spec, + path, + options + ); + } + + /** + * Asynchronous Shapefile Download + * @description An ESRI Shapefile is available for each Field Operation. + * Please see the for details on the shapefile format and how to consume it. + * The expected response codes are: 202 Accepted – The request was received + * and is being processed. Call back later to check for completion. This API + * does not currently support webhooks. To check for completion, repeat the + * same API call until you get an HTTP 307. Processing may take up to 30 + * minutes, depending on the size of data. Applications should poll the API + * using a backoff loop. Polling intervals should start at 5 seconds and + * double with each attempt: secondsToWait = 5 * 2 ^ (numberOfAttempts - 1) + * 307 Temporary Redirect – The shapefile is ready to download. This response + * contains a location header. The location is a pre-signed URL that is valid + * for no less than one hour. To download the file, perform a GET request to + * the URL in the location header. Do not apply OAuth signing or other + * authorization to this request - it will cause the call to fail. 406 Not + * Acceptable - A shapefile cannot be generated. Note the initial call for a + * shapefile may receive either a 202 or a 307 response, depending upon + * whether an up-to-date file already exists for the specified field + * operation. For a sample integration, see our . + * @generated from GET /fieldOps/{operationId} + */ + async getFieldops( + operationId: string, + params?: { + splitShapeFile?: boolean; + shapeType?: 'Point' | 'Polygon'; + resolution?: 'EachSection' | 'EachSensor' | 'OneHertz'; + }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.splitShapeFile !== undefined) + query.set('splitShapeFile', String(params.splitShapeFile)); + if (params?.shapeType !== undefined) query.set('shapeType', String(params.shapeType)); + if (params?.resolution !== undefined) query.set('resolution', String(params.resolution)); + const queryString = query.toString(); + const path = `/fieldOps/${operationId}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + /** * List Field Operations * @description This resource returns logical data structures representing the @@ -87,66 +222,6 @@ export class FieldOperationsApi { const path = `/organizations/${orgId}/fields/${fieldId}/fieldOperations${queryString ? `?${queryString}` : ''}`; return this.client.getAll(this.spec, path, options); } - - /** - * View a Field Operation - * @description View a single field operation. The response will include links - * to: organization: The organization which owns this data. field: The field - * in which this operation was performed. self: The field operation. - * @generated from GET /fieldOperations/{operationId} - */ - async get( - operationId: string, - params?: { embed?: 'measurementTypes' }, - options?: RequestOptions - ): Promise { - const query = new URLSearchParams(); - if (params?.embed !== undefined) query.set('embed', String(params.embed)); - const queryString = query.toString(); - const path = `/fieldOperations/${operationId}${queryString ? `?${queryString}` : ''}`; - return this.client.get(this.spec, path, options); - } - - /** - * Asynchronous Shapefile Download - * @description An ESRI Shapefile is available for each Field Operation. - * Please see the for details on the shapefile format and how to consume it. - * The expected response codes are: 202 Accepted – The request was received - * and is being processed. Call back later to check for completion. This API - * does not currently support webhooks. To check for completion, repeat the - * same API call until you get an HTTP 307. Processing may take up to 30 - * minutes, depending on the size of data. Applications should poll the API - * using a backoff loop. Polling intervals should start at 5 seconds and - * double with each attempt: secondsToWait = 5 * 2 ^ (numberOfAttempts - 1) - * 307 Temporary Redirect – The shapefile is ready to download. This response - * contains a location header. The location is a pre-signed URL that is valid - * for no less than one hour. To download the file, perform a GET request to - * the URL in the location header. Do not apply OAuth signing or other - * authorization to this request - it will cause the call to fail. 406 Not - * Acceptable - A shapefile cannot be generated. Note the initial call for a - * shapefile may receive either a 202 or a 307 response, depending upon - * whether an up-to-date file already exists for the specified field - * operation. For a sample integration, see our . - * @generated from GET /fieldOps/{operationId} - */ - async getFieldops( - operationId: string, - params?: { - splitShapeFile?: boolean; - shapeType?: 'Point' | 'Polygon'; - resolution?: 'EachSection' | 'EachSensor' | 'OneHertz'; - }, - options?: RequestOptions - ): Promise { - const query = new URLSearchParams(); - if (params?.splitShapeFile !== undefined) - query.set('splitShapeFile', String(params.splitShapeFile)); - if (params?.shapeType !== undefined) query.set('shapeType', String(params.shapeType)); - if (params?.resolution !== undefined) query.set('resolution', String(params.resolution)); - const queryString = query.toString(); - const path = `/fieldOps/${operationId}${queryString ? `?${queryString}` : ''}`; - return this.client.get(this.spec, path, options); - } } // Re-export types for convenience diff --git a/src/api/fields.ts b/src/api/fields.ts index 39a41d4..317358b 100644 --- a/src/api/fields.ts +++ b/src/api/fields.ts @@ -17,6 +17,27 @@ export class FieldsApi { constructor(private readonly client: DeereClient) {} + /** + * View Clients that Own a Field + * @description View details about the client that owns the field. The + * response will link to the following resources: fields: View the field the + * client belongs to. farms: View the farms belonging to the client. + * owningOrganization: View the org that owns the field. + * @generated from GET /organizations/{orgID}/fields/{id}/clients + */ + async listClients( + orgID: string, + id: string, + options?: RequestOptions + ): Promise> { + const path = `/organizations/${orgID}/fields/${id}/clients`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** * Retrieve all of the Fields for an Organization * @generated from GET /organizations/{orgId}/fields @@ -161,27 +182,6 @@ export class FieldsApi { options ); } - - /** - * View Clients that Own a Field - * @description View details about the client that owns the field. The - * response will link to the following resources: fields: View the field the - * client belongs to. farms: View the farms belonging to the client. - * owningOrganization: View the org that owns the field. - * @generated from GET /organizations/{orgID}/fields/{id}/clients - */ - async listClients( - orgID: string, - id: string, - options?: RequestOptions - ): Promise> { - const path = `/organizations/${orgID}/fields/${id}/clients`; - return this.client.get>( - this.spec, - path, - options - ); - } } // Re-export types for convenience diff --git a/src/api/files.ts b/src/api/files.ts index 1b5aa7f..33b0be1 100644 --- a/src/api/files.ts +++ b/src/api/files.ts @@ -17,6 +17,51 @@ export class FilesApi { constructor(private readonly client: DeereClient) {} + /** + * List File Transfer Requests + * @description This resource allows the client to check the status of a file + * transfer request that has already been submitted. The response will contain + * links to the following resources: file: View the file for which the + * transfer was requested. machine: View the machine to which the transfer was + * requested. + * @generated from GET /fileTransfers + */ + async listFileTransfers( + params?: { source?: string }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.source !== undefined) query.set('source', String(params.source)); + const queryString = query.toString(); + const path = `/fileTransfers${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * View a File Transfer Request + * @description This resource allows the client to check the status of a file + * transfer request that has already been submitted. The response will contain + * links to the following resources: file: View the file for which the + * transfer was requested. machine: View the machine to which the transfer was + * requested. + * @generated from GET /fileTransfers/{id} + */ + async getFileTransfers( + id: string, + params?: { source?: string }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.source !== undefined) query.set('source', String(params.source)); + const queryString = query.toString(); + const path = `/fileTransfers/${id}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + /** * List Files * @description This resource retrieves the list of available files. For each @@ -99,6 +144,55 @@ export class FilesApi { await this.client.put(this.spec, path, data, options); } + /** + * Get File Transfer List by Organization + * @description This resource will retrieve list of all File Transfer by an + * Organization. The response will contain links to the following resources: + * file: View the file for which the transfer was requested. machine: View the + * machine to which the transfer was requested. + * @generated from GET /organizations/{orgId}/fileTransfers + */ + async listOrganizationsFileTransfers( + orgId: string, + params?: { source?: string }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.source !== undefined) query.set('source', String(params.source)); + const queryString = query.toString(); + const path = `/organizations/${orgId}/fileTransfers${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Submit a File Transfer Request + * @description This resource allows you to select a file and machine, and use + * the client software to submit a file transfer request. After that, + * MyJohnDeere API v3's infrastructure transfers the selected file to the + * selected machine, where it becomes available for the machine operator to + * use. The response links to the following resources: file: The file for + * which the transfer is being requested. machine: The machine to which the + * transfer is being requested. + * @generated from POST /organizations/{orgId}/fileTransfers + */ + async createFileTransfers( + orgId: string, + data: components['schemas']['FileTransfersPost'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/fileTransfers`; + return this.client.post( + this.spec, + path, + data, + options + ); + } + /** * List an Org's Files * @description View a list of an org's files. This resource allows for diff --git a/src/api/flags.ts b/src/api/flags.ts index 678942f..1459fc6 100644 --- a/src/api/flags.ts +++ b/src/api/flags.ts @@ -18,13 +18,14 @@ export class FlagsApi { constructor(private readonly client: DeereClient) {} /** - * List a flag by org id and Flag id - * @description This endpoint will return a flag for a given org and Flag id. - * @generated from GET /organizations/{orgId}/flags/{flagId} + * List flags for the field + * @description This resource will return a list of flag objects associated + * with the field. + * @generated from GET /organizations/{orgId}/fields/{fieldId}/flags */ - async get( + async list( orgId: string, - flagId: string, + fieldId: string, params?: { embed?: string; startTime?: string; @@ -32,13 +33,12 @@ export class FlagsApi { categoryIDs?: string; categoryNames?: string; recordFilter?: string; - flagScopes?: string; shapeTypes?: string; simple?: boolean; metadataOnly?: boolean; }, options?: RequestOptions - ): Promise { + ): Promise> { const query = new URLSearchParams(); if (params?.embed !== undefined) query.set('embed', String(params.embed)); if (params?.startTime !== undefined) query.set('startTime', String(params.startTime)); @@ -47,48 +47,24 @@ export class FlagsApi { if (params?.categoryNames !== undefined) query.set('categoryNames', String(params.categoryNames)); if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter)); - if (params?.flagScopes !== undefined) query.set('flagScopes', String(params.flagScopes)); if (params?.shapeTypes !== undefined) query.set('shapeTypes', String(params.shapeTypes)); if (params?.simple !== undefined) query.set('simple', String(params.simple)); if (params?.metadataOnly !== undefined) query.set('metadataOnly', String(params.metadataOnly)); const queryString = query.toString(); - const path = `/organizations/${orgId}/flags/${flagId}${queryString ? `?${queryString}` : ''}`; - return this.client.get(this.spec, path, options); - } - - /** - * Update flag by id - * @description This resource will update flag by Organization and Flag Id. - * @generated from PUT /organizations/{orgId}/flags/{flagId} - */ - async update( - orgId: string, - flagId: string, - data: components['schemas']['ValuesFlagIdPut'], - options?: RequestOptions - ): Promise { - const path = `/organizations/${orgId}/flags/${flagId}`; - await this.client.put(this.spec, path, data, options); - } - - /** - * Delete a flag for a given org - * @description This resource will delete a single flag based on its Id and - * org id - * @generated from DELETE /organizations/{orgId}/flags/{flagId} - */ - async delete(orgId: string, flagId: string, options?: RequestOptions): Promise { - const path = `/organizations/${orgId}/flags/${flagId}`; - await this.client.delete(this.spec, path, options); + const path = `/organizations/${orgId}/fields/${fieldId}/flags${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); } - /** - * View flags list - * @description This resource will return a Flags list for Organization. - * @generated from GET /organizations/{orgId}/flags + * Get all items (follows pagination automatically) + * @generated from GET /organizations/{orgId}/fields/{fieldId}/flags */ - async getFlags( + async listAll( orgId: string, + fieldId: string, params?: { embed?: string; startTime?: string; @@ -96,13 +72,12 @@ export class FlagsApi { categoryIDs?: string; categoryNames?: string; recordFilter?: string; - flagScopes?: string; shapeTypes?: string; simple?: boolean; metadataOnly?: boolean; }, options?: RequestOptions - ): Promise> { + ): Promise { const query = new URLSearchParams(); if (params?.embed !== undefined) query.set('embed', String(params.embed)); if (params?.startTime !== undefined) query.set('startTime', String(params.startTime)); @@ -111,13 +86,30 @@ export class FlagsApi { if (params?.categoryNames !== undefined) query.set('categoryNames', String(params.categoryNames)); if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter)); - if (params?.flagScopes !== undefined) query.set('flagScopes', String(params.flagScopes)); if (params?.shapeTypes !== undefined) query.set('shapeTypes', String(params.shapeTypes)); if (params?.simple !== undefined) query.set('simple', String(params.simple)); if (params?.metadataOnly !== undefined) query.set('metadataOnly', String(params.metadataOnly)); const queryString = query.toString(); - const path = `/organizations/${orgId}/flags${queryString ? `?${queryString}` : ''}`; - return this.client.get>( + const path = `/organizations/${orgId}/fields/${fieldId}/flags${queryString ? `?${queryString}` : ''}`; + return this.client.getAll(this.spec, path, options); + } + + /** + * List Flags Category Collection + * @description This resource will return a Flags Category Collection for + * Organization. + * @generated from GET /organizations/{orgId}/flagCategories + */ + async listFlagCategories( + orgId: string, + params?: { embed?: string }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${orgId}/flagCategories${queryString ? `?${queryString}` : ''}`; + return this.client.get>( this.spec, path, options @@ -125,28 +117,139 @@ export class FlagsApi { } /** - * Create a flag - * @description This resource will create a flag in the given organization. - * @generated from POST /organizations/{orgId}/flags + * Create a custom category + * @description This resource will create a custom category in the given + * organization. + * @generated from POST /organizations/{orgId}/flagCategories */ - async create( + async createFlagCategories( orgId: string, - data: components['schemas']['ValuesFlagIdPut'], + data: components['schemas']['PutResponse'], options?: RequestOptions ): Promise { - const path = `/organizations/${orgId}/flags`; + const path = `/organizations/${orgId}/flagCategories`; await this.client.post(this.spec, path, data, options); } /** - * List flags for the field - * @description This resource will return a list of flag objects associated - * with the field. - * @generated from GET /organizations/{orgId}/fields/{fieldId}/flags + * Get flag category by id + * @description This resource will return a flag category with the name + * translated into the specified language. The category can be a reference + * flagCategory, a master flagCategory created from a referenced flagCategory + * or a user-defined category. + * @generated from GET /organizations/{orgId}/flagCategories/{categoryId} */ - async list( + async getFlagCategories( + orgId: string, + categoryId: string, + params?: { embed?: string }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${orgId}/flagCategories/${categoryId}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + + /** + * Update flag category by organization and flag category Id + * @description This resource will update flag category by Id. + * @generated from PUT /organizations/{orgId}/flagCategories/{categoryId} + */ + async updateFlagCategories( + orgId: string, + categoryId: string, + data: components['schemas']['PutResponse'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/flagCategories/${categoryId}`; + await this.client.put(this.spec, path, data, options); + } + + /** + * Delete a flag category + * @description This resource will delete a single empty category based on the + * categoryId and orgId. + * @generated from DELETE /organizations/{orgId}/flagCategories/{categoryId} + */ + async deleteFlagCategories( + orgId: string, + categoryId: string, + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/flagCategories/${categoryId}`; + await this.client.delete(this.spec, path, options); + } + + /** + * List collection of FlagCategoryPreference + * @description This endpoint will return a collection of + * FlagCategoryPreference objects associated with the given flag category. The + * object with the key "default" is created automatically on the 1st access to + * the flagCategory object by a client. The default preference object shall be + * initialized with default values: prefKey: "default" hexColor: "#FFFFFF" + * @generated from GET /organizations/{orgId}/flagCategories/{categoryId}/flagCategoryPreferences + */ + async listFlagCategoryPreferences( + orgId: string, + categoryId: string, + params?: { prefKey?: string }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.prefKey !== undefined) query.set('prefKey', String(params.prefKey)); + const queryString = query.toString(); + const path = `/organizations/${orgId}/flagCategories/${categoryId}/flagCategoryPreferences${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * View preferences object for a category + * @description This resource will return the preferences object for the given + * flag category and org + * @generated from GET /organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId} + */ + async getFlagCategoryPreferences( + orgId: string, + flagCategoryPreferencesId: string, + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/flagCategoryPreferences/${flagCategoryPreferencesId}`; + return this.client.get( + this.spec, + path, + options + ); + } + + /** + * Update flag category preferences + * @description This resource will update flag category preferences by Id and + * Org + * @generated from PUT /organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId} + */ + async updateFlagCategoryPreferences( + orgId: string, + flagCategoryPreferencesId: string, + data: components['schemas']['FlagCategoryPreference'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/flagCategoryPreferences/${flagCategoryPreferencesId}`; + await this.client.put(this.spec, path, data, options); + } + + /** + * View flags list + * @description This resource will return a Flags list for Organization. + * @generated from GET /organizations/{orgId}/flags + */ + async getFlags( orgId: string, - fieldId: string, params?: { embed?: string; startTime?: string; @@ -154,6 +257,7 @@ export class FlagsApi { categoryIDs?: string; categoryNames?: string; recordFilter?: string; + flagScopes?: string; shapeTypes?: string; simple?: boolean; metadataOnly?: boolean; @@ -168,24 +272,41 @@ export class FlagsApi { if (params?.categoryNames !== undefined) query.set('categoryNames', String(params.categoryNames)); if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter)); + if (params?.flagScopes !== undefined) query.set('flagScopes', String(params.flagScopes)); if (params?.shapeTypes !== undefined) query.set('shapeTypes', String(params.shapeTypes)); if (params?.simple !== undefined) query.set('simple', String(params.simple)); if (params?.metadataOnly !== undefined) query.set('metadataOnly', String(params.metadataOnly)); const queryString = query.toString(); - const path = `/organizations/${orgId}/fields/${fieldId}/flags${queryString ? `?${queryString}` : ''}`; + const path = `/organizations/${orgId}/flags${queryString ? `?${queryString}` : ''}`; return this.client.get>( this.spec, path, options ); } + /** - * Get all items (follows pagination automatically) - * @generated from GET /organizations/{orgId}/fields/{fieldId}/flags + * Create a flag + * @description This resource will create a flag in the given organization. + * @generated from POST /organizations/{orgId}/flags */ - async listAll( + async create( orgId: string, - fieldId: string, + data: components['schemas']['ValuesFlagIdPut'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/flags`; + await this.client.post(this.spec, path, data, options); + } + + /** + * List a flag by org id and Flag id + * @description This endpoint will return a flag for a given org and Flag id. + * @generated from GET /organizations/{orgId}/flags/{flagId} + */ + async get( + orgId: string, + flagId: string, params?: { embed?: string; startTime?: string; @@ -193,12 +314,13 @@ export class FlagsApi { categoryIDs?: string; categoryNames?: string; recordFilter?: string; + flagScopes?: string; shapeTypes?: string; simple?: boolean; metadataOnly?: boolean; }, options?: RequestOptions - ): Promise { + ): Promise { const query = new URLSearchParams(); if (params?.embed !== undefined) query.set('embed', String(params.embed)); if (params?.startTime !== undefined) query.set('startTime', String(params.startTime)); @@ -207,12 +329,39 @@ export class FlagsApi { if (params?.categoryNames !== undefined) query.set('categoryNames', String(params.categoryNames)); if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter)); + if (params?.flagScopes !== undefined) query.set('flagScopes', String(params.flagScopes)); if (params?.shapeTypes !== undefined) query.set('shapeTypes', String(params.shapeTypes)); if (params?.simple !== undefined) query.set('simple', String(params.simple)); if (params?.metadataOnly !== undefined) query.set('metadataOnly', String(params.metadataOnly)); const queryString = query.toString(); - const path = `/organizations/${orgId}/fields/${fieldId}/flags${queryString ? `?${queryString}` : ''}`; - return this.client.getAll(this.spec, path, options); + const path = `/organizations/${orgId}/flags/${flagId}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + + /** + * Update flag by id + * @description This resource will update flag by Organization and Flag Id. + * @generated from PUT /organizations/{orgId}/flags/{flagId} + */ + async update( + orgId: string, + flagId: string, + data: components['schemas']['ValuesFlagIdPut'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${orgId}/flags/${flagId}`; + await this.client.put(this.spec, path, data, options); + } + + /** + * Delete a flag for a given org + * @description This resource will delete a single flag based on its Id and + * org id + * @generated from DELETE /organizations/{orgId}/flags/{flagId} + */ + async delete(orgId: string, flagId: string, options?: RequestOptions): Promise { + const path = `/organizations/${orgId}/flags/${flagId}`; + await this.client.delete(this.spec, path, options); } } diff --git a/src/api/machine-locations.ts b/src/api/machine-locations.ts index 94e20cf..a08e74e 100644 --- a/src/api/machine-locations.ts +++ b/src/api/machine-locations.ts @@ -17,6 +17,33 @@ export class MachineLocationsApi { constructor(private readonly client: DeereClient) {} + /** + * Machine Breadcrumbs + * @description This resource allows the client to get the following details + * of a Machine: SpeedFuel LevelDirection of Machine (heading)Machine + * StateMachine State Defined Type IdCorrelation IdLocation + * AltitudeOriginCreated TimeStamp + * @generated from GET /machines/{principalId}/breadcrumbs + */ + async listBreadcrumbs( + principalId: string, + params?: { orgId?: string; startDate?: string; endDate?: string; lastKnown?: boolean }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.orgId !== undefined) query.set('orgId', String(params.orgId)); + if (params?.startDate !== undefined) query.set('startDate', String(params.startDate)); + if (params?.endDate !== undefined) query.set('endDate', String(params.endDate)); + if (params?.lastKnown !== undefined) query.set('lastKnown', String(params.lastKnown)); + const queryString = query.toString(); + const path = `/machines/${principalId}/breadcrumbs${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + /** * Machine Location History * @description The machine location service allows the client to view a list diff --git a/src/api/map-layers.ts b/src/api/map-layers.ts index 07690ab..3b9c50f 100644 --- a/src/api/map-layers.ts +++ b/src/api/map-layers.ts @@ -17,6 +17,164 @@ export class MapLayersApi { constructor(private readonly client: DeereClient) {} + /** + * View/Download a File Resource + * @description This resource allows the client to view or download a File + * Resource. To view a File Resource's metadata, set the + * application/vnd.deere.axiom.v3+json Accept Header. To download the File + * Resource itself, choose a zip or octet-stream Accept Header. + * @generated from GET /fileResources/{id} + */ + async getFileResources(id: string, options?: RequestOptions): Promise { + const path = `/fileResources/${id}`; + return this.client.get(this.spec, path, options); + } + + /** + * Upload a File Resource + * @description Uploads a binary File Resource for a given Map Layer. The + * client must first create a File Resource ID by calling POST + * /mapLayers/{id}/fileResources API before uploading. Check the status of the + * upload by requesting the File Resource's targetResource Link. + * @generated from PUT /fileResources/{id} + */ + async updateFileResources(id: string, options?: RequestOptions): Promise { + const path = `/fileResources/${id}`; + await this.client.put(this.spec, path, options); + } + + /** + * Delete a File Resource + * @description Deletes a file resource. + * @generated from DELETE /fileResources/{id} + */ + async deleteFileResources(id: string, options?: RequestOptions): Promise { + const path = `/fileResources/${id}`; + await this.client.delete(this.spec, path, options); + } + + /** + * View a Map Layer Summary + * @description Returns a specific Map Layer Summary resource. + * @generated from GET /mapLayerSummaries/{id} + */ + async get( + id: string, + options?: RequestOptions + ): Promise { + const path = `/mapLayerSummaries/${id}`; + return this.client.get( + this.spec, + path, + options + ); + } + + /** + * Delete a Map Layer Summary + * @description Deletes a Map Layer Summary and its underlying Map Layer and + * File Resource resources. + * @generated from DELETE /mapLayerSummaries/{id} + */ + async delete(id: string, options?: RequestOptions): Promise { + const path = `/mapLayerSummaries/${id}`; + await this.client.delete(this.spec, path, options); + } + + /** + * List Map Layers + * @description This resource lists all Map Layers for a specific Map Layer + * Summary. Note: This API does not support eTags. + * @generated from GET /mapLayerSummaries/{id}/mapLayers + */ + async listMapLayers( + id: string, + params?: { includePartialLayers?: boolean }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.includePartialLayers !== undefined) + query.set('includePartialLayers', String(params.includePartialLayers)); + const queryString = query.toString(); + const path = `/mapLayerSummaries/${id}/mapLayers${queryString ? `?${queryString}` : ''}`; + return this.client.get>(this.spec, path, options); + } + + /** + * Create a Map Layer + * @description Creates a new Map Layer resource. + * @generated from POST /mapLayerSummaries/{id}/mapLayers + */ + async createMapLayers( + id: string, + data: components['schemas']['PostResponse_MapLayers'], + options?: RequestOptions + ): Promise { + const path = `/mapLayerSummaries/${id}/mapLayers`; + await this.client.post(this.spec, path, data, options); + } + + /** + * View a Map Layer + * @description Returns a specific Map Layer resource. + * @generated from GET /mapLayers/{id} + */ + async getMapLayers( + id: string, + options?: RequestOptions + ): Promise { + const path = `/mapLayers/${id}`; + return this.client.get(this.spec, path, options); + } + + /** + * Delete a Map Layer + * @description Deletes a Map Layer and its underlying File Resource. + * @generated from DELETE /mapLayers/{id} + */ + async deleteMapLayers(id: string, options?: RequestOptions): Promise { + const path = `/mapLayers/${id}`; + await this.client.delete(this.spec, path, options); + } + + /** + * Get a Map Layer File Resource + * @description This resource will return the File Resource associated to the + * specified Map Layer. Note: This API does not support eTags. + * @generated from GET /mapLayers/{id}/fileResources + */ + async listFileResources( + id: string, + options?: RequestOptions + ): Promise> { + const path = `/mapLayers/${id}/fileResources`; + return this.client.get>(this.spec, path, options); + } + + /** + * Create a Map Layer File Resource + * @description This resource will create a new File Resource for a Map Layer. + * @generated from POST /mapLayers/{id}/fileResources + */ + async createFileResources( + id: string, + data: components['schemas']['RequestDetails'], + options?: RequestOptions + ): Promise { + const path = `/mapLayers/${id}/fileResources`; + await this.client.post(this.spec, path, data, options); + } + + /** + * Extract Map Layer Image + * @description Returns the image file associated with the Map Layer resource. + * @generated from GET /mapLayers/{mapLayerId} + */ + async getMapLayersByMapLayerId(mapLayerId: string, options?: RequestOptions): Promise { + const path = `/mapLayers/${mapLayerId}`; + return this.client.get(this.spec, path, options); + } + /** * List Map Layer Summaries * @description This resource will list all Map Layer Summaries for a @@ -70,34 +228,6 @@ export class MapLayersApi { const path = `/organizations/${orgId}/fields/${id}/mapLayerSummaries`; await this.client.post(this.spec, path, data, options); } - - /** - * View a Map Layer Summary - * @description Returns a specific Map Layer Summary resource. - * @generated from GET /mapLayerSummaries/{id} - */ - async get( - id: string, - options?: RequestOptions - ): Promise { - const path = `/mapLayerSummaries/${id}`; - return this.client.get( - this.spec, - path, - options - ); - } - - /** - * Delete a Map Layer Summary - * @description Deletes a Map Layer Summary and its underlying Map Layer and - * File Resource resources. - * @generated from DELETE /mapLayerSummaries/{id} - */ - async delete(id: string, options?: RequestOptions): Promise { - const path = `/mapLayerSummaries/${id}`; - await this.client.delete(this.spec, path, options); - } } // Re-export types for convenience diff --git a/src/api/notifications.ts b/src/api/notifications.ts index d693692..8d3dea7 100644 --- a/src/api/notifications.ts +++ b/src/api/notifications.ts @@ -17,19 +17,6 @@ export class NotificationsApi { constructor(private readonly client: DeereClient) {} - /** - * Fetch single notification. - * @description Retrieve a single notification by source event. - * @generated from GET /notifications/{sourceEvent} - */ - async get( - sourceEvent: string, - options?: RequestOptions - ): Promise { - const path = `/notifications/${sourceEvent}`; - return this.client.get(this.spec, path, options); - } - /** * Create Notification Event * @description This resource creates an event that Operations Center will use @@ -57,6 +44,19 @@ export class NotificationsApi { await this.client.delete(this.spec, path, options); } + /** + * Fetch single notification. + * @description Retrieve a single notification by source event. + * @generated from GET /notifications/{sourceEvent} + */ + async get( + sourceEvent: string, + options?: RequestOptions + ): Promise { + const path = `/notifications/${sourceEvent}`; + return this.client.get(this.spec, path, options); + } + /** * Search Notifications for an Organization * @description This endpoint will let you search Notifications based on diff --git a/src/api/products.ts b/src/api/products.ts index 5452a47..1d46004 100644 --- a/src/api/products.ts +++ b/src/api/products.ts @@ -17,6 +17,615 @@ export class ProductsApi { constructor(private readonly client: DeereClient) {} + /** + * List of available active ingredients + * @description Returns a list of all available active ingredients. + * @generated from GET /activeIngredients + */ + async listActiveIngredients( + params?: { entityType?: 'CHEMICAL' | 'FERTILIZER' }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.entityType !== undefined) query.set('entityType', String(params.entityType)); + const queryString = query.toString(); + const path = `/activeIngredients${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Reference list of all known chemicals + * @description List of all chemicals from industry data sources, such as + * CDMS. + * @generated from GET /chemicals + */ + async listChemicals( + params?: { + searchString?: string; + chemicalType?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + productName?: string; + brandName?: string; + registration?: string; + sourceSystemProductId?: string; + countryCode?: string; + }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.searchString !== undefined) query.set('searchString', String(params.searchString)); + if (params?.chemicalType !== undefined) query.set('chemicalType', String(params.chemicalType)); + if (params?.productName !== undefined) query.set('productName', String(params.productName)); + if (params?.brandName !== undefined) query.set('brandName', String(params.brandName)); + if (params?.registration !== undefined) query.set('registration', String(params.registration)); + if (params?.sourceSystemProductId !== undefined) + query.set('sourceSystemProductId', String(params.sourceSystemProductId)); + if (params?.countryCode !== undefined) query.set('countryCode', String(params.countryCode)); + const queryString = query.toString(); + const path = `/chemicals${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Get a single reference chemical + * @description Single chemical from industry data sources, such as CDMS. + * @generated from GET /chemicals/{erid} + */ + async getChemicals( + erid: string, + options?: RequestOptions + ): Promise { + const path = `/chemicals/${erid}`; + return this.client.get(this.spec, path, options); + } + + /** + * Adds a single reference chemical to organization + * @description This endpoint will associate a reference chemical to your + * organization from the global reference list. The reference chemicals are + * immutable, however, they can still be archived or made available. If a + * reference chemical is created as a carrier, it cannot be changed + * thereafter. The registration of a reference chemical can also be updated. + * The response headers from the GET endpoints will include the attributes + * that can be overridden. + * @generated from POST /chemicals/{erid}/associateToOrg/{organizationId} + */ + async createChemicalsAssociateToOrg( + erid: string, + organizationId: string, + data: components['schemas']['PostReferenceChemical'], + options?: RequestOptions + ): Promise { + const path = `/chemicals/${erid}/associateToOrg/${organizationId}`; + await this.client.post(this.spec, path, data, options); + } + + /** + * Reference list of documents for an associated chemical + * @description List of all the documents for a chemical from industry data + * sources, such as CDMS. + * @generated from GET /chemicals/{erid}/documents + */ + async listChemicalsDocuments( + erid: string, + options?: RequestOptions + ): Promise> { + const path = `/chemicals/${erid}/documents`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Sets organizational attributes such as isCarrier, archived, registration, etc + * @description This endpoint will set attribute overrides while importing a + * reference chemical to your organization. The reference chemicals are + * immutable, however, they can still be archived or made available. Once set + * to true, the carrier attribute cannot be set to false. The registration of + * a reference chemical can be updated. The response headers from the GET + * endpoints will include the attributes that can be overridden. + * @generated from PATCH /chemicals/{erid}/setOverridesForOrg/{organizationId} + */ + async patchChemicalsSetOverridesForOrg( + erid: string, + organizationId: string, + data: components['schemas']['CommonReferenceChemical'], + options?: RequestOptions + ): Promise { + const path = `/chemicals/${erid}/setOverridesForOrg/${organizationId}`; + await this.client.patch(this.spec, path, data, options); + } + + /** + * Document details w/ pdf file + * @description Document details for a product with embedded pdf file + * (gzip+base64). + * @generated from GET /documents/{erid} + */ + async getDocuments( + erid: string, + options?: RequestOptions + ): Promise { + const path = `/documents/${erid}`; + return this.client.get(this.spec, path, options); + } + + /** + * Reference list of all known fertilizers + * @description List of all fertilizers from industry data sources, such as + * CDMS. + * @generated from GET /fertilizers + */ + async listFertilizers( + params?: { + searchString?: string; + fertilizerType?: 'FERTILIZER' | 'MANURE'; + productName?: string; + brandName?: string; + registration?: string; + sourceSystemProductId?: string; + countryCode?: string; + }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.searchString !== undefined) query.set('searchString', String(params.searchString)); + if (params?.fertilizerType !== undefined) + query.set('fertilizerType', String(params.fertilizerType)); + if (params?.productName !== undefined) query.set('productName', String(params.productName)); + if (params?.brandName !== undefined) query.set('brandName', String(params.brandName)); + if (params?.registration !== undefined) query.set('registration', String(params.registration)); + if (params?.sourceSystemProductId !== undefined) + query.set('sourceSystemProductId', String(params.sourceSystemProductId)); + if (params?.countryCode !== undefined) query.set('countryCode', String(params.countryCode)); + const queryString = query.toString(); + const path = `/fertilizers${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Single reference fertilizer + * @description Single fertilizer from industry data sources, such as CDMS. + * @generated from GET /fertilizers/{erid} + */ + async getFertilizers( + erid: string, + options?: RequestOptions + ): Promise { + const path = `/fertilizers/${erid}`; + return this.client.get(this.spec, path, options); + } + + /** + * Adds a single reference fertilizer to organization + * @description This endpoint will associate a reference fertilizer to your + * organization from the global reference list. The reference fertilizers are + * immutable, however, they can still be archived or made available. If a + * reference fertilizer is created as a carrier, it cannot be changed + * thereafter. The registration of a reference fertilizer can also be updated. + * The response headers from the GET endpoints will include the attributes + * that can be overridden. + * @generated from POST /fertilizers/{erid}/associateToOrg/{organizationId} + */ + async createFertilizersAssociateToOrg( + erid: string, + organizationId: string, + data: components['schemas']['PostReferenceFertilizer'], + options?: RequestOptions + ): Promise { + const path = `/fertilizers/${erid}/associateToOrg/${organizationId}`; + await this.client.post(this.spec, path, data, options); + } + + /** + * Reference list of documents for an associated fertilizer + * @description List of all the documents for a fertilizer from industry data + * sources, such as CDMS. + * @generated from GET /fertilizers/{erid}/documents + */ + async listFertilizersDocuments( + erid: string, + options?: RequestOptions + ): Promise> { + const path = `/fertilizers/${erid}/documents`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Sets organizational attributes such as isCarrier, archived, registration, etc + * @description This endpoint will set attribute overrides while importing a + * reference fertilizer to your organization. The reference fertilizers are + * immutable, however, they can still be archived or made available. Once set + * to true, the carrier attribute cannot be set to false. The registration of + * a reference fertilizer can be updated. The response headers from the GET + * endpoints will include the attributes that can be overridden. + * @generated from PATCH /fertilizers/{erid}/setOverridesForOrg/{organizationId} + */ + async patchFertilizersSetOverridesForOrg( + erid: string, + organizationId: string, + data: components['schemas']['CommonPostReferenceFertilizer'], + options?: RequestOptions + ): Promise { + const path = `/fertilizers/${erid}/setOverridesForOrg/${organizationId}`; + await this.client.patch(this.spec, path, data, options); + } + + /** + * Retrieve unified list of custom and reference chemicals in your organization. + * @generated from GET /organizations/{organizationId}/chemicals + */ + async listOrganizationsChemicals( + organizationId: string, + params?: { + status?: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; + embed?: 'activeIngredients' | 'availableRegistrations' | 'documents' | 'showMergedProducts'; + }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.status !== undefined) query.set('status', String(params.status)); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/chemicals${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Add chemical + * @description This endpoint will add a custom chemical into the + * organization. Its name+type must be unique within your organization, unless + * carrier is set to true. If carrier is set to true, then type is + * disregarded. A chemical's carrier property cannot be changed to false once + * set to true. A chemical cannot be archived if it is in an active tank mix + * or dry blend. If a chemical is marked as archived and is used in a tank + * mix/dry blend, if the tank mix/dry blend is made available, then this + * chemical will also be made available. If passing in a liquid weight or + * weight unit, material classification should be set to LIQUID. Additionally, + * POST can be used for supporting offline creation of chemicals from e.g. a + * mobile app, by sending a payload with an `id` generated by the client. If + * an `id` is present in the payload, the service checks the database for that + * `id`. In case no record is found, a new one is created with that `id` and + * the request is responded with 201. Otherwise no creation happens and the + * request is responded with 409 and error message that a resource with that + * `id` already exists. + * @generated from POST /organizations/{organizationId}/chemicals + */ + async createChemicals( + organizationId: string, + data: components['schemas']['PostChemical'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/chemicals`; + await this.client.post(this.spec, path, data, options); + } + + /** + * Retrieve a specific chemical from an organization's asset list. + * @generated from GET /organizations/{organizationId}/chemicals/{erid} + */ + async getOrganizationsChemicals( + organizationId: string, + erid: string, + params?: { + embed?: 'activeIngredients' | 'availableRegistrations' | 'documents' | 'showMergedProducts'; + }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/chemicals/${erid}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + + /** + * Update a single chemical + * @description Allows the custom chemical to be renamed, made + * active/archived, or flagged as a carrier. + * @generated from PUT /organizations/{organizationId}/chemicals/{erid} + */ + async updateChemicals( + organizationId: string, + erid: string, + data: components['schemas']['PutChemical'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/chemicals/${erid}`; + await this.client.put(this.spec, path, data, options); + } + + /** + * Retrieve dry blends for an org + * @generated from GET /organizations/{organizationId}/dryBlends + */ + async listDryBlends( + organizationId: string, + params?: { embed?: 'product' }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/dryBlends${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Create a dry blend + * @description Add a dry blend to the asset list of an organization. Any + * chemicals or fertilizers in the dry blend must exist in the organization + * before the dry blend is persisted. The name of the dry blend must be unique + * in your organization. Additionally, POST can be used for supporting offline + * creation of dry blends from e.g. a mobile app, by sending a payload with an + * `erid` generated by the client. If an `erid` is present in the payload, the + * service checks the database for that `erid`. In case no record is found, a + * new one is created with that `erid` and the request is responded with 201. + * Otherwise no creation happens and the request is responded with 409 and + * error message that a resource with that `erid` already exists. + * @generated from POST /organizations/{organizationId}/dryBlends + */ + async createDryBlends( + organizationId: string, + data: components['schemas']['PostDryBlend'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/dryBlends`; + await this.client.post(this.spec, path, data, options); + } + + /** + * Retrieves a specific dry blend + * @generated from GET /organizations/{organizationId}/dryBlends/{erid} + */ + async getDryBlends( + organizationId: string, + erid: string, + params?: { embed?: 'product' }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/dryBlends/${erid}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + + /** + * Update a dry blend + * @description Allows updates to be made to the name, archival status, and + * components of a dry blend. + * @generated from PUT /organizations/{organizationId}/dryBlends/{erid} + */ + async updateDryBlends( + organizationId: string, + erid: string, + data: components['schemas']['PostDryBlend'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/dryBlends/${erid}`; + await this.client.put(this.spec, path, data, options); + } + + /** + * Retrieve unified list of custom and reference fertilizers in your organization. + * @generated from GET /organizations/{organizationId}/fertilizers + */ + async listOrganizationsFertilizers( + organizationId: string, + params?: { + status?: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; + embed?: 'activeIngredients' | 'availableRegistrations' | 'documents' | 'showMergedProducts'; + }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.status !== undefined) query.set('status', String(params.status)); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/fertilizers${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Add fertilizer + * @description This endpoint will add a custom fertilizer into the + * organization. Its name+type must be unique within your organization, unless + * carrier is set to true. If carrier is set to true, then type is + * disregarded. A fertilizer's carrier property cannot be changed to false + * once set to true. A fertilizer cannot be archived if it is in an active + * tank mix or dry blend. If a fertilizer is marked as archived and is used in + * a tank mix/dry blend, if the tank mix/dry blend is made available, then + * this fertilizer will also be made available. If passing in a liquid weight + * or weight unit, material classification should be set to LIQUID. + * Additionally, POST can be used for supporting offline creation of + * fertilizers from e.g. a mobile app, by sending a payload with an `id` + * generated by the client. If an `id` is present in the payload, the service + * checks the database for that `id`. In case no record is found, a new one is + * created with that `id` and the request is responded with 201. Otherwise no + * creation happens and the request is responded with 409 and error message + * that a resource with that `id` already exists. + * @generated from POST /organizations/{organizationId}/fertilizers + */ + async createFertilizers( + organizationId: string, + data: components['schemas']['PostFertilizer'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/fertilizers`; + await this.client.post(this.spec, path, data, options); + } + + /** + * Retrieve a specific fertilizer from an organization's asset list. + * @generated from GET /organizations/{organizationId}/fertilizers/{erid} + */ + async getOrganizationsFertilizers( + organizationId: string, + erid: string, + params?: { + embed?: 'activeIngredients' | 'availableRegistrations' | 'documents' | 'showMergedProducts'; + }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/fertilizers/${erid}${queryString ? `?${queryString}` : ''}`; + return this.client.get( + this.spec, + path, + options + ); + } + + /** + * Update a single fertilizer + * @description Allows the fertilizer custom to be renamed, made + * active/archived, or flagged as a carrier. + * @generated from PUT /organizations/{organizationId}/fertilizers/{erid} + */ + async updateFertilizers( + organizationId: string, + erid: string, + data: components['schemas']['PutFertilizer'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/fertilizers/${erid}`; + await this.client.put(this.spec, path, data, options); + } + + /** + * Retrieve product companies for an org. + * @description A unified list of custom and reference product companies in + * your organization. + * @generated from GET /organizations/{organizationId}/productCompanies + */ + async listProductCompanies( + organizationId: string, + options?: RequestOptions + ): Promise> { + const path = `/organizations/${organizationId}/productCompanies`; + return this.client.get>(this.spec, path, options); + } + + /** + * Retrieve tank mixes for an org + * @description This endpoint will retrieve tank mixes for an org. + * @generated from GET /organizations/{organizationId}/tankMixes + */ + async listTankMixes( + organizationId: string, + params?: { embed?: 'chemical'; recordFilter?: string }, + options?: RequestOptions + ): Promise> { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + if (params?.recordFilter !== undefined) query.set('recordFilter', String(params.recordFilter)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/tankMixes${queryString ? `?${queryString}` : ''}`; + return this.client.get>( + this.spec, + path, + options + ); + } + + /** + * Create a tank mix + * @description Add a tank mix to the asset list of an organization. Any + * chemicals or fertilizers in the tank mix must exist in the organization + * before the tank mix is persisted. The name of the tank mix must be unique + * in your organization. Additionally, POST can be used for supporting offline + * creation of tank mixes from e.g. a mobile app, by sending a payload with an + * `orgUniqueErid` generated by the client. If an `orgUniqueErid` is present + * in the payload, the service checks the database for that `orgUniqueErid`. + * In case no record is found, a new one is created with that `orgUniqueErid` + * and the request is responded with 201. Otherwise no creation happens and + * the request is responded with 409 and error message that a resource with + * that `orgUniqueErid` already exists. + * @generated from POST /organizations/{organizationId}/tankMixes + */ + async createTankMixes( + organizationId: string, + data: components['schemas']['TankMix'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/tankMixes`; + await this.client.post(this.spec, path, data, options); + } + + /** + * View a specific tank mix + * @description This endpoint will retrieve a specific tank mix. + * @generated from GET /organizations/{organizationId}/tankMixes/{id} + */ + async getTankMixes( + organizationId: string, + id: string, + params?: { embed?: string }, + options?: RequestOptions + ): Promise { + const query = new URLSearchParams(); + if (params?.embed !== undefined) query.set('embed', String(params.embed)); + const queryString = query.toString(); + const path = `/organizations/${organizationId}/tankMixes/${id}${queryString ? `?${queryString}` : ''}`; + return this.client.get(this.spec, path, options); + } + + /** + * Update a tank mix + * @description This endpoint allows to update the metadata and the + * composition of a tank mix. + * @generated from PUT /organizations/{organizationId}/tankMixes/{id} + */ + async updateTankMixes( + organizationId: string, + id: string, + data: components['schemas']['TankMix'], + options?: RequestOptions + ): Promise { + const path = `/organizations/${organizationId}/tankMixes/${id}`; + await this.client.put(this.spec, path, data, options); + } + /** * View varieties for an org * @description This endpoint will retrieve a collection of varieties for the @@ -121,25 +730,6 @@ export class ProductsApi { await this.client.put(this.spec, path, data, options); } - /** - * Adds a single reference variety to organization - * @description This endpoint will associate a reference variety to your - * organization from the global reference list. The reference varieties are - * immutable, however, they can still be archived or made available. The - * response headers from the GET endpoints will include the attributes that - * can be overridden. - * @generated from POST /varieties/{erid}/associateToOrg/{organizationId} - */ - async createAssociatetoorg( - erid: string, - organizationId: string, - data: components['schemas']['ReferenceProductPointerRequest'], - options?: RequestOptions - ): Promise { - const path = `/varieties/${erid}/associateToOrg/${organizationId}`; - await this.client.post(this.spec, path, data, options); - } - /** * Search reference catalog varieties * @description This endpoint searches the reference catalog for varieties @@ -189,6 +779,25 @@ export class ProductsApi { return this.client.get(this.spec, path, options); } + /** + * Adds a single reference variety to organization + * @description This endpoint will associate a reference variety to your + * organization from the global reference list. The reference varieties are + * immutable, however, they can still be archived or made available. The + * response headers from the GET endpoints will include the attributes that + * can be overridden. + * @generated from POST /varieties/{erid}/associateToOrg/{organizationId} + */ + async createAssociatetoorg( + erid: string, + organizationId: string, + data: components['schemas']['ReferenceProductPointerRequest'], + options?: RequestOptions + ): Promise { + const path = `/varieties/${erid}/associateToOrg/${organizationId}`; + await this.client.post(this.spec, path, data, options); + } + /** * Reference list of documents for an associated seed variety. * @description List of all the documents for a variety from industry data diff --git a/src/api/webhook.ts b/src/api/webhook.ts index 6c0ccc4..5cb8cc7 100644 --- a/src/api/webhook.ts +++ b/src/api/webhook.ts @@ -17,6 +17,34 @@ export class WebhookApi { constructor(private readonly client: DeereClient) {} + /** + * Get Event Subscription Delivery + * @description This resource will return your event subscription delivery + * status + * @generated from GET /eventSubscriptionDelivery + */ + async listEventSubscriptionDelivery( + options?: RequestOptions + ): Promise> { + const path = `/eventSubscriptionDelivery`; + return this.client.get< + PaginatedResponse + >(this.spec, path, options); + } + + /** + * Update Event Subscription Delivery + * @description This resource will update an event subscription delivery + * @generated from PATCH /eventSubscriptionDelivery + */ + async patchEventSubscriptionDelivery( + data: components['schemas']['SubscriptionUpdateResponse'], + options?: RequestOptions + ): Promise { + const path = `/eventSubscriptionDelivery`; + await this.client.patch(this.spec, path, data, options); + } + /** * Get Event Subscriptions * @description This resource will return a paged list of event subscriptions diff --git a/src/hateoas-map.ts b/src/hateoas-map.ts index bbb70ac..3648bd0 100644 --- a/src/hateoas-map.ts +++ b/src/hateoas-map.ts @@ -30,6 +30,11 @@ export const HATEOAS_MAP: Record = { rel: 'locations', parentSpec: 'assets', }, + '/chemicals/{erid}/documents': { + parentPath: '/chemicals/{erid}', + rel: 'documents', + parentSpec: 'products', + }, '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes': { parentPath: '/equipmentMakes/{equipmentMakeId}', rel: 'equipmentISGTypes', @@ -45,21 +50,66 @@ export const HATEOAS_MAP: Record = { rel: 'equipmentTypes', parentSpec: 'equipment', }, + '/fertilizers/{erid}/documents': { + parentPath: '/fertilizers/{erid}', + rel: 'documents', + parentSpec: 'products', + }, '/fieldOperations/{operationId}/boundary': { parentPath: '/fieldOperations/{operationId}', rel: 'boundary', parentSpec: 'field-operations-api', }, + '/fieldOperations/{operationId}/measurementTypes': { + parentPath: '/fieldOperations/{operationId}', + rel: 'measurementTypes', + parentSpec: 'field-operations-api', + }, + '/mapLayers/{id}/fileResources': { + parentPath: '/mapLayers/{id}', + rel: 'fileResources', + parentSpec: 'map-layers', + }, + '/mapLayerSummaries/{id}/mapLayers': { + parentPath: '/mapLayerSummaries/{id}', + rel: 'mapLayers', + parentSpec: 'map-layers', + }, + '/organizations/{organizationId}/chemicals': { + parentPath: '/organizations/{organizationId}', + rel: 'chemicals', + parentSpec: 'organizations', + }, '/organizations/{organizationId}/cropTypes': { parentPath: '/organizations/{organizationId}', rel: 'cropTypes', parentSpec: 'organizations', }, + '/organizations/{organizationId}/dryBlends': { + parentPath: '/organizations/{organizationId}', + rel: 'dryBlends', + parentSpec: 'organizations', + }, '/organizations/{organizationId}/equipment': { parentPath: '/organizations/{organizationId}', rel: 'equipment', parentSpec: 'organizations', }, + '/organizations/{organizationId}/fertilizers': { + parentPath: '/organizations/{organizationId}', + rel: 'fertilizers', + parentSpec: 'organizations', + }, + '/organizations/{organizationId}/productCompanies': { + parentPath: '/organizations/{organizationId}', + rel: 'productCompanies', + parentSpec: 'organizations', + }, + '/organizations/{organizationId}/tankMixes': { + parentPath: '/organizations/{organizationId}', + rel: 'tankMixes', + parentSpec: 'organizations', + }, '/organizations/{organizationId}/varieties': { parentPath: '/organizations/{organizationId}', rel: 'varieties', @@ -155,6 +205,21 @@ export const HATEOAS_MAP: Record = { rel: 'files', parentSpec: 'organizations', }, + '/organizations/{orgId}/fileTransfers': { + parentPath: '/organizations/{orgId}', + rel: 'fileTransfers', + parentSpec: 'organizations', + }, + '/organizations/{orgId}/flagCategories': { + parentPath: '/organizations/{orgId}', + rel: 'flagCategories', + parentSpec: 'organizations', + }, + '/organizations/{orgId}/flagCategories/{categoryId}/flagCategoryPreferences': { + parentPath: '/organizations/{orgId}/flagCategories/{categoryId}', + rel: 'flagCategoryPreferences', + parentSpec: 'flags', + }, '/organizations/{orgId}/flags': { parentPath: '/organizations/{orgId}', rel: 'flags', diff --git a/src/types/generated/assets.ts b/src/types/generated/assets.ts index 715f339..c6f5235 100644 --- a/src/types/generated/assets.ts +++ b/src/types/generated/assets.ts @@ -4,7 +4,7 @@ */ export interface paths { - '/organizations/{orgId}/assets': { + '/assetCatalog': { parameters: { query?: never; header?: never; @@ -12,16 +12,12 @@ export interface paths { cookie?: never; }; /** - * Get all assets - * @description This endpoint will retrieve all assets for an organization. + * Get Asset Catalog List + * @description This endpoint will retrieve the Asset Catalog List. */ - get: operations['getOrgAssets']; + get: operations['getAssetCatalog']; put?: never; - /** - * Create a new asset - * @description This endpoint will create a new asset. - */ - post: operations['postAsset']; + post?: never; delete?: never; options?: never; head?: never; @@ -132,7 +128,7 @@ export interface paths { patch?: never; trace?: never; }; - '/assetCatalog': { + '/organizations/{orgId}/assets': { parameters: { query?: never; header?: never; @@ -140,12 +136,16 @@ export interface paths { cookie?: never; }; /** - * Get Asset Catalog List - * @description This endpoint will retrieve the Asset Catalog List. + * Get all assets + * @description This endpoint will retrieve all assets for an organization. */ - get: operations['getAssetCatalog']; + get: operations['getOrgAssets']; put?: never; - post?: never; + /** + * Create a new asset + * @description This endpoint will create a new asset. + */ + post: operations['postAsset']; delete?: never; options?: never; head?: never; @@ -156,49 +156,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - AssetCatalogItem: { - /** @example ContributedCatalogItem */ - '@type'?: string; - assetCategory: components['schemas']['AssetCategory']; - assetType: components['schemas']['AssetType']; - assetSubType: components['schemas']['AssetSubType']; - links?: { - /** - * @description Links relavent to exploring the collection. - * @example self - */ - rel?: string; - /** - * Format: uri - * @description The URI to the related resource. - * @example https://sandboxapi.deere.com/platform/resources/61265 - */ - uri?: string; - }[]; - }; - MeasurementData: { - /** - * @description representation for which to capture data sandardized via the [ADAPT Representation System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/RepresentationSystem.xml) - * @example vrSoilTemperature - */ - name: string; - /** - * @description measurement reading - * @example 46.2 - */ - value: string; - /** - * @description unit of measure - the basis for any conversion sandardized via the [ADAPT Unit System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/UnitSystem.xml) - * @example F - */ - unit: string; - }; - /** @example DEVICE */ - AssetCategory: string; - /** @example SENSOR */ - AssetType: string; - /** @example ENVIRONMENTAL */ - AssetSubType: string; '400Errors': { /** @example Errors */ '@type'?: string; @@ -219,23 +176,40 @@ export interface components { }[]; otherAttributes?: Record; }; - GenericErrors: { - /** @example Errors */ - '@type'?: string; - errors?: { - /** @example Error */ - '@type'?: string; - /** - * Format: uuid - * @example ed292512-1f3c-4285-83c3-1fb084423f9b - */ - guid?: string; - /** @example some error message */ - message?: string; - }[]; - otherAttributes?: Record; + Asset: components['schemas']['UpdateAsset'] & { + /** + * Format: date-time + * @description A timestamp of the date and time the last operation was performed on this item. + */ + readonly lastModifiedDate?: string; + lastKnownLocation?: components['schemas']['LastKnownLocation']; }; - CollectionBase: { + AssetCatalogCollection: components['schemas']['CollectionBase'] & { + values?: components['schemas']['AssetCatalogItem'][]; + }; + AssetCatalogGet: { + /** + * @description Asset Category + * @example DEVICE + */ + assetCategory?: string; + /** + * @description Asset Type + * @example SENSOR + */ + assetType?: string; + /** + * @description Asset Sub Type + * @example OTHER + */ + assetSubType?: string; + }; + AssetCatalogItem: { + /** @example ContributedCatalogItem */ + '@type'?: string; + assetCategory: components['schemas']['AssetCategory']; + assetType: components['schemas']['AssetType']; + assetSubType: components['schemas']['AssetSubType']; links?: { /** * @description Links relavent to exploring the collection. @@ -249,64 +223,12 @@ export interface components { */ uri?: string; }[]; - /** @example 1 */ - total?: number; }; + /** @example DEVICE */ + AssetCategory: string; AssetCollection: components['schemas']['CollectionBase'] & { values?: components['schemas']['Asset'][]; }; - AssetLocationCollection: components['schemas']['CollectionBase'] & { - values?: components['schemas']['AssetLocation'][]; - }; - AssetLocationBase: { - /** @example ContributedAssetLocation */ - '@type'?: string; - /** - * Format: date-time - * @description ISO 8601 Date and time in UTC the `measurementData` and/or `geometry` were recorded by the Asset - * @example 2019-07-12T21:29:50.000Z - */ - timestamp: string; - /** - * @description stringified [GeoJSON Point (RFC 7946)](https://tools.ietf.org/html/rfc7946#section-3.1.2) identifying the Asset geolocation - * @example { "type": "Feature", "geometry": { "geometries": [ { "coordinates": [ -94.5609911, 42.3428859 ], "type": "Point" } ], "type": "GeometryCollection" } } - */ - geometry?: string; - measurementData?: components['schemas']['MeasurementData'][]; - }; - /** @description A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes. Either `geometry` or `measurementData` is required and both are allowed. */ - AssetLocation: components['schemas']['AssetLocationBase']; - /** @description The Asset Location with the most recent `timestamp` */ - LastKnownLocation: components['schemas']['AssetLocationBase']; - UpdateAsset: { - /** - * Format: uuid - * @description The ID of the Asset. Optional, but if included it must match the URL parameter for Asset Id. - * @example b9d96332-93c7-44ae-ac86-eed8727f13c7 - */ - id?: string; - } & components['schemas']['CreateAsset']; - /** @description A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements */ - CreateAsset: { - /** @example ContributedAsset */ - '@type'?: string; - /** - * @description The name of the Asset. - * @example McGill 7000 - */ - title: string; - assetCategory: components['schemas']['AssetCategory']; - assetType: components['schemas']['AssetType']; - assetSubType: components['schemas']['AssetSubType']; - }; - Asset: components['schemas']['UpdateAsset'] & { - /** - * Format: date-time - * @description A timestamp of the date and time the last operation was performed on this item. - */ - readonly lastModifiedDate?: string; - lastKnownLocation?: components['schemas']['LastKnownLocation']; - }; AssetCollectionGetLink: { /** * @description This Asset List Link. @@ -392,35 +314,6 @@ export interface components { lastKnownLocation?: Record; }; }; - CreatePostLink: { - /** - * @description Contribution Definition Link. - * @example https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - */ - contributionDefinition?: unknown; - }; - CreatePostValues: { - /** - * @description The name of the asset. - * @example Water Sensor - */ - title?: string; - /** - * @description Asset Category - * @example DEVICE - */ - assetCategory?: string; - /** - * @description Asset Type - * @example SENSOR - */ - assetType?: string; - /** - * @description Asset Sub Type - * @example OTHER - */ - assetSubType?: string; - }; AssetGetValues: { /** * Format: uuid @@ -496,6 +389,48 @@ export interface components { */ measurementData?: unknown[]; }; + /** @description A point in time geolocation or measurments broadcast by an Asset, a series of Asset Locations track an Asset's movement and/or measurement changes. Either `geometry` or `measurementData` is required and both are allowed. */ + AssetLocation: components['schemas']['AssetLocationBase']; + AssetLocationBase: { + /** @example ContributedAssetLocation */ + '@type'?: string; + /** + * Format: date-time + * @description ISO 8601 Date and time in UTC the `measurementData` and/or `geometry` were recorded by the Asset + * @example 2019-07-12T21:29:50.000Z + */ + timestamp: string; + /** + * @description stringified [GeoJSON Point (RFC 7946)](https://tools.ietf.org/html/rfc7946#section-3.1.2) identifying the Asset geolocation + * @example { "type": "Feature", "geometry": { "geometries": [ { "coordinates": [ -94.5609911, 42.3428859 ], "type": "Point" } ], "type": "GeometryCollection" } } + */ + geometry?: string; + measurementData?: components['schemas']['MeasurementData'][]; + }; + AssetLocationCollection: components['schemas']['CollectionBase'] & { + values?: components['schemas']['AssetLocation'][]; + }; + /** @example ENVIRONMENTAL */ + AssetSubType: string; + /** @example SENSOR */ + AssetType: string; + CollectionBase: { + links?: { + /** + * @description Links relavent to exploring the collection. + * @example self + */ + rel?: string; + /** + * Format: uri + * @description The URI to the related resource. + * @example https://sandboxapi.deere.com/platform/resources/61265 + */ + uri?: string; + }[]; + /** @example 1 */ + total?: number; + }; ContributionDefinitionLink: { /** @example Link */ '@type'?: string; @@ -511,7 +446,32 @@ export interface components { */ uri?: string; }; - AssetCatalogGet: { + /** @description A networked physical device, an IOT device, with the ability to broadcast geolocations and measurements */ + CreateAsset: { + /** @example ContributedAsset */ + '@type'?: string; + /** + * @description The name of the Asset. + * @example McGill 7000 + */ + title: string; + assetCategory: components['schemas']['AssetCategory']; + assetType: components['schemas']['AssetType']; + assetSubType: components['schemas']['AssetSubType']; + }; + CreatePostLink: { + /** + * @description Contribution Definition Link. + * @example https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID + */ + contributionDefinition?: unknown; + }; + CreatePostValues: { + /** + * @description The name of the asset. + * @example Water Sensor + */ + title?: string; /** * @description Asset Category * @example DEVICE @@ -528,9 +488,49 @@ export interface components { */ assetSubType?: string; }; - AssetCatalogCollection: components['schemas']['CollectionBase'] & { - values?: components['schemas']['AssetCatalogItem'][]; + GenericErrors: { + /** @example Errors */ + '@type'?: string; + errors?: { + /** @example Error */ + '@type'?: string; + /** + * Format: uuid + * @example ed292512-1f3c-4285-83c3-1fb084423f9b + */ + guid?: string; + /** @example some error message */ + message?: string; + }[]; + otherAttributes?: Record; + }; + /** @description The Asset Location with the most recent `timestamp` */ + LastKnownLocation: components['schemas']['AssetLocationBase']; + MeasurementData: { + /** + * @description representation for which to capture data sandardized via the [ADAPT Representation System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/RepresentationSystem.xml) + * @example vrSoilTemperature + */ + name: string; + /** + * @description measurement reading + * @example 46.2 + */ + value: string; + /** + * @description unit of measure - the basis for any conversion sandardized via the [ADAPT Unit System](https://github.com/ADAPT/ADAPT/blob/develop/source/Representation/Resources/UnitSystem.xml) + * @example F + */ + unit: string; }; + UpdateAsset: { + /** + * Format: uuid + * @description The ID of the Asset. Optional, but if included it must match the URL parameter for Asset Id. + * @example b9d96332-93c7-44ae-ac86-eed8727f13c7 + */ + id?: string; + } & components['schemas']['CreateAsset']; }; responses: { /** @description Request */ @@ -611,8 +611,8 @@ export interface components { }; content?: never; }; - /** @description A collection of Assets */ - GetOrgId: { + /** @description The Asset. */ + AssetGet: { headers: { [name: string]: unknown; }; @@ -623,25 +623,24 @@ export interface components { }; }; }; - /** @description Create */ - CreatePost: { + /** @description The Asset Locations */ + AssetIdGet: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': Record; + 'application/vnd.deere.axiom.v3+json': { + values?: unknown; + }; }; }; - /** @description The Asset. */ - AssetGet: { + /** @description The Asset Location. */ + AssetLocation: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - links?: unknown; - values?: unknown; - }; + '*/*': components['schemas']['AssetLocation'][]; }; }; /** @description Success */ @@ -653,24 +652,34 @@ export interface components { 'application/vnd.deere.axiom.v3+json': Record; }; }; - /** @description The Asset Locations */ - AssetIdGet: { + /** @description Create */ + CreatePost: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - values?: unknown; - }; + 'application/vnd.deere.axiom.v3+json': Record; }; }; - /** @description The Asset Location. */ - AssetLocation: { + /** @description Created. */ + Created: { + headers: { + /** @description https://sandboxapi.deere.com/platform/asset/1234 */ + Location?: string; + [name: string]: unknown; + }; + content?: never; + }; + /** @description A collection of Assets */ + GetOrgId: { headers: { [name: string]: unknown; }; content: { - '*/*': components['schemas']['AssetLocation'][]; + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + values?: unknown; + }; }; }; /** @description Success. */ @@ -680,39 +689,30 @@ export interface components { }; content?: never; }; - /** @description Created. */ - Created: { - headers: { - /** @description https://sandboxapi.deere.com/platform/asset/1234 */ - Location?: string; - [name: string]: unknown; - }; - content?: never; - }; }; parameters: { - /** @description The ID of the organization */ - OrgId: string; - /** @description Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included. */ - Embed: string; - /** @description See for more information. */ - 'X-deere-sign': string; - /** @description See for more information. */ - 'x-deere-sign': string; - /** @description See for more information. */ - 'x-deere-sign2': string; /** @description The ID of the asset */ AssetId: string; /** @description The ID associated with the asset. */ AssetId2: string; - /** @description Retrieves results that occurred after (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time. */ - StartDate: string; + /** @description The number of results to include in the response. Must be a positive value greater than or equal to 1. Max 500. Default 500. */ + Count: string; + /** @description Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included. */ + Embed: string; /** @description Retrieves results that occurred before (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time. */ EndDate: string; + /** @description The ID of the organization */ + OrgId: string; /** @description A query param returned by the server in the nextPage link if there are more results for your query than were returned in the response. */ PageKey: string; - /** @description The number of results to include in the response. Must be a positive value greater than or equal to 1. Max 500. Default 500. */ - Count: string; + /** @description Retrieves results that occurred after (inclusive) a specified date. The format is in the ISO 8601 Standard. Note: When including startDate without endDate or vice versa the missing parameter will default. startDate will default to the beginning of time and endDate will default to the current time. */ + StartDate: string; + /** @description See for more information. */ + 'X-deere-sign': string; + /** @description See for more information. */ + 'x-deere-sign': string; + /** @description See for more information. */ + 'x-deere-sign2': string; }; requestBodies: never; headers: { @@ -726,57 +726,30 @@ export interface components { } export type $defs = Record; export interface operations { - getOrgAssets: { + getAssetCatalog: { parameters: { - query?: { - /** @description Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included. */ - embed?: components['parameters']['Embed']; - }; + query?: never; header?: { /** @description See for more information. */ - 'x-deere-signature'?: components['parameters']['X-deere-sign']; - }; - path: { - /** @description The ID of the organization */ - orgId: components['parameters']['OrgId']; + 'x-deere-signature'?: components['parameters']['x-deere-sign']; }; + path?: never; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['GetOrgId']; - 401: components['responses']['401']; - 403: components['responses']['403']; - 406: components['responses']['406']; - 429: components['responses']['429']; - }; - }; - postAsset: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The ID of the organization */ - orgId: components['parameters']['OrgId']; - }; - cookie?: never; - }; - /** @description Asset to be created. */ - requestBody?: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['CreatePostValues']; + /** @description The Asset Catalog containaing all valid entries. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + values?: unknown; + }; + }; }; }; - responses: { - 201: components['responses']['CreatePost']; - 400: components['responses']['400']; - 401: components['responses']['401']; - 403: components['responses']['403']; - 404: components['responses']['404']; - 406: components['responses']['406']; - 415: components['responses']['415']; - 429: components['responses']['429']; - }; }; getAsset: { parameters: { @@ -860,29 +833,56 @@ export interface operations { 429: components['responses']['429']; }; }; - getAssetCatalog: { + getOrgAssets: { parameters: { - query?: never; + query?: { + /** @description Additional data to embed in the response. For example embed=lastKnownLocation will return assets with their lastKnownLocation included. */ + embed?: components['parameters']['Embed']; + }; header?: { /** @description See for more information. */ - 'x-deere-signature'?: components['parameters']['x-deere-sign']; + 'x-deere-signature'?: components['parameters']['X-deere-sign']; + }; + path: { + /** @description The ID of the organization */ + orgId: components['parameters']['OrgId']; }; - path?: never; cookie?: never; }; requestBody?: never; responses: { - /** @description The Asset Catalog containaing all valid entries. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': { - values?: unknown; - }; - }; + 200: components['responses']['GetOrgId']; + 401: components['responses']['401']; + 403: components['responses']['403']; + 406: components['responses']['406']; + 429: components['responses']['429']; + }; + }; + postAsset: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The ID of the organization */ + orgId: components['parameters']['OrgId']; + }; + cookie?: never; + }; + /** @description Asset to be created. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['CreatePostValues']; }; }; + responses: { + 201: components['responses']['CreatePost']; + 400: components['responses']['400']; + 401: components['responses']['401']; + 403: components['responses']['403']; + 404: components['responses']['404']; + 406: components['responses']['406']; + 415: components['responses']['415']; + 429: components['responses']['429']; + }; }; } diff --git a/src/types/generated/boundaries.ts b/src/types/generated/boundaries.ts index 67e1b2b..0b93856 100644 --- a/src/types/generated/boundaries.ts +++ b/src/types/generated/boundaries.ts @@ -4,6 +4,39 @@ */ export interface paths { + '/fieldOperations/{operationId}/boundary': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Generate a Boundary from a FieldOperation + * @description Given a , this endpoint will generate and return a boundary that surrounds the area worked by that field operation. Any gaps in that field operation will be treated as interior rings. This endpoint returns the generated boundary, giving you the opportunity to change the boundary name, clean up any unwanted interiors, etc. before back into Operations Center. There are two cases where this API will return an HTTP 400 - Bad Request: If the field already has an active boundary. In this case, please use the existing boundary - it is likely more accurate than a generated boundary. If the field has been merged. In this case, a FieldOperation may only cover one part of the merged field, resulting in an inaccurate boundary. + */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['responses']['BoundariesResponse2']; + 403: components['responses']['Forbidden']; + 404: components['responses']['NotFound']; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/organizations/{orgId}/boundaries': { parameters: { query?: never; @@ -115,39 +148,6 @@ export interface paths { patch?: never; trace?: never; }; - '/fieldOperations/{operationId}/boundary': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Generate a Boundary from a FieldOperation - * @description Given a , this endpoint will generate and return a boundary that surrounds the area worked by that field operation. Any gaps in that field operation will be treated as interior rings. This endpoint returns the generated boundary, giving you the opportunity to change the boundary name, clean up any unwanted interiors, etc. before back into Operations Center. There are two cases where this API will return an HTTP 400 - Bad Request: If the field already has an active boundary. In this case, please use the existing boundary - it is likely more accurate than a generated boundary. If the field has been merged. In this case, a FieldOperation may only cover one part of the merged field, resulting in an inaccurate boundary. - */ - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - 200: components['responses']['BoundariesResponse2']; - 403: components['responses']['Forbidden']; - 404: components['responses']['NotFound']; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; '/organizations/{orgId}/fields/{fieldId}/boundaries/{boundaryId}': { parameters: { query?: never; @@ -246,304 +246,249 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** @description Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.) */ - RecordMetadata: { + AccuracyData: { /** - * @default RecordMetadata - * @example RecordMetadata + * @description Identifies the class + * @example Accuracy Data */ - '@type': string; + '@type'?: string; + datums?: components['schemas']['DatumRange'][]; + locationSources?: components['schemas']['LocationSourceRange'][]; + signalTypes?: components['schemas']['SignalTypeRange'][]; + horizontalErrorEstimates_mm?: components['schemas']['MeasurementAsDouble']; + snapDistanceRanges?: components['schemas']['SnapDistanceRange'][]; /** - * @description User involved in creating the entity. Only viewable with the RECORD_METADATA license - * @example XYZ_USER + * @description This indicates the style of simplification applied to a boundary. + * @example dtiBoundaryDP5InchNoMetadata */ - createdByUser?: string; + simplificationAlgorithm?: string; + maxSnapDistance?: components['schemas']['MeasurementAsDouble']; + }; + /** @description Indicates whether or not this boundary is Autonomous Ready. */ + AutonomousReady: { /** - * @description User involved in modifying the entity. Only viewable with the RECORD_METADATA license - * @example XYZ_USER + * @description Flag indicating if the boundary is ready for autonomous operations + * @default false */ - lastModifiedByUser?: string; + boundaryAutonomousReady: boolean; + }; + BoundariesLink: { /** - * @description Timestamp of entity creation - * @example 2018-04-30T10:23:50.000Z + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c */ - readonly userCreationTimestamp?: string; + field?: unknown; /** - * @description Timestamp of entity modification - * @example 2018-05-01T08:11:23.000Z + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/1234 */ - readonly userLastModifiedTimestamp?: string; + owningOrganization?: unknown; + }; + Boundary: { /** - * Format: uuid - * @description This is the specific instance of an application that created the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license. - * @example 0235d40e-02d0-44cb-a126-fff21173fc1f + * @description Identifies the type Boundary + * @example Boundary */ - readonly createdBySourceNode?: string; + '@type'?: string; /** * Format: uuid - * @description This is the specific instance of an application that modified the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license - * @example 0235d40e-02d0-44cb-a126-fff21173fc1f + * @description An identifier for this boundary, which is unique within a field context + * @example bed69949-df25-4319-8f6c-94c62b466126 */ - readonly lastModifiedSourceNode?: string; + readonly id?: string; + /** @example unique_boundary_name */ + name?: string; /** - * @description Derived off of a client key (application that created) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license. - * @example https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5 + * Format: date-time + * @example 2018-07-01T21:00:11Z */ - readonly createdBySourceSystemUri?: string; + readonly createdTime?: string; /** - * @description Derived off of a client key (application that did last modification) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license. - * @example https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5 + * Format: date-time + * @description An ISO-8601 formatted timestamp of the last modification made to this boundary + * @example 2016-11-17T11:53:00.000Z */ - readonly lastModifiedBySourceSystemUri?: string; - }; - GPSDatum: { + modifiedTime?: string; + area?: components['schemas']['MeasurementAsDouble']; + workableArea?: components['schemas']['MeasurementAsDouble']; + /** @description A collection of polygons */ + multipolygons?: components['schemas']['Polygon'][]; + extent?: components['schemas']['Extent']; + /** @description Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries. */ + active?: boolean; + /** @description Indicates whether or not this boundary is archived. */ + archived?: boolean; + /** @description Indicates what signalType was used to capture boundary information */ + signalType?: string; + /** @description Indicates whether the contained area is irrigated */ + irrigated?: boolean; /** - * @description Identifies the class - * @example GPS Datum + * @description sourceType of the boundary + * @example driven */ - '@type'?: string; - gpsDatumValue?: components['schemas']['GPSDatumValue']; - horizontalUncertainty?: components['schemas']['MeasurementAsDouble']; - verticalUncertainty?: components['schemas']['MeasurementAsDouble']; - /** @example serialNumber */ - serialNumber: string; + sourceType?: string; + readonly links?: components['schemas']['Link'][]; + autonomousReady?: components['schemas']['AutonomousReady']; + recordMetadata?: components['schemas']['RecordMetadata']; }; - GPSDatumValue: { + BoundaryOrgId: { /** - * @description Identifies the class - * @example GPS Datum values + * Format: uuid + * @description Boundary ID + * @example 6232611a-0303-0234-8g7d-e1e1e11871b8 */ - '@type'?: string; - /** @example currentActiveDatum */ - currentActiveDatum: string; - currentActiveEpochTime?: components['schemas']['MeasurementAsDouble']; - baseLocation?: components['schemas']['ThreeDPoint']; - /** @example status */ - status: string; - /** @example referenceDatumValue */ - referenceDatum: string; - referenceEpochTime?: components['schemas']['MeasurementAsDouble']; - referencePositionOffsets?: components['schemas']['ThreeDPoint']; - datumCreationTime?: components['schemas']['MeasurementAsDouble']; + id?: string; /** - * @description Unique id for this datum - * @example 205ff5ba-8d63-4a66-bbfe-b2a31ebad0d3 + * @description Boundary name + * @example Unique_Boundary_name */ - datumUuid: string; - }; - ThreeDPoint: { + name?: string; /** - * @description Identifies the class - * @example 3-dimensional point + * @description Boundary area + * @example See sample response below. */ - '@type'?: string; + area?: unknown; /** - * Format: double - * @description The latitude of the point - * @example 32.118552 + * @description Exteriors-interiors of the boundary. + * @example See sample response below. */ - lat?: number; + workableArea?: unknown; /** - * Format: double - * @description The longitude of the point - * @example -81.260776 + * @description Describes the source of boundary (requires license to set). + * @example HandDrawn */ - lon?: number; + sourceType?: string; /** - * Format: double - * @description The z-axis of the point - * @example 1 + * @description Boundary shape and exact location. + * @example See sample response below */ - height?: number; - }; - DatumRange: { + multipolygons?: unknown; /** - * @description Identifies the class - * @example Datum Range + * @description Boundary type + * @example exterior */ - '@type'?: string; + type?: string; /** - * Format: int32 - * @description starting point index this datum applies to relative to the boundary - * @example 0 + * @description "True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder). + * @example true */ - startPointIndex?: number; + passable?: boolean; /** - * Format: int32 - * @description ending point index this datum applies to relative to the boundary - * @example 127 + * @description Coordinates of the extent of the boundary. + * @example See sample response below. */ - endPointIndex?: number; - datum?: components['schemas']['GPSDatum']; - }; - LocationSourceRange: { + extent?: unknown; /** - * @description Identifies the class - * @example Location Source Range + * @description Indicates whether or not the boundary is active. + * @example true */ - '@type'?: string; + active?: boolean; /** - * Format: int32 - * @description starting point index this location source applies to relative to the boundary - * @example 0 + * @description Indicates whether or not the boundary is archived. + * @example true */ - startPointIndex?: number; + archived?: boolean; /** - * Format: int32 - * @description ending point index this location source applies to relative to the boundary - * @example 127 + * @description Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + * @example dtiSignalTypeRTK */ - endPointIndex?: number; + signalType?: string; /** - * @description value of location source used - * @example "locationSource": "Computed from Rigid Kinematics" + * Format: date-time + * @description An ISO-8601 formatted timestamp of the last modification made to this boundary. + * @example 2017-11-16T15:43:27.496Z */ - locationSource?: string; - }; - SignalTypeRange: { + modifiedTime?: string; /** - * @description Identifies the class - * @example Signal Type Range + * Format: date-time + * @description An ISO-8601 formatted timestamp of the time this boundary was created. + * @example 2017-11-16T15:43:27.496Z */ - '@type'?: string; + createdTime?: string; /** - * @description starting point index this signal type applies to relative to the boundary - * @example 0 + * @description Indicates whether the contained area is irrigated. + * @example true */ - startPointIndex?: number; + irrigated?: boolean; + }; + BoundaryOrgId2: { /** - * @description ending point index this signal type applies to relative to the boundary - * @example 127 + * Format: uuid + * @description Boundary ID + * @example 6232611a-0303-0234-8g7d-e1e1e11871b8 */ - endPointIndex?: number; + id?: string; /** - * @description value of signal type used - * @example "signalType": "SFRTK" + * @description Boundary name + * @example AutoGenerated 2020 Seeding */ - signalType?: string; - }; - SnapDistanceRange: { + name?: string; /** - * @description Identifies the class - * @example Snap Distance Range + * @description Describes the source of boundary (requires license to set). + * @example Auto */ - '@type'?: string; + sourceType?: string; /** - * @description starting point index this snap distance applies to relative to the boundary - * @example 0 + * @description Boundary shape and exact location. + * @example See sample response below */ - startIndex?: number; + multipolygons?: unknown; /** - * @description ending point index this snap distance applies to relative to the boundary - * @example 127 + * @description Boundary type + * @example exterior */ - endIndex?: number; - snapDistance?: components['schemas']['MeasurementAsDouble']; - }; - AccuracyData: { + type?: string; /** - * @description Identifies the class - * @example Accuracy Data + * @description "True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder). + * @example true */ - '@type'?: string; - datums?: components['schemas']['DatumRange'][]; - locationSources?: components['schemas']['LocationSourceRange'][]; - signalTypes?: components['schemas']['SignalTypeRange'][]; - horizontalErrorEstimates_mm?: components['schemas']['MeasurementAsDouble']; - snapDistanceRanges?: components['schemas']['SnapDistanceRange'][]; + passable?: boolean; /** - * @description This indicates the style of simplification applied to a boundary. - * @example dtiBoundaryDP5InchNoMetadata + * @description Coordinates of the extent of the boundary. + * @example See sample response below. */ - simplificationAlgorithm?: string; - maxSnapDistance?: components['schemas']['MeasurementAsDouble']; - }; - Headland: { - /** @example headland_name */ - name: string; - points?: components['schemas']['Point'][]; - /** @description indicates if this is the active headland in a collection */ - active: boolean; - }; - Point: { + extent?: unknown; /** - * @description Identifies the class - * @example Point + * @description Indicates whether or not the boundary is active. + * @example true */ - '@type'?: string; + active?: boolean; /** - * Format: double - * @description The latitude of the point - * @example 32.118552 + * @description Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. + * @example dtiSignalTypeRTK */ - lat?: number; + signalType?: string; /** - * Format: double - * @description The longitude of the point - * @example -81.260776 + * Format: date-time + * @description An ISO-8601 formatted timestamp of the last modification made to this boundary. + * @example 2017-11-16T15:43:27.496Z */ - lon?: number; - }; - Extent: { + modifiedTime?: string; /** - * @description Identifies the class - * @example Extent + * @description Indicates whether the contained area is irrigated. + * @example true */ - '@type'?: string; - topLeft?: components['schemas']['Point']; - bottomRight?: components['schemas']['Point']; + irrigated?: boolean; }; - MeasurementAsDouble: { + DatumRange: { /** * @description Identifies the class - * @example MeasurementAsDouble + * @example Datum Range */ '@type'?: string; /** - * Format: double - * @example 7.502938 + * Format: int32 + * @description starting point index this datum applies to relative to the boundary + * @example 0 */ - valueAsDouble?: number; + startPointIndex?: number; /** - * @description The unit of measure for this value - * @example ha + * Format: int32 + * @description ending point index this datum applies to relative to the boundary + * @example 127 */ - unit?: string; - }; - Polygon: { - rings?: { - /** - * @description identifier for polygon - * @example 1 - */ - id?: number; - /** - * @description id of associated ring - * @example 5 - */ - parentId?: number; - points?: components['schemas']['Point'][]; - /** - * @description Describes whether this geometry is interior (e.g. a pond contained within a field) or exterior (e.g. a fence around the field) - * @enum {string} - */ - type?: 'interior' | 'exterior'; - /** @description Describes whether or not a machine may travel through this geometry (e.g. a road vs a stream) */ - passable?: boolean; - /** @description A collection of headlands */ - headlands?: components['schemas']['Headland'][]; - accuracyData?: components['schemas']['AccuracyData']; - /** - * @description value of signal type used - * @example dtiSignalTypeRTK - */ - signalType?: string; - /** - * @description To determine how their boundary was generated - * @example dtiBoundaryFromWebCoverage - */ - creationMethod?: string; - }[]; + endPointIndex?: number; + datum?: components['schemas']['GPSDatum']; }; /** Format: Errors/DataValidationException */ Errors: { @@ -578,213 +523,202 @@ export interface components { invalidValue?: string; }[]; }; - /** @description Provides a reference to an associated object or list */ - Link: { - /** - * @description The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. - * @example self - */ - rel: string; + Extent: { /** - * Format: uri - * @description The location of the resource - * @example https://partnerapi.deere.com/platform/organizations/1/boundaries/00000000-0000-0000-0000-000000000000 + * @description Identifies the class + * @example Extent */ - uri: string; + '@type'?: string; + topLeft?: components['schemas']['Point']; + bottomRight?: components['schemas']['Point']; }; - /** @description Indicates whether or not this boundary is Autonomous Ready. */ - AutonomousReady: { + GPSDatum: { /** - * @description Flag indicating if the boundary is ready for autonomous operations - * @default false + * @description Identifies the class + * @example GPS Datum */ - boundaryAutonomousReady: boolean; + '@type'?: string; + gpsDatumValue?: components['schemas']['GPSDatumValue']; + horizontalUncertainty?: components['schemas']['MeasurementAsDouble']; + verticalUncertainty?: components['schemas']['MeasurementAsDouble']; + /** @example serialNumber */ + serialNumber: string; }; - Boundary: { + GPSDatumValue: { /** - * @description Identifies the type Boundary - * @example Boundary + * @description Identifies the class + * @example GPS Datum values */ '@type'?: string; + /** @example currentActiveDatum */ + currentActiveDatum: string; + currentActiveEpochTime?: components['schemas']['MeasurementAsDouble']; + baseLocation?: components['schemas']['ThreeDPoint']; + /** @example status */ + status: string; + /** @example referenceDatumValue */ + referenceDatum: string; + referenceEpochTime?: components['schemas']['MeasurementAsDouble']; + referencePositionOffsets?: components['schemas']['ThreeDPoint']; + datumCreationTime?: components['schemas']['MeasurementAsDouble']; /** - * Format: uuid - * @description An identifier for this boundary, which is unique within a field context - * @example bed69949-df25-4319-8f6c-94c62b466126 - */ - readonly id?: string; - /** @example unique_boundary_name */ - name?: string; - /** - * Format: date-time - * @example 2018-07-01T21:00:11Z - */ - readonly createdTime?: string; - /** - * Format: date-time - * @description An ISO-8601 formatted timestamp of the last modification made to this boundary - * @example 2016-11-17T11:53:00.000Z - */ - modifiedTime?: string; - area?: components['schemas']['MeasurementAsDouble']; - workableArea?: components['schemas']['MeasurementAsDouble']; - /** @description A collection of polygons */ - multipolygons?: components['schemas']['Polygon'][]; - extent?: components['schemas']['Extent']; - /** @description Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries. */ - active?: boolean; - /** @description Indicates whether or not this boundary is archived. */ - archived?: boolean; - /** @description Indicates what signalType was used to capture boundary information */ - signalType?: string; - /** @description Indicates whether the contained area is irrigated */ - irrigated?: boolean; - /** - * @description sourceType of the boundary - * @example driven + * @description Unique id for this datum + * @example 205ff5ba-8d63-4a66-bbfe-b2a31ebad0d3 */ - sourceType?: string; - readonly links?: components['schemas']['Link'][]; - autonomousReady?: components['schemas']['AutonomousReady']; - recordMetadata?: components['schemas']['RecordMetadata']; + datumUuid: string; }; - BoundaryOrgId: { - /** - * Format: uuid - * @description Boundary ID - * @example 6232611a-0303-0234-8g7d-e1e1e11871b8 - */ - id?: string; - /** - * @description Boundary name - * @example Unique_Boundary_name - */ - name?: string; - /** - * @description Boundary area - * @example See sample response below. - */ - area?: unknown; + Headland: { + /** @example headland_name */ + name: string; + points?: components['schemas']['Point'][]; + /** @description indicates if this is the active headland in a collection */ + active: boolean; + }; + /** @description Provides a reference to an associated object or list */ + Link: { /** - * @description Exteriors-interiors of the boundary. - * @example See sample response below. + * @description The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. + * @example self */ - workableArea?: unknown; + rel: string; /** - * @description Describes the source of boundary (requires license to set). - * @example HandDrawn + * Format: uri + * @description The location of the resource + * @example https://partnerapi.deere.com/platform/organizations/1/boundaries/00000000-0000-0000-0000-000000000000 */ - sourceType?: string; + uri: string; + }; + LocationSourceRange: { /** - * @description Boundary shape and exact location. - * @example See sample response below + * @description Identifies the class + * @example Location Source Range */ - multipolygons?: unknown; + '@type'?: string; /** - * @description Boundary type - * @example exterior + * Format: int32 + * @description starting point index this location source applies to relative to the boundary + * @example 0 */ - type?: string; + startPointIndex?: number; /** - * @description "True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder). - * @example true + * Format: int32 + * @description ending point index this location source applies to relative to the boundary + * @example 127 */ - passable?: boolean; + endPointIndex?: number; /** - * @description Coordinates of the extent of the boundary. - * @example See sample response below. + * @description value of location source used + * @example "locationSource": "Computed from Rigid Kinematics" */ - extent?: unknown; + locationSource?: string; + }; + MeasurementAsDouble: { /** - * @description Indicates whether or not the boundary is active. - * @example true + * @description Identifies the class + * @example MeasurementAsDouble */ - active?: boolean; + '@type'?: string; /** - * @description Indicates whether or not the boundary is archived. - * @example true + * Format: double + * @example 7.502938 */ - archived?: boolean; + valueAsDouble?: number; /** - * @description Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. - * @example dtiSignalTypeRTK + * @description The unit of measure for this value + * @example ha */ - signalType?: string; + unit?: string; + }; + Point: { /** - * Format: date-time - * @description An ISO-8601 formatted timestamp of the last modification made to this boundary. - * @example 2017-11-16T15:43:27.496Z + * @description Identifies the class + * @example Point */ - modifiedTime?: string; + '@type'?: string; /** - * Format: date-time - * @description An ISO-8601 formatted timestamp of the time this boundary was created. - * @example 2017-11-16T15:43:27.496Z + * Format: double + * @description The latitude of the point + * @example 32.118552 */ - createdTime?: string; + lat?: number; /** - * @description Indicates whether the contained area is irrigated. - * @example true + * Format: double + * @description The longitude of the point + * @example -81.260776 */ - irrigated?: boolean; + lon?: number; }; - BoundaryOrgId2: { - /** - * Format: uuid - * @description Boundary ID - * @example 6232611a-0303-0234-8g7d-e1e1e11871b8 - */ - id?: string; - /** - * @description Boundary name - * @example AutoGenerated 2020 Seeding - */ - name?: string; + Polygon: { + rings?: { + /** + * @description identifier for polygon + * @example 1 + */ + id?: number; + /** + * @description id of associated ring + * @example 5 + */ + parentId?: number; + points?: components['schemas']['Point'][]; + /** + * @description Describes whether this geometry is interior (e.g. a pond contained within a field) or exterior (e.g. a fence around the field) + * @enum {string} + */ + type?: 'interior' | 'exterior'; + /** @description Describes whether or not a machine may travel through this geometry (e.g. a road vs a stream) */ + passable?: boolean; + /** @description A collection of headlands */ + headlands?: components['schemas']['Headland'][]; + accuracyData?: components['schemas']['AccuracyData']; + /** + * @description value of signal type used + * @example dtiSignalTypeRTK + */ + signalType?: string; + /** + * @description To determine how their boundary was generated + * @example dtiBoundaryFromWebCoverage + */ + creationMethod?: string; + }[]; + }; + PostBoundary: { /** - * @description Describes the source of boundary (requires license to set). - * @example Auto + * @description Boundary Name. + * @example Boundary_Unique_Name */ - sourceType?: string; + name?: string; /** - * @description Boundary shape and exact location. - * @example See sample response below + * @description Indicates whether the boundary is active in this field. + * @example false */ - multipolygons?: unknown; + active?: boolean; /** - * @description Boundary type - * @example exterior + * @description Indicates whether the boundary is archived. + * @example false */ - type?: string; + archive?: boolean; /** - * @description "True" indicates that the boundary can be crossed (Ex: a waterway). "False" indicates that the boundary cannot be crossed (ex: a boulder). - * @example true + * @description Indicates whether the boundary is irrigated. + * @example false */ - passable?: boolean; + irrigated?: boolean; /** - * @description Coordinates of the extent of the boundary. - * @example See sample response below. + * @description Polygon representation of the new boundary. + * @example See sample request below. */ - extent?: unknown; + multipolygons?: unknown; /** - * @description Indicates whether or not the boundary is active. - * @example true + * @description Describes the source of boundary (requires license to set). + * @example External */ - active?: boolean; + sourceType?: string; /** * @description Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. * @example dtiSignalTypeRTK */ signalType?: string; - /** - * Format: date-time - * @description An ISO-8601 formatted timestamp of the last modification made to this boundary. - * @example 2017-11-16T15:43:27.496Z - */ - modifiedTime?: string; - /** - * @description Indicates whether the contained area is irrigated. - * @example true - */ - irrigated?: boolean; }; PostBoundaryGet: { /** @@ -866,10 +800,10 @@ export interface components { */ passable?: boolean; }; - PostBoundary: { + PutBoundary: { /** * @description Boundary Name. - * @example Boundary_Unique_Name + * @example Boundary01 */ name?: string; /** @@ -903,57 +837,132 @@ export interface components { */ signalType?: string; }; - PutBoundary: { + /** @description Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.) */ + RecordMetadata: { /** - * @description Boundary Name. - * @example Boundary01 + * @default RecordMetadata + * @example RecordMetadata */ - name?: string; + '@type': string; /** - * @description Indicates whether the boundary is active in this field. - * @example false + * @description User involved in creating the entity. Only viewable with the RECORD_METADATA license + * @example XYZ_USER */ - active?: boolean; + createdByUser?: string; /** - * @description Indicates whether the boundary is archived. - * @example false + * @description User involved in modifying the entity. Only viewable with the RECORD_METADATA license + * @example XYZ_USER */ - archive?: boolean; + lastModifiedByUser?: string; /** - * @description Indicates whether the boundary is irrigated. - * @example false + * @description Timestamp of entity creation + * @example 2018-04-30T10:23:50.000Z */ - irrigated?: boolean; + readonly userCreationTimestamp?: string; /** - * @description Polygon representation of the new boundary. - * @example See sample request below. + * @description Timestamp of entity modification + * @example 2018-05-01T08:11:23.000Z */ - multipolygons?: unknown; + readonly userLastModifiedTimestamp?: string; /** - * @description Describes the source of boundary (requires license to set). - * @example External + * Format: uuid + * @description This is the specific instance of an application that created the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license. + * @example 0235d40e-02d0-44cb-a126-fff21173fc1f */ - sourceType?: string; + readonly createdBySourceNode?: string; /** - * @description Signal Type used when defining boundary. See “dtSignalType” in the John Deere representation system for possible values. - * @example dtiSignalTypeRTK + * Format: uuid + * @description This is the specific instance of an application that modified the entity. At this time, it only applies to Displays. Only viewable with the RECORD_METADATA license + * @example 0235d40e-02d0-44cb-a126-fff21173fc1f + */ + readonly lastModifiedSourceNode?: string; + /** + * @description Derived off of a client key (application that created) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license. + * @example https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5 + */ + readonly createdBySourceSystemUri?: string; + /** + * @description Derived off of a client key (application that did last modification) via Application Registry lookup. The Application Registry ID for the Ops Center Unknown Application (43796410-2f2c-4321-a259-8dd8af04e973) will be used if no source application exists. Only viewable with the RECORD_METADATA license. + * @example https://api.deere.com/platform/connectedApplications/63bb4efd-0ec5-47d3-9092-7693909134f5 + */ + readonly lastModifiedBySourceSystemUri?: string; + }; + SignalTypeRange: { + /** + * @description Identifies the class + * @example Signal Type Range + */ + '@type'?: string; + /** + * @description starting point index this signal type applies to relative to the boundary + * @example 0 + */ + startPointIndex?: number; + /** + * @description ending point index this signal type applies to relative to the boundary + * @example 127 + */ + endPointIndex?: number; + /** + * @description value of signal type used + * @example "signalType": "SFRTK" */ signalType?: string; }; - BoundariesLink: { + SnapDistanceRange: { /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/209b3c20-f33a-4c96-9a2c-613def198e0c + * @description Identifies the class + * @example Snap Distance Range */ - field?: unknown; + '@type'?: string; /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/1234 + * @description starting point index this snap distance applies to relative to the boundary + * @example 0 */ - owningOrganization?: unknown; + startIndex?: number; + /** + * @description ending point index this snap distance applies to relative to the boundary + * @example 127 + */ + endIndex?: number; + snapDistance?: components['schemas']['MeasurementAsDouble']; + }; + ThreeDPoint: { + /** + * @description Identifies the class + * @example 3-dimensional point + */ + '@type'?: string; + /** + * Format: double + * @description The latitude of the point + * @example 32.118552 + */ + lat?: number; + /** + * Format: double + * @description The longitude of the point + * @example -81.260776 + */ + lon?: number; + /** + * Format: double + * @description The z-axis of the point + * @example 1 + */ + height?: number; }; }; responses: { + /** @description Request Validation failure. The boundary name must be between 1-20 characters. There must be at least one exterior ring. Each ring must have 4 or more points. The first and last point must be the same for each ring. */ + BadRequest: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; /** @description A collection of boundaries */ BoundariesResponse: { headers: { @@ -1006,7 +1015,7 @@ export interface components { }; }; /** @description Created, with a Location header containing the URI of the newly created resource */ - Created: { + Create: { headers: { [name: string]: unknown; }; @@ -1017,12 +1026,11 @@ export interface components { * @example 1 */ total?: number; - values?: components['schemas']['PostBoundary'][]; }; }; }; /** @description Created, with a Location header containing the URI of the newly created resource */ - Create: { + Created: { headers: { [name: string]: unknown; }; @@ -1033,23 +1041,16 @@ export interface components { * @example 1 */ total?: number; + values?: components['schemas']['PostBoundary'][]; }; }; }; - /** @description Updated, with a Location header containing the URI of the newly created resource */ - Update: { + /** @description The user does not have sufficient privileges to access this organization's boundaries. */ + Forbidden: { headers: { [name: string]: unknown; }; - content: { - 'application/vnd.deere.axiom.v3+json': { - /** - * Format: int32 - * @example 1 - */ - total?: number; - }; - }; + content?: never; }; /** @description No Content. Request Completed Succesfully. */ NoContent: { @@ -1060,55 +1061,54 @@ export interface components { 'No Content': unknown; }; }; - /** @description Request Validation failure. The boundary name must be between 1-20 characters. There must be at least one exterior ring. Each ring must have 4 or more points. The first and last point must be the same for each ring. */ - BadRequest: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; - }; - }; - /** @description The user does not have sufficient privileges to access this organization's boundaries. */ - Forbidden: { + /** @description The specified resource does not exist */ + NotFound: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The specified resource does not exist */ - NotFound: { + /** @description Updated, with a Location header containing the URI of the newly created resource */ + Update: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; + }; }; }; parameters: { - /** @description Organization */ - OrgId: string; - /** @description Organization */ - OrgId3: string; /** @description Takes METRIC and ENGLISH. Converts measurements to the chosen system. */ 'Accept-UOM-System': string; - /** @description Organization ID */ - OrgId2: string; + /** @description Takes METRIC and ENGLISH. Converts measurements to the chosen system. */ + AcceptUOMSystem: 'ENGLISH' | 'METRIC'; + /** @description Allows filtering based on active boundaries */ + Active: boolean; + /** @description Boundary Id */ + BoundaryId: string; /** @description Populates response with data lineage information */ Embed: string; - /** @description Filter results based on status; defaults to active */ - RecordFilter: string; - /** @description Field ID */ - Id: string; /** @description Field GUID */ FieldId: string; /** @description Field Id */ FieldId2: string; - /** @description Boundary Id */ - BoundaryId: string; - /** @description Takes METRIC and ENGLISH. Converts measurements to the chosen system. */ - AcceptUOMSystem: 'ENGLISH' | 'METRIC'; - /** @description Allows filtering based on active boundaries */ - Active: boolean; + /** @description Field ID */ + Id: string; + /** @description Organization */ + OrgId: string; + /** @description Organization ID */ + OrgId2: string; + /** @description Organization */ + OrgId3: string; + /** @description Filter results based on status; defaults to active */ + RecordFilter: string; }; requestBodies: { /** @description Specifies Boundary details */ diff --git a/src/types/generated/clients.ts b/src/types/generated/clients.ts index 8f08e4a..25179e9 100644 --- a/src/types/generated/clients.ts +++ b/src/types/generated/clients.ts @@ -4,6 +4,61 @@ */ export interface paths { + '/organizations/{orgID}/clients/{id}/fields': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View a Client's Field + * @description View the field to which a specific client belongs. For the client, the response links to the following resources: boundaries: View the boundaries that belong to this field. clients: View the client that belongs to this field. farms: View the farms within this field. owningOrganization: View the organization that owns the field. + */ + get: { + parameters: { + query?: never; + header?: { + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'x-deere-signature'?: components['parameters']['X-deere-signature']; + }; + path: { + /** @description The id of the organization */ + orgId: components['parameters']['OrgId']; + /** @description Client ID */ + clientId: components['parameters']['Id']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get Field by client Id */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['GroupLinkID'][]; + /** + * Format: int32 + * @example 1 + */ + total?: number; + values?: components['schemas']['FieldResponse'][]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/organizations/{orgId}/clients': { parameters: { query?: never; @@ -76,74 +131,10 @@ export interface paths { patch?: never; trace?: never; }; - '/organizations/{orgID}/clients/{id}/fields': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * View a Client's Field - * @description View the field to which a specific client belongs. For the client, the response links to the following resources: boundaries: View the boundaries that belong to this field. clients: View the client that belongs to this field. farms: View the farms within this field. owningOrganization: View the organization that owns the field. - */ - get: { - parameters: { - query?: never; - header?: { - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'x-deere-signature'?: components['parameters']['X-deere-signature']; - }; - path: { - /** @description The id of the organization */ - orgId: components['parameters']['OrgId']; - /** @description Client ID */ - clientId: components['parameters']['Id']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Get Field by client Id */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['GroupLinkID'][]; - /** - * Format: int32 - * @example 1 - */ - total?: number; - values?: components['schemas']['FieldResponse'][]; - }; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; } export type webhooks = Record; export interface components { schemas: { - Clients: { - links?: components['schemas']['GroupLink'][]; - /** - * Format: int32 - * @example 1 - */ - total?: number; - values?: components['schemas']['Client'][]; - }; Client: { /** * @description Type @@ -169,14 +160,55 @@ export interface components { */ archived?: boolean; }; - /** @description Link to another resource */ - GroupLink: { - /** @example Link */ - '@type'?: string; - /** @example self */ - rel?: string; - /** @example https://sandboxapi.deere.com/platform/organizations/5555/clients */ - uri?: string; + ClientPost: { + /** + * @description New Client Name + * @example UniqueClientName + */ + name?: string; + /** + * @description Archived status (false = active) + * @example false + */ + archived?: string; + }; + Clients: { + links?: components['schemas']['GroupLink'][]; + /** + * Format: int32 + * @example 1 + */ + total?: number; + values?: components['schemas']['Client'][]; + }; + ContentType: unknown; + /** Format: Errors/DataValidationException */ + Errors: { + errors?: Record[]; + }; + FarmResponse: { + farmId?: string; + farmName?: string; + clientId?: string; + clientName?: string; + clientUri?: string; + /** Format: int64 */ + orgId?: number; + archived?: boolean; + sourceModifiedDate?: string; + sourceCreatedDate?: string; + /** @description Id of the system which created the farm */ + createdContributionId?: string; + /** @description Id of the system which last modified the farm like AppId */ + modifiedContributionId?: string; + /** @description The node which created the farm */ + createdSourceNode?: string; + /** @description The node which last modified the Farm */ + modifiedSourceNode?: string; + /** @description The Id of the entity which created the farm */ + createdBy?: string; + /** @description The Id of the entity which last modified the farm */ + modifiedBy?: string; }; FieldResponse: { /** @@ -196,14 +228,13 @@ export interface components { */ name?: string; }; - ContentType: unknown; /** @description Link to another resource */ - Link: { + GroupLink: { /** @example Link */ '@type'?: string; /** @example self */ rel?: string; - /** @example https://sandboxapi.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d */ + /** @example https://sandboxapi.deere.com/platform/organizations/5555/clients */ uri?: string; }; GroupLinkID: { @@ -233,45 +264,14 @@ export interface components { */ contributionDefinition?: unknown; }; - ClientPost: { - /** - * @description New Client Name - * @example UniqueClientName - */ - name?: string; - /** - * @description Archived status (false = active) - * @example false - */ - archived?: string; - }; - FarmResponse: { - farmId?: string; - farmName?: string; - clientId?: string; - clientName?: string; - clientUri?: string; - /** Format: int64 */ - orgId?: number; - archived?: boolean; - sourceModifiedDate?: string; - sourceCreatedDate?: string; - /** @description Id of the system which created the farm */ - createdContributionId?: string; - /** @description Id of the system which last modified the farm like AppId */ - modifiedContributionId?: string; - /** @description The node which created the farm */ - createdSourceNode?: string; - /** @description The node which last modified the Farm */ - modifiedSourceNode?: string; - /** @description The Id of the entity which created the farm */ - createdBy?: string; - /** @description The Id of the entity which last modified the farm */ - modifiedBy?: string; - }; - /** Format: Errors/DataValidationException */ - Errors: { - errors?: Record[]; + /** @description Link to another resource */ + Link: { + /** @example Link */ + '@type'?: string; + /** @example self */ + rel?: string; + /** @example https://sandboxapi.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d */ + uri?: string; }; MalformedRequestError: { /** @example Errors */ @@ -292,24 +292,6 @@ export interface components { }; }; responses: { - /** @description Array of clients containing links related to assets */ - ClientsReturned: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Clients']; - }; - }; - /** @description Success */ - ClientReturned: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Client']; - }; - }; /** @description created */ ClientCreatedResponse: { headers: { @@ -326,21 +308,22 @@ export interface components { }; }; }; - /** @description Get Farm by client Id */ - FarmsResponse: { + /** @description Success */ + ClientReturned: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['GroupLink'][]; - /** - * Format: int32 - * @example 1 - */ - total?: number; - values?: components['schemas']['FarmResponse'][]; - }; + 'application/vnd.deere.axiom.v3+json': components['schemas']['Client']; + }; + }; + /** @description Array of clients containing links related to assets */ + ClientsReturned: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Clients']; }; }; /** @description Deleted */ @@ -352,37 +335,48 @@ export interface components { 'application/vnd.deere.axiom.v3+json': unknown; }; }; - /** @description Updated */ - UpdatedResponse: { + /** @description Does not have access */ + DoesNotHaveAccessResponse: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Get Farm by client Id */ + FarmsResponse: { headers: { [name: string]: unknown; }; content: { 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['GroupLink'][]; /** * Format: int32 * @example 1 */ total?: number; + values?: components['schemas']['FarmResponse'][]; }; }; }; - /** @description Does not have access */ - DoesNotHaveAccessResponse: { + /** @description Content has not changed since last call */ + HasNotChanged: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description Organization not found */ - OrgNotFound: { + /** @description Request Validation failure. */ + MalformedRequest: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['MalformedRequestError']; + }; }; - /** @description Content has not changed since last call */ - HasNotChanged: { + /** @description Organization not found */ + OrgNotFound: { headers: { [name: string]: unknown; }; @@ -395,35 +389,41 @@ export interface components { }; content?: never; }; - /** @description Request Validation failure. */ - MalformedRequest: { + /** @description Updated */ + UpdatedResponse: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['MalformedRequestError']; + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; }; }; }; parameters: { - /** @description The id of the organization */ - OrgId: number; /** @description client Id */ ClientId: string; /** @description client name */ ClientName: string; + /** @description Populates response with data lineage information */ + Embed: string; /** @description farm name */ FarmName: string; + /** @description Client ID */ + Id: string; + /** @description The id of the organization */ + OrgId: number; + /** @description The ID of the organization */ + OrgId2: string; /** @description Filter clients by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE */ RecordFilter: string; - /** @description Populates response with data lineage information */ - Embed: string; /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ 'X-deere-signature': string; - /** @description The ID of the organization */ - OrgId2: string; - /** @description Client ID */ - Id: string; }; requestBodies: { ClientRequest: { diff --git a/src/types/generated/connection-management.ts b/src/types/generated/connection-management.ts index d15ba38..06fd4c0 100644 --- a/src/types/generated/connection-management.ts +++ b/src/types/generated/connection-management.ts @@ -120,18 +120,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** @description Link to the delete action */ - Link: { - /** - * @default Link - * @example Link - */ - '@type': string; - /** @example self */ - rel?: string; - /** @example https://api.deere.com/platform/connections/abc123 */ - uri?: string; - }; Connection: { /** @example abc123 */ id?: string; @@ -169,15 +157,20 @@ export interface components { total?: number; values?: components['schemas']['Connection'][]; }; + /** @description Link to the delete action */ + Link: { + /** + * @default Link + * @example Link + */ + '@type': string; + /** @example self */ + rel?: string; + /** @example https://api.deere.com/platform/connections/abc123 */ + uri?: string; + }; }; responses: { - /** @description Requester not authorized to delete the requested connection */ - Forbidden: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; /** @description Deleted */ Deleted: { headers: { @@ -187,14 +180,21 @@ export interface components { 'application/json': Record; }; }; + /** @description Requester not authorized to delete the requested connection */ + Forbidden: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; }; parameters: { /** @description The identifier of the connection */ ConnectionId: string; - /** @description Organization Id */ - OrgId: number; /** @description ISO 8601 DateTime to filter the responses to only those created after the supplied date */ CreatedAfter: string; + /** @description Organization Id */ + OrgId: number; }; requestBodies: never; headers: never; diff --git a/src/types/generated/crop-types.ts b/src/types/generated/crop-types.ts index 6e73eb1..a5b5db3 100644 --- a/src/types/generated/crop-types.ts +++ b/src/types/generated/crop-types.ts @@ -42,7 +42,7 @@ export interface paths { patch?: never; trace?: never; }; - '/cropTypes/{name}': { + '/cropTypes/{id}': { parameters: { query?: never; header?: never; @@ -61,14 +61,14 @@ export interface paths { 'x-deere-signature'?: components['parameters']['X-deere-signature2']; }; path: { - /** @description This is the crop type name */ - name: components['parameters']['Name']; + /** @description This is the crop type Id */ + id: components['parameters']['Id']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['CropTypeNameResponse']; + 200: components['responses']['CropTypeIdResponse']; 404: components['responses']['CropTypeNotFound']; 405: components['responses']['CropTypeMethodNotAllowed']; }; @@ -81,7 +81,7 @@ export interface paths { patch?: never; trace?: never; }; - '/cropTypes/{id}': { + '/cropTypes/{name}': { parameters: { query?: never; header?: never; @@ -100,14 +100,14 @@ export interface paths { 'x-deere-signature'?: components['parameters']['X-deere-signature2']; }; path: { - /** @description This is the crop type Id */ - id: components['parameters']['Id']; + /** @description This is the crop type name */ + name: components['parameters']['Name']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['CropTypeIdResponse']; + 200: components['responses']['CropTypeNameResponse']; 404: components['responses']['CropTypeNotFound']; 405: components['responses']['CropTypeMethodNotAllowed']; }; @@ -457,7 +457,7 @@ export interface components { }; }; /** @description A collection of crop types */ - CropTypeNameResponse: { + CropTypeIdResponse: { headers: { [name: string]: unknown; }; @@ -468,12 +468,19 @@ export interface components { * @example 1 */ total?: number; - values?: components['schemas']['CropType2'][]; + values?: components['schemas']['CropType3'][]; }; }; }; + /** @description The requested method is not allowed */ + CropTypeMethodNotAllowed: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description A collection of crop types */ - CropTypeIdResponse: { + CropTypeNameResponse: { headers: { [name: string]: unknown; }; @@ -484,10 +491,17 @@ export interface components { * @example 1 */ total?: number; - values?: components['schemas']['CropType3'][]; + values?: components['schemas']['CropType2'][]; }; }; }; + /** @description Not found */ + CropTypeNotFound: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description A collection of crop types */ CropTypeorganizationResponse: { headers: { @@ -504,32 +518,18 @@ export interface components { }; }; }; - /** @description The requested method is not allowed */ - CropTypeMethodNotAllowed: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Not found */ - CropTypeNotFound: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; }; parameters: { + /** @description This is the crop type Id */ + Id: string; + /** @description This is the crop type name */ + Name: string; /** @description Filter results based on status */ RecordFilter: string; /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ 'X-deere-signature': string; /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same GUID next time. */ 'X-deere-signature2': string; - /** @description This is the crop type name */ - Name: string; - /** @description This is the crop type Id */ - Id: string; /** @description This is the organization Id */ organizationId: string; }; diff --git a/src/types/generated/equipment-measurement.ts b/src/types/generated/equipment-measurement.ts index 56ceb37..8f58723 100644 --- a/src/types/generated/equipment-measurement.ts +++ b/src/types/generated/equipment-measurement.ts @@ -77,18 +77,57 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - PTOStatusValue: { + Accept: unknown; + ContentType: unknown; + EngineStateValue: { /** - * @description Status of PTO (Power Take-Off). ptoStatus possible values are: On, Off, Fault, or Unavailable. + * @description State of the engine. engineState only possible values are: On or Off. * @example On * @enum {string} */ - value?: 'On' | 'Off' | 'Fault' | 'Unavailable'; + value?: 'On' | 'Off'; + }; + /** Equipment */ + Equipment: { + /** + * Format: int64 + * @description Equipment Id of a configured equipment + * @example 7269 + */ + id?: number; + /** + * @description Make of a configured equipment, maxLength = 20 + * @example JOHN DEERE + */ + make?: string; + /** + * @description Name of a configured equipment (sometimes called model). maxLength + * @example 6120 + */ + name?: string; + }; + EquipmentMeasurements: { + /** + * Format: date-time + * @description Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order. + */ + timestamp?: string; + /** Format: date-time */ + measurements?: components['schemas']['Measurement'][]; + }; + EquipmentMeasurementsNew: { + /** + * Format: date-time + * @description Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order. + */ + timestamp?: string; + /** Format: date-time */ + measurements?: components['schemas']['MeasurementNew'][]; }; /** Measurement */ - MeasurementNew: { - Speed?: components['schemas']['MeasurementValueNew'] & string; - Heading?: components['schemas']['MeasurementValueNew'] & { + Measurement: { + Speed?: components['schemas']['MeasurementValue'] & string; + Heading?: components['schemas']['MeasurementValue'] & { /** * @description Name identifying which measurement this value corresponds to. heading only possible value for providing heading. * @enum {string} @@ -100,7 +139,7 @@ export interface components { */ unit?: 'degrees'; }; - FuelLevel?: components['schemas']['MeasurementValueNew'] & { + FuelLevel?: components['schemas']['MeasurementValue'] & { /** * @description Name identifying which measurement this value corresponds to. fuelLevelPercentage only possible value for providing fuel. * @enum {string} @@ -113,7 +152,7 @@ export interface components { unit?: 'percent'; }; /** Latitude */ - Latitude?: components['schemas']['MeasurementValueNew'] & { + Latitude?: components['schemas']['MeasurementValue'] & { /** * @description Name identifying which measurement this value corresponds to. latitude only possible value for providing latitude. * @enum {string} @@ -126,7 +165,7 @@ export interface components { unit?: 'degrees'; }; /** Longitude */ - Longitude?: components['schemas']['MeasurementValueNew'] & { + Longitude?: components['schemas']['MeasurementValue'] & { /** * @description Name identifying which measurement this value corresponds to. longitude only possible value for providing longitude. * @enum {string} @@ -147,7 +186,7 @@ export interface components { name?: 'engineState'; }; /** Odometer */ - Odometer?: components['schemas']['MeasurementValueNew'] & { + Odometer?: components['schemas']['MeasurementValue'] & { /** * @description Name identifying which measurement this value corresponds to. odometer only possible value for providing odometerReading. * @enum {string} @@ -160,7 +199,7 @@ export interface components { unit?: 'km'; }; /** EngineHours */ - EngineHours?: components['schemas']['MeasurementValueNew'] & { + EngineHours?: components['schemas']['MeasurementValue'] & { /** * @description Name identifying which measurement this value corresponds to. engineHours only possible value for providing engineHours. * @enum {string} @@ -172,69 +211,11 @@ export interface components { */ unit?: 'hours'; }; - EngineSpeed?: components['schemas']['MeasurementValueNew'] & { - /** - * @description Name identifying which measurement this value corresponds to. engineSpeed only possible value for providing engineSpeed. - * @enum {string} - */ - name?: 'engineSpeed'; - /** - * @description The unit of measure we should interpret the value as. RPM is the only supported unit for engineSpeed - * @enum {string} - */ - unit?: 'RPM'; - }; - PTOStatus?: components['schemas']['PTOStatusValue'] & { - /** - * @description Name identifying which measurement this value corresponds to. ptoStatus only possible value for providing ptoStatus. - * @enum {string} - */ - name?: 'ptoStatus'; - }; - }; - EquipmentMeasurements: { - /** - * Format: date-time - * @description Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order. - */ - timestamp?: string; - /** Format: date-time */ - measurements?: components['schemas']['Measurement'][]; - }; - EquipmentMeasurementsNew: { - /** - * Format: date-time - * @description Timestamp that the provided set of measurements were recorded. This will be valuable in determining the correct order of measurements in case they are provided out of order. - */ - timestamp?: string; - /** Format: date-time */ - measurements?: components['schemas']['MeasurementNew'][]; - }; - ContentType: unknown; - Accept: unknown; - /** Equipment */ - Equipment: { - /** - * Format: int64 - * @description Equipment Id of a configured equipment - * @example 7269 - */ - id?: number; - /** - * @description Make of a configured equipment, maxLength = 20 - * @example JOHN DEERE - */ - make?: string; - /** - * @description Name of a configured equipment (sometimes called model). maxLength - * @example 6120 - */ - name?: string; }; /** Measurement */ - Measurement: { - Speed?: components['schemas']['MeasurementValue'] & string; - Heading?: components['schemas']['MeasurementValue'] & { + MeasurementNew: { + Speed?: components['schemas']['MeasurementValueNew'] & string; + Heading?: components['schemas']['MeasurementValueNew'] & { /** * @description Name identifying which measurement this value corresponds to. heading only possible value for providing heading. * @enum {string} @@ -246,7 +227,7 @@ export interface components { */ unit?: 'degrees'; }; - FuelLevel?: components['schemas']['MeasurementValue'] & { + FuelLevel?: components['schemas']['MeasurementValueNew'] & { /** * @description Name identifying which measurement this value corresponds to. fuelLevelPercentage only possible value for providing fuel. * @enum {string} @@ -259,7 +240,7 @@ export interface components { unit?: 'percent'; }; /** Latitude */ - Latitude?: components['schemas']['MeasurementValue'] & { + Latitude?: components['schemas']['MeasurementValueNew'] & { /** * @description Name identifying which measurement this value corresponds to. latitude only possible value for providing latitude. * @enum {string} @@ -272,7 +253,7 @@ export interface components { unit?: 'degrees'; }; /** Longitude */ - Longitude?: components['schemas']['MeasurementValue'] & { + Longitude?: components['schemas']['MeasurementValueNew'] & { /** * @description Name identifying which measurement this value corresponds to. longitude only possible value for providing longitude. * @enum {string} @@ -293,7 +274,7 @@ export interface components { name?: 'engineState'; }; /** Odometer */ - Odometer?: components['schemas']['MeasurementValue'] & { + Odometer?: components['schemas']['MeasurementValueNew'] & { /** * @description Name identifying which measurement this value corresponds to. odometer only possible value for providing odometerReading. * @enum {string} @@ -306,7 +287,7 @@ export interface components { unit?: 'km'; }; /** EngineHours */ - EngineHours?: components['schemas']['MeasurementValue'] & { + EngineHours?: components['schemas']['MeasurementValueNew'] & { /** * @description Name identifying which measurement this value corresponds to. engineHours only possible value for providing engineHours. * @enum {string} @@ -318,16 +299,35 @@ export interface components { */ unit?: 'hours'; }; + EngineSpeed?: components['schemas']['MeasurementValueNew'] & { + /** + * @description Name identifying which measurement this value corresponds to. engineSpeed only possible value for providing engineSpeed. + * @enum {string} + */ + name?: 'engineSpeed'; + /** + * @description The unit of measure we should interpret the value as. RPM is the only supported unit for engineSpeed + * @enum {string} + */ + unit?: 'RPM'; + }; + PTOStatus?: components['schemas']['PTOStatusValue'] & { + /** + * @description Name identifying which measurement this value corresponds to. ptoStatus only possible value for providing ptoStatus. + * @enum {string} + */ + name?: 'ptoStatus'; + }; }; MeasurementValue: string; MeasurementValueNew: string; - EngineStateValue: { + PTOStatusValue: { /** - * @description State of the engine. engineState only possible values are: On or Off. + * @description Status of PTO (Power Take-Off). ptoStatus possible values are: On, Off, Fault, or Unavailable. * @example On * @enum {string} */ - value?: 'On' | 'Off'; + value?: 'On' | 'Off' | 'Fault' | 'Unavailable'; }; }; responses: { @@ -342,6 +342,11 @@ export interface components { }; }; parameters: { + /** + * @description The master record identifier of the equipment + * @example 1234 + */ + EquipmentId: number; /** * @description The identifier of the machine * @example 1234 @@ -352,11 +357,6 @@ export interface components { * @example 1234 */ OrganizationId: number; - /** - * @description The master record identifier of the equipment - * @example 1234 - */ - EquipmentId: number; }; requestBodies: never; headers: never; diff --git a/src/types/generated/equipment.ts b/src/types/generated/equipment.ts index 899043e..7de06a8 100644 --- a/src/types/generated/equipment.ts +++ b/src/types/generated/equipment.ts @@ -78,26 +78,6 @@ export interface paths { patch?: never; trace?: never; }; - '/organizations/{organizationId}/equipment': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Create equipment - * @description This resource allows the client to create a piece of equipment within a user’s organization. Getting Started The process of contributing equipment to John Deere can be broken down into three primary steps. Determine the Equipment’s model IDs Create the Equipment Contribute Measurements. Please see the for more information on uploading measurements for the created equipment. Determining the Equipment’s model Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated equipment ISG types for that specific equipment make and obtain a respective “id” for a specific ISG type you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will include all models with search string results and include make and isgType “id” as well as model “id”. Creating the Equipment Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org. In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment model IDs. type: Machine or Implement serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization. name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization. model: The id for the Model of the vehicle, found from the API in the previous step of this document. A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345). If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information. - */ - post: operations['createEquipment']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; '/equipment/{id}': { parameters: { query?: never; @@ -158,6 +138,26 @@ export interface paths { patch?: never; trace?: never; }; + '/equipmentISGTypes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get equipment ISG types + * @description This operation retrieves a list of Equipment ISG Types based on the supplied query parameters. + */ + get: operations['getEquipmentISGTypes']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/equipmentMakes': { parameters: { query?: never; @@ -198,7 +198,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentMakes/{equipmentMakeId}/equipmentTypes': { + '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes': { parameters: { query?: never; header?: never; @@ -206,11 +206,10 @@ export interface paths { cookie?: never; }; /** - * Get equipment types by make id - * @deprecated - * @description This resource allows the client to view equipment types by providing an equipment make ID. + * Get equipment ISG types by make id + * @description This operation retrieves a list of Equipment ISG Types for given makeId. */ - get: operations['getEquipmentTypesByMakeId']; + get: operations['getEquipmentISGTypesByMakeId']; put?: never; post?: never; delete?: never; @@ -219,7 +218,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentTypes': { + '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}': { parameters: { query?: never; header?: never; @@ -227,11 +226,10 @@ export interface paths { cookie?: never; }; /** - * Get equipment types - * @deprecated - * @description This resource allows the client to view equipment types and their associated IDs and names. + * Get equipment ISG type by make id and ISG type id + * @description This operation retrieves a single Equipment ISG Type for given makeId and isgTypeId.. */ - get: operations['getEquipmentTypes']; + get: operations['getEquipmentISGTypeByMakeIdAndISGTypeId']; put?: never; post?: never; delete?: never; @@ -240,7 +238,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentModels': { + '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels': { parameters: { query?: never; header?: never; @@ -248,10 +246,10 @@ export interface paths { cookie?: never; }; /** - * Get equipment models - * @description This resource allows the client to view equipment models in our reference database and their associated IDs and names. + * Get equipment models by make id and ISG type id + * @description This operation retrieves a list of Equipment Models based on given makeId and ISGtypeId. */ - get: operations['getEquipmentModels']; + get: operations['getEquipmentModelsByMakeIdAndISGTypeId']; put?: never; post?: never; delete?: never; @@ -260,7 +258,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentISGTypes': { + '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels/{equipmentModelId}': { parameters: { query?: never; header?: never; @@ -268,10 +266,10 @@ export interface paths { cookie?: never; }; /** - * Get equipment ISG types - * @description This operation retrieves a list of Equipment ISG Types based on the supplied query parameters. + * Get equipment model by make id, ISG type id and model id + * @description This operation retrieves a single Equipment Model based on given makeId, isgTypeId and modelId. */ - get: operations['getEquipmentISGTypes']; + get: operations['getEquipmentModelsByMakeIdAndISGTypeIdAndModelId']; put?: never; post?: never; delete?: never; @@ -280,7 +278,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes': { + '/equipmentMakes/{equipmentMakeId}/equipmentTypes': { parameters: { query?: never; header?: never; @@ -288,10 +286,11 @@ export interface paths { cookie?: never; }; /** - * Get equipment ISG types by make id - * @description This operation retrieves a list of Equipment ISG Types for given makeId. + * Get equipment types by make id + * @deprecated + * @description This resource allows the client to view equipment types by providing an equipment make ID. */ - get: operations['getEquipmentISGTypesByMakeId']; + get: operations['getEquipmentTypesByMakeId']; put?: never; post?: never; delete?: never; @@ -300,7 +299,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}': { + '/equipmentModels': { parameters: { query?: never; header?: never; @@ -308,10 +307,10 @@ export interface paths { cookie?: never; }; /** - * Get equipment ISG type by make id and ISG type id - * @description This operation retrieves a single Equipment ISG Type for given makeId and isgTypeId.. + * Get equipment models + * @description This resource allows the client to view equipment models in our reference database and their associated IDs and names. */ - get: operations['getEquipmentISGTypeByMakeIdAndISGTypeId']; + get: operations['getEquipmentModels']; put?: never; post?: never; delete?: never; @@ -320,7 +319,7 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels': { + '/equipmentTypes': { parameters: { query?: never; header?: never; @@ -328,10 +327,11 @@ export interface paths { cookie?: never; }; /** - * Get equipment models by make id and ISG type id - * @description This operation retrieves a list of Equipment Models based on given makeId and ISGtypeId. + * Get equipment types + * @deprecated + * @description This resource allows the client to view equipment types and their associated IDs and names. */ - get: operations['getEquipmentModelsByMakeIdAndISGTypeId']; + get: operations['getEquipmentTypes']; put?: never; post?: never; delete?: never; @@ -340,20 +340,20 @@ export interface paths { patch?: never; trace?: never; }; - '/equipmentMakes/{equipmentMakeId}/equipmentISGTypes/{equipmentISGTypeId}/equipmentModels/{equipmentModelId}': { + '/organizations/{organizationId}/equipment': { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; + get?: never; + put?: never; /** - * Get equipment model by make id, ISG type id and model id - * @description This operation retrieves a single Equipment Model based on given makeId, isgTypeId and modelId. + * Create equipment + * @description This resource allows the client to create a piece of equipment within a user’s organization. Getting Started The process of contributing equipment to John Deere can be broken down into three primary steps. Determine the Equipment’s model IDs Create the Equipment Contribute Measurements. Please see the for more information on uploading measurements for the created equipment. Determining the Equipment’s model Call the GET /equipmentMakes API endpoint to get a list of all equipment makes and a respective “id” of the equipment make you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes endpoint to get a list of associated equipment ISG types for that specific equipment make and obtain a respective “id” for a specific ISG type you require. Call the GET /equipmentMakes/{id}/equipmentISGTypes/{id}/equipmentModels to obtain the final “id” of the equipment model you require. Alternatively, you may call the GET /equipmentModels endpoint if you know the model name you are searching for. For example /equipmentModels?equipmentModelName=9RX*&embed=make,isgType which will include all models with search string results and include make and isgType “id” as well as model “id”. Creating the Equipment Make a POST request to the /organizations/{orgId}/equipment API to create the piece of equipment in the user’s org. In this request you will provide the type of the equipment, a serialNumber (optional), name (displayed to the user in Operations Center), and the equipment model IDs. type: Machine or Implement serialNumber: A string identifier that is 30 characters or fewer. Must be unique within an organization. name: The name displayed in Operation Center, 30 characters or fewer. Must be unique within an organization. model: The id for the Model of the vehicle, found from the API in the previous step of this document. A successful POST will result in a 201 Created response. The “location” header in the response will contain the URI to the new equipment, with the final segment being the organization specific machine ID (ie “https://equipmentapi.deere.com/isg/equipment/12345” is a link to the machine 12345). If you attempt to create a machine with a serialNumber that already exists in that organization, you get a response code 400 Bad Request. The body will include the error information. */ - get: operations['getEquipmentModelsByMakeIdAndISGTypeIdAndModelId']; - put?: never; - post?: never; + post: operations['createEquipment']; delete?: never; options?: never; head?: never; @@ -393,74 +393,6 @@ export interface components { invalidValue?: string; }; Errors: components['schemas']['Error'][]; - /** Link */ - link: { - /** @example nextPage */ - rel?: string; - /** - * @description This will be the relative URL. Users will prefix the base url as per their requirements. - * @example /equipment?pageOffset=10&itemSize=10 - */ - uri?: string; - }; - /** - * EquipmentIsgType - * @description Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata. - * @example { - * "name": "Tractor", - * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", - * "category": "Machine", - * "allowsCustomModel": true, - * "isgMarketSegment": "Agriculture", - * "deprecated": false, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" - * } - * } - */ - 'equipment-isg-type': components['schemas']['resource'] & { - /** - * @description The name of the ISG equipment type. - * @example Tractor - */ - name?: string; - /** - * @description Unique identifier for the ISG equipment type. - * @example 82115264-9385-460c-bfbe-177a59445fd9 - */ - ERID?: string; - /** - * @description The category of the ISG equipment type. - * @example Machine - * @enum {string} - */ - category?: 'Machine' | 'Implement' | 'Unknown'; - /** - * @description Indicates if the equipment ISG type allows custom models. - * @example true - */ - allowsCustomModel?: boolean; - /** - * @description The ISG market segment of the equipment ISG type. - * @example Agriculture - * @enum {string} - */ - isgMarketSegment?: - | 'Unknown' - | 'Agriculture' - | 'Construction' - | 'Engines & Components' - | 'Forestry' - | 'Turf'; - /** - * @description Indicates if the ISG equipment type is deprecated. - * @example false - */ - deprecated?: boolean; - }; /** @description Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.) */ RecordMetadata: { /** @@ -511,560 +443,353 @@ export interface components { */ readonly lastModifiedBySourceSystemUri?: string; }; - /** Resource */ - resourcewithoutLinks: { + /** AbstractMeasurement */ + abstractMeasurement: { + type?: string; + unit?: string; + }; + /** + * Capability + * @description List of capabilities of the equipment. + */ + capability: components['schemas']['resource-embed'] & { /** - * @description Unique id - * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 + * @description Capability + * @example Capability + * @enum {string} */ - id?: string; + '@type'?: 'Capability'; + capable?: boolean; + /** @enum {string} */ + type?: + | 'JDLINK_CONNECTIVITY' + | 'RDA' + | 'WDT' + | 'WIFI_CONNECTIVITY' + | 'CUSTOMER_SIM_CONNECTIVITY' + | 'LEGACY_CONNECTIVITY' + | 'PLANNED_WORK' + | 'DATA_SYNC_SETUP' + | 'CH_REMOTE_ADJUST' + | 'BASE_STATION' + | 'MY_MACHINE' + | 'RDC' + | 'REMOTE_START'; + inabilityDetails?: components['schemas']['inability-detail'][]; + }; + /** + * CommunicationModule + * @description Represents a communication module, including its serial number, IMEI, IMSI, ICCID, MSISDN, EID, type, service provider, state, and country calling code. + * @example { + * "serialNumber": "PCS171B372381", + * "imei": 123456789012345, + * "imsi": 310150123456789, + * "iccid": 89014103211118510000, + * "msisdn": 15555551234, + * "eid": 89014103211118510000, + * "type": "GSM", + * "serviceProvider": "ATT", + * "state": "ACTIVE", + * "countryCallingCode": 1 + * } + */ + 'communication-module': components['schemas']['resource-embed'] & { /** - * @description Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - * @example Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other + * @description CommunicationModule + * @example CommunicationModule + * @enum {string} */ - '@type'?: string; - }; - /** Resource */ - resource: { - links?: components['schemas']['link'][]; + '@type'?: 'CommunicationModule'; /** - * @description Unique id - * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 + * @description Serial number of the communication gateway + * @example PCS171B372381 */ - id?: string; + serialNumber?: string; /** - * @description Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - * @example Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other + * @description International Mobile Equipment Identity of the communication module. + * @example 123456789012345 */ - '@type'?: string; - }; - /** Resource */ - 'resource-embed': { - /** - * @description Unique id - * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 - */ - id?: string; - /** - * @description Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - * @example Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other - */ - '@type'?: string; - }; - /** Resource */ - 'organization-embed': { + imei?: string; /** - * @description Unique id - * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 + * @description International Mobile Subscriber Identity of the communication module. + * @example 310150123456789 */ - id?: string; + imsi?: string; /** - * @description Resource - * @example Resource + * @description Integrated Circuit Card Identifier of the communication module. + * @example 89014103211118510000 */ - '@type'?: string; - }; - /** - * EquipmentMake - * @description Represents the make of the equipment, including its name, unique identifier, and metadata. - */ - 'equipment-make-embed': { + iccid?: string; /** - * @description EquipmentMake - * @example EquipmentMake + * @description Mobile Station International Subscriber Directory Number of the communication module. + * @example 15555551234 */ - '@type'?: string; + msisdn?: string; /** - * @description Unique identifier for the equipment make. - * @example 1 + * @description Embedded Identity Document of the communication module. + * @example 89014103211118510000 */ - id?: string; + eid?: string; /** - * @description The name of the equipment make. - * @example JOHN DEERE + * @description Type of the communication module. + * @example GSM + * @enum {string} */ - name?: string; + type?: 'GSM' | 'SATELLITE' | 'CDMA' | 'COS'; /** - * @description Unique identifier for the equipment make. - * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 + * @example ATT + * @enum {string} */ - ERID?: string; + serviceProvider?: + | 'IRIDIUM' + | 'ATT' + | 'JASPER' + | 'VERIZON' + | 'COS' + | 'COST' + | 'CUBIC' + | 'ATTIOT'; /** - * @description Indicates if the equipment make is certified. - * @example true + * @description Subscription state of the communication gateway + * @example ACTIVE + * @enum {string} */ - certified?: boolean; + state?: + | 'NEW' + | 'ACTIVE' + | 'INACTIVE' + | 'EXPIRED' + | 'PENDING_ACTIVE' + | 'PENDING_INACTIVE' + | 'PENDING_EXPIRED' + | 'PENDING_VERIFICATION' + | 'PENDING_WDT' + | 'TERMINATED'; /** - * @description Indicates if the equipment make is deereOrSubsidiary. - * @example true + * @description Country calling code of the communication module. + * @example 1 */ - deereOrSubsidiary?: boolean; + countryCallingCode?: string; }; - /** - * EquipmentMake - * @description Represents the make of the equipment, including its name, unique identifier, and metadata. - * @example { - * "id": 1, - * "name": "JOHN DEERE", - * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3", - * "certified": true, - * "deereOrSubsidiary": true, - * "deprecated": false, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" - * } - * } - */ - 'equipment-make': components['schemas']['resource'] & { + /** Equipment Creation */ + createEquipment: { /** - * @description The name of the equipment make. - * @example JOHN DEERE + * @description Equipment Name. + * @example Cates 8360R 055358 */ name?: string; /** - * @description Unique identifier for the equipment make. - * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - */ - ERID?: string; - /** - * @description Indicates if the equipment make is certified. - * @example true - */ - certified?: boolean; - /** - * @description Indicates if the equipment make is deereOrSubsidiary. - * @example true + * @description Serial Number of the Equipment and passed on the query parameter + * @example Must be unique string. Max character count is 30. */ - deereOrSubsidiary?: boolean; + serialNumber?: string; /** - * @description Indicates if the equipment make is deprecated. - * @example false + * Model of the equipment. + * @description Model of the equipment. */ - deprecated?: boolean; + model?: { + /** + * @description Unique id + * @example 3 | 158df9ff-334a-4e0d-86cc-3adca17a9686 + */ + id?: string; + /** + * @description EquipmentModel + * @example EquipmentModel + */ + '@type'?: string; + }; + }; + /** DefinedTypeRepresentationValue */ + definedTypeRepresentationValue: { + value?: components['schemas']['measurementAsString']; }; /** - * EquipmentType - * @deprecated - * @description Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata. + * Device + * @description Represents a device, including its serial number, certification status, make, type, model, organization, and other attributes. * @example { - * "id": 217, - * "name": "Two-wheel Drive Tractors - 140 Hp And Above", - * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", - * "category": "Machine", - * "certified": true, - * "marketSegment": "Agriculture", - * "icon": { - * "url": "https://example.com/icon.png", - * "description": "Icon representing the equipment type" - * }, - * "deprecated": false, - * "allowsCustomModel": true, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" - * } - * } - */ - 'equipment-type': components['schemas']['resource'] & { - /** - * @description The name of the equipment type. - * @example Two-wheel Drive Tractors - 140 Hp And Above - */ - name?: string; - /** - * @description Unique identifier for the equipment type. - * @example 82115264-9385-460c-bfbe-177a59445fd9 - */ - ERID?: string; - /** - * @description The category of the equipment type. - * @example Machine - * @enum {string} - */ - category?: 'Machine' | 'Implement' | 'Unknown'; - /** - * @description Indicates if the equipment type is certified. - * @example true - */ - certified?: boolean; - /** - * @description Indicates if the equipment type allows custom models. - * @example true - */ - allowsCustomModel?: boolean; - /** - * @description The market segment of the equipment type. - * @example Agriculture - * @enum {string} - */ - marketSegment?: - | 'Unknown' - | 'Agriculture' - | 'Commercial Worksite Products' - | 'Construction' - | 'Engines & Components' - | 'Forestry' - | 'Mining' - | 'Turf'; - icon?: components['schemas']['equipment-icon']; - /** - * @description Indicates if the equipment type is deprecated. - * @example false - */ - deprecated?: boolean; - }; - /** - * EquipmentType - * @description Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata. - */ - 'equipment-type-embed': { - /** - * @description EquipmentType - * @example EquipmentType - */ - '@type'?: string; - /** - * @description Unique identifier for the equipment type. - * @example 222 - */ - id?: string; - /** - * @description The name of the equipment type. - * @example Combine - */ - name?: string; - /** - * @description Unique identifier for the equipment type. - * @example 80619ff7-11fa-11ee-bb58-0e5cd6a962d7 - */ - ERID?: string; - }; - /** - * IconStyle - * @description icon style - */ - 'icon-style': { - /** @description primary color of the icon style */ - primaryColor?: string; - /** @description secondary color of the icon style */ - secondaryColor?: string; - }; - /** EquipmentIcon */ - 'equipment-icon': components['schemas']['resource'] & { - /** - * @description The name of the equipment icon. - * @example JOHN DEERE - */ - name?: string; - iconStyle?: components['schemas']['icon-style']; - }; - /** EquipmentModel */ - 'equipment-model-details': { - /** @example 8360R */ - name?: string; - /** @example 158df9ff-334a-4e0d-86cc-3adca17a9686 */ - ERID?: string; - /** @enum {string} */ - category?: 'Machine' | 'Implement' | 'Unknown'; - make?: components['schemas']['equipment-make-embed']; - type?: components['schemas']['equipment-type-embed']; - icon?: components['schemas']['equipment-icon']; - }; - /** - * EquipmentISGType - * @description Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata. - */ - 'equipment-isg-type-embed': { - /** - * @description EquipmentISGType - * @example EquipmentISGType - */ - '@type'?: string; - /** - * @description Unique identifier for the ISG equipment type. - * @example 2 - */ - id?: string; - /** - * @description The name of the ISG equipment type. - * @example Combine - */ - name?: string; - /** - * @description Unique identifier for the ISG equipment type. - * @example d8dce5b0-cc8d-4c34-afac-27d93793bd86 - */ - ERID?: string; - }; - /** - * EquipmentModel - * @description Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. - * @example { - * "name": "8360R", - * "ERID": "158df9ff-334a-4e0d-86cc-3adca17a9686", - * "category": "Machine", - * "deprecated": false, - * "certified": false, - * "make": { - * "name": "JOHN DEERE", - * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3", - * "deprecated": false, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" - * } + * "@type": "Device", + * "serialNumber": "PCMA4GF511111", + * "make": { + * "name": "JOHN DEERE", + * "id": "1", + * "ERID": "f8b43e74-3088-4a38-9d66-30aae1ed1111" * }, * "type": { - * "name": "Two-wheel Drive Tractors - 140 Hp And Above", - * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", - * "category": "Machine", - * "certified": true, - * "marketSegment": "Agriculture", - * "icon": { - * "url": "https://example.com/icon.png", - * "description": "Icon representing the equipment type" + * "name": "Modem", + * "commonName": "TelematicsGateway", + * "id": "1", + * "ERID": "d469a324-2036-11ee-bb58-0e5cd6a91111" + * }, + * "model": { + * "name": "JDLink Modem-4G", + * "id": "3", + * "ERID": "f413bba6-9f39-410c-866f-c800bf701111" + * }, + * "firmwareVersion": { + * "name": "40.02.049" + * }, + * "organization": { + * "id": "21111" + * }, + * "organizationRole": { + * "type": "Controlling", + * "effectiveTS": "2024-04-30T17:53:57Z", + * "event": "PAIRING" + * }, + * "archived": false, + * "decommissioned": false, + * "stolen": false, + * "principalId": "911111", + * "equipment": { + * "name": "Cattle 9700 SPFH", + * "serialNumber": "1Z09700YAKU621111", + * "isSerialNumberCertified": true, + * "modelYear": "2019", + * "make": { + * "name": "JOHN DEERE", + * "certified": true, + * "deereOrSubsidiary": true, + * "id": "1", + * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c1111" * }, - * "deprecated": false, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" - * } + * "type": { + * "name": "Forage Harvester", + * "id": "162", + * "ERID": "34b07db5-11fb-11ee-8580-0ed5f7261111" + * }, + * "isgType": { + * "name": "Forage Harvester", + * "id": "6", + * "ERID": "99edf0e0-4abb-42d3-9798-327439a31111" + * }, + * "model": { + * "name": 9700, + * "certified": true, + * "id": "581111", + * "ERID": "2c8c951e-070a-4e1c-824d-72cca6e71111" + * }, + * "principalId": "661111", + * "archived": false, + * "organization": { + * "id": "22967" + * }, + * "organizationRole": { + * "type": "Controlling", + * "effectiveTS": "2024-04-30T17:53:56.695Z", + * "event": "PAIRING" + * }, + * "isCsc": false, + * "id": "661111", + * "ERID": "23fe3ea0-1f95-4ae6-8e12-968729cd1111" * }, - * "isgType": { - * "name": "Tractor", - * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", - * "category": "Machine", - * "deprecated": false, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" + * "capabilities": [ + * { + * "type": "JDLINK_CONNECTIVITY", + * "capable": true + * }, + * { + * "type": "WIFI_CONNECTIVITY", + * "capable": true + * } + * ], + * "pairingDetails": { + * "paired": true, + * "associationTimestamp": "2024-09-28T17:30:24Z", + * "disassociationTimestamp": null, + * "confirmationTimestamp": "2024-10-23T22:17:22Z", + * "location": { + * "lat": 52.780639, + * "lon": -122.453222, + * "slope": null * } * }, - * "icon": { - * "url": "https://example.com/icon.png", - * "description": "Icon representing the equipment model" + * "messagesRestricted": false, + * "pairingStatus": "PAIRED", + * "orderNumber": "961111", + * "highFidelityConfigurationVersion": { + * "name": "1Hz_L3X40FT4JDPS0x00_ISG_X8X9SPFH_63978_2024.008.001" * }, - * "recordMetaData": { - * "createdBy": "user123", - * "createdAt": "2023-10-01T12:00:00Z", - * "updatedBy": "user456", - * "updatedAt": "2023-10-02T12:00:00Z" - * } + * "genericConfigurationVersion": { + * "name": "1623F1EF-62C2-4B8B-B5EA-A0FFD6EA76F8" + * }, + * "communicationModules": [ + * { + * "imei": "014642005101111", + * "imsi": "310170835961111", + * "iccid": "89011704278359691111", + * "type": "GSM", + * "serviceProvider": "Jasper", + * "state": "Active", + * "id": "632111" + * } + * ], + * "id": "915111", + * "ERID": "fb537c94-14f1-11ef-871b-1287bcef1111" * } */ - 'equipment-model': components['schemas']['resource'] & { - /** - * @description The name of the equipment model. - * @example 8360R - */ - name?: string; - /** - * @description Unique identifier for the equipment model. - * @example 158df9ff-334a-4e0d-86cc-3adca17a9686 - */ - ERID?: string; + device: components['schemas']['resource-embed'] & { /** - * @description The category of the equipment model. - * @example Machine + * @description Device | Display | PositionReceiver | TelematicsGateway + * @example Device * @enum {string} */ - category?: 'Machine' | 'Implement' | 'Unknown'; - /** - * @description Indicates if the equipment model is deprecated. - * @example false - */ - deprecated?: boolean; - /** - * @description Indicates if the equipment model is certified. - * @example false - */ - certified?: boolean; - make?: components['schemas']['equipment-make']; - type?: components['schemas']['equipment-type']; - isgType?: components['schemas']['equipment-isg-type']; - }; - /** - * EquipmentModel - * @description Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. - */ - 'equipment-model-embed': { - /** - * @description EquipmentModel - * @example EquipmentModel - */ - '@type'?: string; - /** - * @description Unique identifier for the equipment model. - * @example 65985 - */ - id?: string; - /** - * @description The name of the equipment model. - * @example S680 - */ - name?: string; + '@type'?: 'Device' | 'Display' | 'PositionReceiver' | 'TelematicsGateway'; /** - * @description Unique identifier for the equipment model. - * @example f2e7d596-35c6-11e7-af34-123e49453e98 + * @description Serial number of the device and passed on the query parameter + * @example PCS171B372381 */ - ERID?: string; + serialNumber?: string; /** - * @description Indicates if the equipment model is certified. + * @description True if this is an official device (we have PI information about it). * @example true */ - certified?: boolean; - }; - /** - * EquipmentModel - * @description Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. - * @example { - * "name": "8360R", - * "ERID": "158df9ff-334a-4e0d-86cc-3adca17a9686", - * "category": "Machine", - * "certified": false - * } - */ - 'equipment-model-no-embed': components['schemas']['resource'] & { - /** - * @description The name of the equipment model. - * @example 8360R - */ - name?: string; + isSerialNumberCertified?: boolean; + make?: components['schemas']['device-make']; + type?: components['schemas']['device-type']; + model?: components['schemas']['device-model']; + organization?: components['schemas']['organization-embed']; /** - * @description Unique identifier for the equipment model. - * @example 158df9ff-334a-4e0d-86cc-3adca17a9686 + * @description Unique identifier of the Device. + * @example fcdc83cb-8840-4215-84b5-1769889db932 */ ERID?: string; + firmwareVersion?: components['schemas']['version']; + capabilities?: components['schemas']['capability'][]; + equipment?: components['schemas']['equipment']; /** - * @description The category of the equipment model. - * @example Machine - * @enum {string} + * @description Indicates if the device is archived. + * @example true */ - category?: 'Machine' | 'Implement' | 'Unknown'; + archived?: boolean; /** - * @description Indicates if the equipment model is certified. + * @description Indicates if the device is decommissioned. * @example false */ - certified?: boolean; - }; - /** - * Identifier of Equipment - * @description Identifier of the Equipment like DE-13, DE-17, ERID... - */ - identifier: { + decommissioned?: boolean; /** - * @description Type of identifier. - * @enum {string} + * @description Indicates if the device is stolen. + * @example false */ - type?: 'serialNumber' | 'ERID'; + stolen?: boolean; /** - * @description Value of identifier. - * @example RW8360R055358 + * @description Unique id for principal device + * @example 12345 */ - value?: string; - }; - /** - * OrganizationRole - * @description Represents the role of an organization, including its type, effective timestamp, and event. - * @example { - * "type": "Controlling", - * "effectiveTS": "2023-10-01T12:00:00Z", - * "event": "CREATION" - * } - */ - 'organization-role': { + principalId?: string; + organizationRole?: components['schemas']['organization-role']; /** - * @description The type of the organization role. - * @example Controlling - * @enum {string} + * @description Order number associated with the device. + * @example 987654321 */ - type?: 'Controlling' | 'NonControlling'; + orderNumber?: string; + pairingDetails?: components['schemas']['pairing-details']; /** * Format: date-time - * @description The timestamp when the role becomes effective. - * @example 2023-10-01T12:00:00Z - */ - effectiveTS?: string; - /** - * @description The event associated with the organization role. - * @example CREATION - * @enum {string} - */ - event?: - | 'CREATION' - | 'TRANSFER' - | 'SUBSCRIPTION' - | 'PAIRING' - | 'ORDER' - | 'COMMANDED' - | 'DECOMMISSION'; - /** @example true */ - inPossession?: boolean; - }; - /** AbstractMeasurement */ - abstractMeasurement: { - type?: string; - unit?: string; - }; - /** - * MeasurementAsDouble - * @description measurement as double - */ - measurementAsDouble: components['schemas']['abstractMeasurement'] & { - /** @description type of measurement */ - type?: string; - /** @description unit of measurement */ - unit?: string; - /** - * Format: double - * @description measurement value as double - */ - valueAsDouble?: number; - }; - /** VariableRepresentationValue */ - variableRepresentationValue: { - variable?: components['schemas']['measurementAsDouble']; - }; - /** - * MeasurementAsString - * @description measurement as string - */ - measurementAsString: components['schemas']['abstractMeasurement'] & { - /** @description type of measurement */ - type?: string; - /** @description unit of measurement */ - unit?: string; - /** @description measurement value as string */ - valueAsString?: string; - }; - /** DefinedTypeRepresentationValue */ - definedTypeRepresentationValue: { - value?: components['schemas']['measurementAsString']; - }; - /** - * Offsets - * @description Represents the offsets of a device, including its variable and defined type representation values. - */ - offsets: components['schemas']['resource-embed'] & { - /** - * @description Offsets - * @example Offsets - * @enum {string} + * @description Timestamp when the device was archived. + * @example 2021-03-10T19:19:46.420Z */ - '@type'?: 'Offsets'; - variableRepresentationValues?: components['schemas']['variableRepresentationValue'][]; - definedTypeRepresentationValues?: components['schemas']['definedTypeRepresentationValue'][]; + archivedTimestamp?: string; }; /** * DeviceMake @@ -1080,46 +805,14 @@ export interface components { * @example DeviceMake * @enum {string} */ - '@type'?: 'DeviceMake'; - /** - * @description The name of the device make. - * @example JOHN DEERE - */ - name?: string; - /** - * @description Unique identifier of the device make. - * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 - */ - ERID?: string; - }; - /** - * DeviceType - * @description Represents the type of a device, including its name, common name, and unique identifier (ERID). - * @example { - * "name": "Modem", - * "commonName": "TelematicsGateway", - * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" - * } - */ - 'device-type': components['schemas']['resource-embed'] & { - /** - * @description DeviceType - * @example DeviceType - * @enum {string} - */ - '@type'?: 'DeviceType'; - /** - * @description The name of the device type. - * @example Modem - */ - name?: string; + '@type'?: 'DeviceMake'; /** - * @description The common name of the device type. - * @example TelematicsGateway + * @description The name of the device make. + * @example JOHN DEERE */ - commonName?: string; + name?: string; /** - * @description Unique identifier of the device type. + * @description Unique identifier of the device make. * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 */ ERID?: string; @@ -1162,68 +855,69 @@ export interface components { type?: components['schemas']['device-type']; }; /** - * Version - * @description Represents the version of a device or software, including its name. + * DeviceType + * @description Represents the type of a device, including its name, common name, and unique identifier (ERID). * @example { - * "name": "3.16.1171" + * "name": "Modem", + * "commonName": "TelematicsGateway", + * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3" * } */ - version: components['schemas']['resource-embed'] & { + 'device-type': components['schemas']['resource-embed'] & { /** - * @description Version - * @example Version + * @description DeviceType + * @example DeviceType * @enum {string} */ - '@type'?: 'Version'; + '@type'?: 'DeviceType'; /** - * @description The name of the version. - * @example 3.16.1171 + * @description The name of the device type. + * @example Modem */ name?: string; + /** + * @description The common name of the device type. + * @example TelematicsGateway + */ + commonName?: string; + /** + * @description Unique identifier of the device type. + * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 + */ + ERID?: string; }; - /** InabilityDetail */ - 'inability-detail': components['schemas']['resource'] & { - /** @example RC14.8.1 */ - code?: string; - /** @example REGISTRATION */ - type?: string; - /** @example SIM registration is required */ - description?: string; + /** Display */ + display: components['schemas']['device'] & { + /** + * @description Display + * @example Display + * @enum {string} + */ + '@type'?: 'Display'; + monitors?: components['schemas']['display-monitors'][]; }; - /** - * Capability - * @description List of capabilities of the equipment. - */ - capability: components['schemas']['resource-embed'] & { + /** Monitor */ + 'display-monitors': components['schemas']['resource-embed'] & { /** - * @description Capability - * @example Capability + * @description Monitor + * @example Monitor * @enum {string} */ - '@type'?: 'Capability'; - capable?: boolean; - /** @enum {string} */ - type?: - | 'JDLINK_CONNECTIVITY' - | 'RDA' - | 'WDT' - | 'WIFI_CONNECTIVITY' - | 'CUSTOMER_SIM_CONNECTIVITY' - | 'LEGACY_CONNECTIVITY' - | 'PLANNED_WORK' - | 'DATA_SYNC_SETUP' - | 'CH_REMOTE_ADJUST' - | 'BASE_STATION' - | 'MY_MACHINE' - | 'RDC' - | 'REMOTE_START'; - inabilityDetails?: components['schemas']['inability-detail'][]; + '@type'?: 'Monitor'; + /** @example Monitor_0 */ + type?: string; + /** @example PCG410A015392 */ + serialNumber?: string; + /** @example 800 */ + resolutionWidth?: number; + /** @example 600 */ + resolutionHeight?: number; }; /** * Equipment * @description Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes. */ - equipmentForList: components['schemas']['resource'] & { + equipment: components['schemas']['resource'] & { /** * @description Equipment | Machine | Implement * @example Equipment @@ -1236,524 +930,852 @@ export interface components { */ name?: string; /** - * @description Unique 64-bit ISO NAME used to identify the controller during address claim. - * @example b00082000422ed1d + * @description Unique 64-bit ISO NAME used to identify the controller during address claim. + * @example b00082000422ed1d + */ + isoName?: string; + /** + * @description Serial Number of the Equipment and passed on the query parameter + * @example 1RW8360RLCD055358 + */ + serialNumber?: string; + /** + * @description VIN or PIN, more than Serial Number, of the Engine. + * @example RG6090L839275 + */ + engineSerialNumber?: string; + /** + * @description True if this is an official equipment (we have PI information about it). + * @example true + */ + isSerialNumberCertified?: boolean; + /** + * @description Year of model. + * @example 2019 + */ + modelYear?: string; + make?: components['schemas']['equipment-make-embed']; + type?: components['schemas']['equipment-type-embed']; + isgType?: components['schemas']['equipment-isg-type-embed']; + model?: components['schemas']['equipment-model-embed']; + organization?: components['schemas']['organization-embed']; + /** + * @description Indicates if the equipment is capable of telematics. + * @example true + */ + telematicsCapable?: boolean; + /** + * @description Indicates if the equipment is archived. + * @example true + */ + archived?: boolean; + /** + * @description Unique id for principal equipment + * @example 12345 + */ + principalId?: string; + organizationRole?: components['schemas']['organization-role']; + /** + * @description Unique identifier of the Equipment. + * @example fcdc83cb-8840-4215-84b5-1769889db932 + */ + ERID?: string; + /** @description List of alternate identifiers of the Equipment like DE-13, DE-17, ERID... */ + alternateIdentifiers?: components['schemas']['identifier'][]; + icon?: components['schemas']['equipment-icon']; + offsets?: components['schemas']['offsets']; + /** @description List of devices paired with the equipment. */ + devices?: components['schemas']['device'][]; + /** @description List of capabilities of the equipment. */ + capabilities?: components['schemas']['capability'][]; + pairingDetails?: components['schemas']['pairing-details']; + /** + * Format: date-time + * @description Timestamp when the equipment was archived. + * @example 2021-03-10T19:19:46.420Z + */ + archivedTimestamp?: string; + /** @description List of equipment that was merged. */ + mergedEquipment?: components['schemas']['machine'][]; + /** + * @description Indicates if the equipment is CSC equipment or not. + * @example true + */ + isCsc?: boolean; + }; + /** EquipmentIcon */ + 'equipment-icon': components['schemas']['resource'] & { + /** + * @description The name of the equipment icon. + * @example JOHN DEERE + */ + name?: string; + iconStyle?: components['schemas']['icon-style']; + }; + /** + * EquipmentIsgType + * @description Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata. + * @example { + * "name": "Tractor", + * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", + * "category": "Machine", + * "allowsCustomModel": true, + * "isgMarketSegment": "Agriculture", + * "deprecated": false, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" + * } + * } + */ + 'equipment-isg-type': components['schemas']['resource'] & { + /** + * @description The name of the ISG equipment type. + * @example Tractor + */ + name?: string; + /** + * @description Unique identifier for the ISG equipment type. + * @example 82115264-9385-460c-bfbe-177a59445fd9 + */ + ERID?: string; + /** + * @description The category of the ISG equipment type. + * @example Machine + * @enum {string} + */ + category?: 'Machine' | 'Implement' | 'Unknown'; + /** + * @description Indicates if the equipment ISG type allows custom models. + * @example true + */ + allowsCustomModel?: boolean; + /** + * @description The ISG market segment of the equipment ISG type. + * @example Agriculture + * @enum {string} + */ + isgMarketSegment?: + | 'Unknown' + | 'Agriculture' + | 'Construction' + | 'Engines & Components' + | 'Forestry' + | 'Turf'; + /** + * @description Indicates if the ISG equipment type is deprecated. + * @example false + */ + deprecated?: boolean; + }; + /** + * EquipmentISGType + * @description Represents the ISG type of equipment, including its name, unique identifier, category, deprecation status, and metadata. + */ + 'equipment-isg-type-embed': { + /** + * @description EquipmentISGType + * @example EquipmentISGType + */ + '@type'?: string; + /** + * @description Unique identifier for the ISG equipment type. + * @example 2 + */ + id?: string; + /** + * @description The name of the ISG equipment type. + * @example Combine + */ + name?: string; + /** + * @description Unique identifier for the ISG equipment type. + * @example d8dce5b0-cc8d-4c34-afac-27d93793bd86 */ - isoName?: string; + ERID?: string; + }; + /** + * EquipmentMake + * @description Represents the make of the equipment, including its name, unique identifier, and metadata. + * @example { + * "id": 1, + * "name": "JOHN DEERE", + * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3", + * "certified": true, + * "deereOrSubsidiary": true, + * "deprecated": false, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" + * } + * } + */ + 'equipment-make': components['schemas']['resource'] & { /** - * @description Serial Number of the Equipment and passed on the query parameter - * @example 1RW8360RLCD055358 + * @description The name of the equipment make. + * @example JOHN DEERE */ - serialNumber?: string; + name?: string; /** - * @description VIN or PIN, more than Serial Number, of the Engine. - * @example RG6090L839275 + * @description Unique identifier for the equipment make. + * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 */ - engineSerialNumber?: string; + ERID?: string; /** - * @description True if this is an official equipment (we have PI information about it). + * @description Indicates if the equipment make is certified. * @example true */ - isSerialNumberCertified?: boolean; + certified?: boolean; /** - * @description Year of model. - * @example 2019 + * @description Indicates if the equipment make is deereOrSubsidiary. + * @example true */ - modelYear?: string; - make?: components['schemas']['equipment-make-embed']; - type?: components['schemas']['equipment-type-embed']; - isgType?: components['schemas']['equipment-isg-type-embed']; - model?: components['schemas']['equipment-model-embed']; - organization?: components['schemas']['organization-embed']; + deereOrSubsidiary?: boolean; /** - * @description Indicates if the equipment is capable of telematics. - * @example true + * @description Indicates if the equipment make is deprecated. + * @example false */ - telematicsCapable?: boolean; + deprecated?: boolean; + }; + /** + * EquipmentMake + * @description Represents the make of the equipment, including its name, unique identifier, and metadata. + */ + 'equipment-make-embed': { /** - * @description Indicates if the equipment is archived. - * @example true + * @description EquipmentMake + * @example EquipmentMake */ - archived?: boolean; + '@type'?: string; /** - * @description Unique id for principal equipment - * @example 12345 + * @description Unique identifier for the equipment make. + * @example 1 */ - principalId?: string; - organizationRole?: components['schemas']['organization-role']; + id?: string; /** - * @description Unique identifier of the Equipment. - * @example fcdc83cb-8840-4215-84b5-1769889db932 + * @description The name of the equipment make. + * @example JOHN DEERE + */ + name?: string; + /** + * @description Unique identifier for the equipment make. + * @example db18bdc4-025a-11eb-97e4-0e8d658c7ba3 */ ERID?: string; - /** @description List of alternate identifiers of the Equipment like DE-13, DE-17, ERID... */ - alternateIdentifiers?: components['schemas']['identifier'][]; - icon?: components['schemas']['equipment-icon']; - /** @description List of devices paired with the equipment. */ - devices?: components['schemas']['device'][]; - pairingDetails?: components['schemas']['pairing-details']; /** - * Format: date-time - * @description Timestamp when the equipment was archived. - * @example 2021-03-10T19:19:46.420Z + * @description Indicates if the equipment make is certified. + * @example true */ - archivedTimestamp?: string; - /** @description List of equipment that was merged. */ - mergedEquipment?: components['schemas']['machine'][]; + certified?: boolean; /** - * @description Indicates if the equipment is CSC equipment or not. + * @description Indicates if the equipment make is deereOrSubsidiary. * @example true */ - isCsc?: boolean; + deereOrSubsidiary?: boolean; }; /** - * Equipment - * @description Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes. + * EquipmentModel + * @description Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. + * @example { + * "name": "8360R", + * "ERID": "158df9ff-334a-4e0d-86cc-3adca17a9686", + * "category": "Machine", + * "deprecated": false, + * "certified": false, + * "make": { + * "name": "JOHN DEERE", + * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c7ba3", + * "deprecated": false, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" + * } + * }, + * "type": { + * "name": "Two-wheel Drive Tractors - 140 Hp And Above", + * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", + * "category": "Machine", + * "certified": true, + * "marketSegment": "Agriculture", + * "icon": { + * "url": "https://example.com/icon.png", + * "description": "Icon representing the equipment type" + * }, + * "deprecated": false, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" + * } + * }, + * "isgType": { + * "name": "Tractor", + * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", + * "category": "Machine", + * "deprecated": false, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" + * } + * }, + * "icon": { + * "url": "https://example.com/icon.png", + * "description": "Icon representing the equipment model" + * }, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" + * } + * } */ - equipment: components['schemas']['resource'] & { + 'equipment-model': components['schemas']['resource'] & { /** - * @description Equipment | Machine | Implement - * @example Equipment - * @enum {string} + * @description The name of the equipment model. + * @example 8360R */ - '@type'?: 'Equipment' | 'Machine' | 'Implement'; + name?: string; /** - * @description Equipment Name. - * @example Cates 8360R 055358 + * @description Unique identifier for the equipment model. + * @example 158df9ff-334a-4e0d-86cc-3adca17a9686 */ - name?: string; + ERID?: string; /** - * @description Unique 64-bit ISO NAME used to identify the controller during address claim. - * @example b00082000422ed1d + * @description The category of the equipment model. + * @example Machine + * @enum {string} */ - isoName?: string; + category?: 'Machine' | 'Implement' | 'Unknown'; /** - * @description Serial Number of the Equipment and passed on the query parameter - * @example 1RW8360RLCD055358 + * @description Indicates if the equipment model is deprecated. + * @example false */ - serialNumber?: string; + deprecated?: boolean; /** - * @description VIN or PIN, more than Serial Number, of the Engine. - * @example RG6090L839275 + * @description Indicates if the equipment model is certified. + * @example false */ - engineSerialNumber?: string; + certified?: boolean; + make?: components['schemas']['equipment-make']; + type?: components['schemas']['equipment-type']; + isgType?: components['schemas']['equipment-isg-type']; + }; + /** EquipmentModel */ + 'equipment-model-details': { + /** @example 8360R */ + name?: string; + /** @example 158df9ff-334a-4e0d-86cc-3adca17a9686 */ + ERID?: string; + /** @enum {string} */ + category?: 'Machine' | 'Implement' | 'Unknown'; + make?: components['schemas']['equipment-make-embed']; + type?: components['schemas']['equipment-type-embed']; + icon?: components['schemas']['equipment-icon']; + }; + /** + * EquipmentModel + * @description Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. + */ + 'equipment-model-embed': { /** - * @description True if this is an official equipment (we have PI information about it). - * @example true + * @description EquipmentModel + * @example EquipmentModel */ - isSerialNumberCertified?: boolean; + '@type'?: string; /** - * @description Year of model. - * @example 2019 + * @description Unique identifier for the equipment model. + * @example 65985 */ - modelYear?: string; - make?: components['schemas']['equipment-make-embed']; - type?: components['schemas']['equipment-type-embed']; - isgType?: components['schemas']['equipment-isg-type-embed']; - model?: components['schemas']['equipment-model-embed']; - organization?: components['schemas']['organization-embed']; + id?: string; /** - * @description Indicates if the equipment is capable of telematics. - * @example true + * @description The name of the equipment model. + * @example S680 */ - telematicsCapable?: boolean; + name?: string; /** - * @description Indicates if the equipment is archived. + * @description Unique identifier for the equipment model. + * @example f2e7d596-35c6-11e7-af34-123e49453e98 + */ + ERID?: string; + /** + * @description Indicates if the equipment model is certified. * @example true */ - archived?: boolean; + certified?: boolean; + }; + /** + * EquipmentModel + * @description Represents the model of the equipment, including its name, unique identifier, category, certification status, make, type, ISG type, icon, deprecation status, and metadata. + * @example { + * "name": "8360R", + * "ERID": "158df9ff-334a-4e0d-86cc-3adca17a9686", + * "category": "Machine", + * "certified": false + * } + */ + 'equipment-model-no-embed': components['schemas']['resource'] & { /** - * @description Unique id for principal equipment - * @example 12345 + * @description The name of the equipment model. + * @example 8360R */ - principalId?: string; - organizationRole?: components['schemas']['organization-role']; + name?: string; /** - * @description Unique identifier of the Equipment. - * @example fcdc83cb-8840-4215-84b5-1769889db932 + * @description Unique identifier for the equipment model. + * @example 158df9ff-334a-4e0d-86cc-3adca17a9686 */ ERID?: string; - /** @description List of alternate identifiers of the Equipment like DE-13, DE-17, ERID... */ - alternateIdentifiers?: components['schemas']['identifier'][]; - icon?: components['schemas']['equipment-icon']; - offsets?: components['schemas']['offsets']; - /** @description List of devices paired with the equipment. */ - devices?: components['schemas']['device'][]; - /** @description List of capabilities of the equipment. */ - capabilities?: components['schemas']['capability'][]; - pairingDetails?: components['schemas']['pairing-details']; /** - * Format: date-time - * @description Timestamp when the equipment was archived. - * @example 2021-03-10T19:19:46.420Z + * @description The category of the equipment model. + * @example Machine + * @enum {string} */ - archivedTimestamp?: string; - /** @description List of equipment that was merged. */ - mergedEquipment?: components['schemas']['machine'][]; + category?: 'Machine' | 'Implement' | 'Unknown'; /** - * @description Indicates if the equipment is CSC equipment or not. - * @example true + * @description Indicates if the equipment model is certified. + * @example false */ - isCsc?: boolean; + certified?: boolean; }; - /** Point */ - point: { - /** Format: double */ - lat?: number; - /** Format: double */ - lon?: number; - /** Format: double */ - slope?: number; + /** PatchDTO */ + 'equipment-patch': { + /** @enum {string} */ + operation?: 'UPDATE'; + /** @enum {string} */ + path?: '/organization' | '/archived' | '/organizationRole/type' | '/name'; + /** @description - For transfer request : value={organizationId} - For archive/unarchive request : value=true/false - For role update request : value={Controlling} - For name update request : value={name} */ + value?: string; }; /** - * PairingDetails - * @description Represents the details of the pairing process, including timestamps and location. + * EquipmentType + * @deprecated + * @description Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata. * @example { - * "paired": true, - * "associationTimestamp": "2023-10-01T12:00:00Z", - * "disassociationTimestamp": "2023-10-02T12:00:00Z", - * "confirmationTimestamp": "2023-10-01T12:30:00Z", - * "location": { - * "latitude": 40.712776, - * "longitude": -74.005974 + * "id": 217, + * "name": "Two-wheel Drive Tractors - 140 Hp And Above", + * "ERID": "82115264-9385-460c-bfbe-177a59445fd9", + * "category": "Machine", + * "certified": true, + * "marketSegment": "Agriculture", + * "icon": { + * "url": "https://example.com/icon.png", + * "description": "Icon representing the equipment type" + * }, + * "deprecated": false, + * "allowsCustomModel": true, + * "recordMetaData": { + * "createdBy": "user123", + * "createdAt": "2023-10-01T12:00:00Z", + * "updatedBy": "user456", + * "updatedAt": "2023-10-02T12:00:00Z" * } * } */ - 'pairing-details': { + 'equipment-type': components['schemas']['resource'] & { /** - * @description Indicates if the equipment is paired. - * @example true + * @description The name of the equipment type. + * @example Two-wheel Drive Tractors - 140 Hp And Above */ - paired?: boolean; + name?: string; /** - * Format: date-time - * @description The timestamp when the equipment was paired. - * @example 2023-10-01T12:00:00Z + * @description Unique identifier for the equipment type. + * @example 82115264-9385-460c-bfbe-177a59445fd9 */ - associationTimestamp?: string; + ERID?: string; /** - * Format: date-time - * @description The timestamp when the equipment was un-paired. - * @example 2023-10-02T12:00:00Z + * @description The category of the equipment type. + * @example Machine + * @enum {string} */ - disassociationTimestamp?: string; + category?: 'Machine' | 'Implement' | 'Unknown'; /** - * Format: date-time - * @description The timestamp when the pairing was confirmed. - * @example 2023-10-01T12:30:00Z + * @description Indicates if the equipment type is certified. + * @example true */ - confirmationTimestamp?: string; - location?: components['schemas']['point']; - }; - /** - * Device - * @description Represents a device, including its serial number, certification status, make, type, model, organization, and other attributes. - * @example { - * "@type": "Device", - * "serialNumber": "PCMA4GF511111", - * "make": { - * "name": "JOHN DEERE", - * "id": "1", - * "ERID": "f8b43e74-3088-4a38-9d66-30aae1ed1111" - * }, - * "type": { - * "name": "Modem", - * "commonName": "TelematicsGateway", - * "id": "1", - * "ERID": "d469a324-2036-11ee-bb58-0e5cd6a91111" - * }, - * "model": { - * "name": "JDLink Modem-4G", - * "id": "3", - * "ERID": "f413bba6-9f39-410c-866f-c800bf701111" - * }, - * "firmwareVersion": { - * "name": "40.02.049" - * }, - * "organization": { - * "id": "21111" - * }, - * "organizationRole": { - * "type": "Controlling", - * "effectiveTS": "2024-04-30T17:53:57Z", - * "event": "PAIRING" - * }, - * "archived": false, - * "decommissioned": false, - * "stolen": false, - * "principalId": "911111", - * "equipment": { - * "name": "Cattle 9700 SPFH", - * "serialNumber": "1Z09700YAKU621111", - * "isSerialNumberCertified": true, - * "modelYear": "2019", - * "make": { - * "name": "JOHN DEERE", - * "certified": true, - * "deereOrSubsidiary": true, - * "id": "1", - * "ERID": "db18bdc4-025a-11eb-97e4-0e8d658c1111" - * }, - * "type": { - * "name": "Forage Harvester", - * "id": "162", - * "ERID": "34b07db5-11fb-11ee-8580-0ed5f7261111" - * }, - * "isgType": { - * "name": "Forage Harvester", - * "id": "6", - * "ERID": "99edf0e0-4abb-42d3-9798-327439a31111" - * }, - * "model": { - * "name": 9700, - * "certified": true, - * "id": "581111", - * "ERID": "2c8c951e-070a-4e1c-824d-72cca6e71111" - * }, - * "principalId": "661111", - * "archived": false, - * "organization": { - * "id": "22967" - * }, - * "organizationRole": { - * "type": "Controlling", - * "effectiveTS": "2024-04-30T17:53:56.695Z", - * "event": "PAIRING" - * }, - * "isCsc": false, - * "id": "661111", - * "ERID": "23fe3ea0-1f95-4ae6-8e12-968729cd1111" - * }, - * "capabilities": [ - * { - * "type": "JDLINK_CONNECTIVITY", - * "capable": true - * }, - * { - * "type": "WIFI_CONNECTIVITY", - * "capable": true - * } - * ], - * "pairingDetails": { - * "paired": true, - * "associationTimestamp": "2024-09-28T17:30:24Z", - * "disassociationTimestamp": null, - * "confirmationTimestamp": "2024-10-23T22:17:22Z", - * "location": { - * "lat": 52.780639, - * "lon": -122.453222, - * "slope": null - * } - * }, - * "messagesRestricted": false, - * "pairingStatus": "PAIRED", - * "orderNumber": "961111", - * "highFidelityConfigurationVersion": { - * "name": "1Hz_L3X40FT4JDPS0x00_ISG_X8X9SPFH_63978_2024.008.001" - * }, - * "genericConfigurationVersion": { - * "name": "1623F1EF-62C2-4B8B-B5EA-A0FFD6EA76F8" - * }, - * "communicationModules": [ - * { - * "imei": "014642005101111", - * "imsi": "310170835961111", - * "iccid": "89011704278359691111", - * "type": "GSM", - * "serviceProvider": "Jasper", - * "state": "Active", - * "id": "632111" - * } - * ], - * "id": "915111", - * "ERID": "fb537c94-14f1-11ef-871b-1287bcef1111" - * } + certified?: boolean; + /** + * @description Indicates if the equipment type allows custom models. + * @example true + */ + allowsCustomModel?: boolean; + /** + * @description The market segment of the equipment type. + * @example Agriculture + * @enum {string} + */ + marketSegment?: + | 'Unknown' + | 'Agriculture' + | 'Commercial Worksite Products' + | 'Construction' + | 'Engines & Components' + | 'Forestry' + | 'Mining' + | 'Turf'; + icon?: components['schemas']['equipment-icon']; + /** + * @description Indicates if the equipment type is deprecated. + * @example false + */ + deprecated?: boolean; + }; + /** + * EquipmentType + * @description Represents the type of equipment, including its name, unique identifier, category, certification status, market segment, icon, deprecation status, and metadata. */ - device: components['schemas']['resource-embed'] & { + 'equipment-type-embed': { /** - * @description Device | Display | PositionReceiver | TelematicsGateway - * @example Device + * @description EquipmentType + * @example EquipmentType + */ + '@type'?: string; + /** + * @description Unique identifier for the equipment type. + * @example 222 + */ + id?: string; + /** + * @description The name of the equipment type. + * @example Combine + */ + name?: string; + /** + * @description Unique identifier for the equipment type. + * @example 80619ff7-11fa-11ee-bb58-0e5cd6a962d7 + */ + ERID?: string; + }; + /** + * Equipment + * @description Represents the equipment, including its name, serial number, model year, make, type, ISG type, model, organization, telematics capability, and various other attributes. + */ + equipmentForList: components['schemas']['resource'] & { + /** + * @description Equipment | Machine | Implement + * @example Equipment * @enum {string} */ - '@type'?: 'Device' | 'Display' | 'PositionReceiver' | 'TelematicsGateway'; + '@type'?: 'Equipment' | 'Machine' | 'Implement'; /** - * @description Serial number of the device and passed on the query parameter - * @example PCS171B372381 + * @description Equipment Name. + * @example Cates 8360R 055358 + */ + name?: string; + /** + * @description Unique 64-bit ISO NAME used to identify the controller during address claim. + * @example b00082000422ed1d + */ + isoName?: string; + /** + * @description Serial Number of the Equipment and passed on the query parameter + * @example 1RW8360RLCD055358 */ serialNumber?: string; /** - * @description True if this is an official device (we have PI information about it). + * @description VIN or PIN, more than Serial Number, of the Engine. + * @example RG6090L839275 + */ + engineSerialNumber?: string; + /** + * @description True if this is an official equipment (we have PI information about it). * @example true */ isSerialNumberCertified?: boolean; - make?: components['schemas']['device-make']; - type?: components['schemas']['device-type']; - model?: components['schemas']['device-model']; - organization?: components['schemas']['organization-embed']; /** - * @description Unique identifier of the Device. - * @example fcdc83cb-8840-4215-84b5-1769889db932 + * @description Year of model. + * @example 2019 */ - ERID?: string; - firmwareVersion?: components['schemas']['version']; - capabilities?: components['schemas']['capability'][]; - equipment?: components['schemas']['equipment']; + modelYear?: string; + make?: components['schemas']['equipment-make-embed']; + type?: components['schemas']['equipment-type-embed']; + isgType?: components['schemas']['equipment-isg-type-embed']; + model?: components['schemas']['equipment-model-embed']; + organization?: components['schemas']['organization-embed']; /** - * @description Indicates if the device is archived. + * @description Indicates if the equipment is capable of telematics. * @example true */ - archived?: boolean; - /** - * @description Indicates if the device is decommissioned. - * @example false - */ - decommissioned?: boolean; + telematicsCapable?: boolean; /** - * @description Indicates if the device is stolen. - * @example false + * @description Indicates if the equipment is archived. + * @example true */ - stolen?: boolean; + archived?: boolean; /** - * @description Unique id for principal device + * @description Unique id for principal equipment * @example 12345 */ principalId?: string; organizationRole?: components['schemas']['organization-role']; /** - * @description Order number associated with the device. - * @example 987654321 + * @description Unique identifier of the Equipment. + * @example fcdc83cb-8840-4215-84b5-1769889db932 */ - orderNumber?: string; + ERID?: string; + /** @description List of alternate identifiers of the Equipment like DE-13, DE-17, ERID... */ + alternateIdentifiers?: components['schemas']['identifier'][]; + icon?: components['schemas']['equipment-icon']; + /** @description List of devices paired with the equipment. */ + devices?: components['schemas']['device'][]; pairingDetails?: components['schemas']['pairing-details']; /** * Format: date-time - * @description Timestamp when the device was archived. + * @description Timestamp when the equipment was archived. * @example 2021-03-10T19:19:46.420Z */ archivedTimestamp?: string; + /** @description List of equipment that was merged. */ + mergedEquipment?: components['schemas']['machine'][]; + /** + * @description Indicates if the equipment is CSC equipment or not. + * @example true + */ + isCsc?: boolean; }; - /** Display */ - display: components['schemas']['device'] & { + /** + * IconStyle + * @description icon style + */ + 'icon-style': { + /** @description primary color of the icon style */ + primaryColor?: string; + /** @description secondary color of the icon style */ + secondaryColor?: string; + }; + /** + * Identifier of Equipment + * @description Identifier of the Equipment like DE-13, DE-17, ERID... + */ + identifier: { /** - * @description Display - * @example Display + * @description Type of identifier. + * @enum {string} + */ + type?: 'serialNumber' | 'ERID'; + /** + * @description Value of identifier. + * @example RW8360R055358 + */ + value?: string; + }; + /** Implement */ + implement: components['schemas']['equipment'] & { + machine?: components['schemas']['machine']; + }; + /** InabilityDetail */ + 'inability-detail': components['schemas']['resource'] & { + /** @example RC14.8.1 */ + code?: string; + /** @example REGISTRATION */ + type?: string; + /** @example SIM registration is required */ + description?: string; + }; + /** Link */ + link: { + /** @example nextPage */ + rel?: string; + /** + * @description This will be the relative URL. Users will prefix the base url as per their requirements. + * @example /equipment?pageOffset=10&itemSize=10 + */ + uri?: string; + }; + /** Machine */ + machine: components['schemas']['equipment'] & { + implements?: components['schemas']['implement'][]; + }; + /** + * MeasurementAsDouble + * @description measurement as double + */ + measurementAsDouble: components['schemas']['abstractMeasurement'] & { + /** @description type of measurement */ + type?: string; + /** @description unit of measurement */ + unit?: string; + /** + * Format: double + * @description measurement value as double + */ + valueAsDouble?: number; + }; + /** + * MeasurementAsString + * @description measurement as string + */ + measurementAsString: components['schemas']['abstractMeasurement'] & { + /** @description type of measurement */ + type?: string; + /** @description unit of measurement */ + unit?: string; + /** @description measurement value as string */ + valueAsString?: string; + }; + /** + * Offsets + * @description Represents the offsets of a device, including its variable and defined type representation values. + */ + offsets: components['schemas']['resource-embed'] & { + /** + * @description Offsets + * @example Offsets + * @enum {string} + */ + '@type'?: 'Offsets'; + variableRepresentationValues?: components['schemas']['variableRepresentationValue'][]; + definedTypeRepresentationValues?: components['schemas']['definedTypeRepresentationValue'][]; + }; + /** Resource */ + 'organization-embed': { + /** + * @description Unique id + * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 + */ + id?: string; + /** + * @description Resource + * @example Resource + */ + '@type'?: string; + }; + /** + * OrganizationRole + * @description Represents the role of an organization, including its type, effective timestamp, and event. + * @example { + * "type": "Controlling", + * "effectiveTS": "2023-10-01T12:00:00Z", + * "event": "CREATION" + * } + */ + 'organization-role': { + /** + * @description The type of the organization role. + * @example Controlling * @enum {string} */ - '@type'?: 'Display'; - monitors?: components['schemas']['display-monitors'][]; - }; - /** Monitor */ - 'display-monitors': components['schemas']['resource-embed'] & { + type?: 'Controlling' | 'NonControlling'; + /** + * Format: date-time + * @description The timestamp when the role becomes effective. + * @example 2023-10-01T12:00:00Z + */ + effectiveTS?: string; /** - * @description Monitor - * @example Monitor + * @description The event associated with the organization role. + * @example CREATION * @enum {string} */ - '@type'?: 'Monitor'; - /** @example Monitor_0 */ - type?: string; - /** @example PCG410A015392 */ - serialNumber?: string; - /** @example 800 */ - resolutionWidth?: number; - /** @example 600 */ - resolutionHeight?: number; + event?: + | 'CREATION' + | 'TRANSFER' + | 'SUBSCRIPTION' + | 'PAIRING' + | 'ORDER' + | 'COMMANDED' + | 'DECOMMISSION'; + /** @example true */ + inPossession?: boolean; }; - /** PositionReceiver */ - 'position-receiver': components['schemas']['device'] & Record; /** - * CommunicationModule - * @description Represents a communication module, including its serial number, IMEI, IMSI, ICCID, MSISDN, EID, type, service provider, state, and country calling code. + * PairingDetails + * @description Represents the details of the pairing process, including timestamps and location. * @example { - * "serialNumber": "PCS171B372381", - * "imei": 123456789012345, - * "imsi": 310150123456789, - * "iccid": 89014103211118510000, - * "msisdn": 15555551234, - * "eid": 89014103211118510000, - * "type": "GSM", - * "serviceProvider": "ATT", - * "state": "ACTIVE", - * "countryCallingCode": 1 + * "paired": true, + * "associationTimestamp": "2023-10-01T12:00:00Z", + * "disassociationTimestamp": "2023-10-02T12:00:00Z", + * "confirmationTimestamp": "2023-10-01T12:30:00Z", + * "location": { + * "latitude": 40.712776, + * "longitude": -74.005974 + * } * } */ - 'communication-module': components['schemas']['resource-embed'] & { - /** - * @description CommunicationModule - * @example CommunicationModule - * @enum {string} - */ - '@type'?: 'CommunicationModule'; + 'pairing-details': { /** - * @description Serial number of the communication gateway - * @example PCS171B372381 + * @description Indicates if the equipment is paired. + * @example true */ - serialNumber?: string; + paired?: boolean; /** - * @description International Mobile Equipment Identity of the communication module. - * @example 123456789012345 + * Format: date-time + * @description The timestamp when the equipment was paired. + * @example 2023-10-01T12:00:00Z */ - imei?: string; + associationTimestamp?: string; /** - * @description International Mobile Subscriber Identity of the communication module. - * @example 310150123456789 + * Format: date-time + * @description The timestamp when the equipment was un-paired. + * @example 2023-10-02T12:00:00Z */ - imsi?: string; + disassociationTimestamp?: string; /** - * @description Integrated Circuit Card Identifier of the communication module. - * @example 89014103211118510000 + * Format: date-time + * @description The timestamp when the pairing was confirmed. + * @example 2023-10-01T12:30:00Z */ - iccid?: string; + confirmationTimestamp?: string; + location?: components['schemas']['point']; + }; + /** Point */ + point: { + /** Format: double */ + lat?: number; + /** Format: double */ + lon?: number; + /** Format: double */ + slope?: number; + }; + /** PositionReceiver */ + 'position-receiver': components['schemas']['device'] & Record; + /** Resource */ + resource: { + links?: components['schemas']['link'][]; /** - * @description Mobile Station International Subscriber Directory Number of the communication module. - * @example 15555551234 + * @description Unique id + * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 */ - msisdn?: string; + id?: string; /** - * @description Embedded Identity Document of the communication module. - * @example 89014103211118510000 + * @description Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other + * @example Equipment | Machine | Implement | MachineCharacteristics | ImplementCharacteristics | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other */ - eid?: string; + '@type'?: string; + }; + /** Resource */ + 'resource-embed': { /** - * @description Type of the communication module. - * @example GSM - * @enum {string} + * @description Unique id + * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 */ - type?: 'GSM' | 'SATELLITE' | 'CDMA' | 'COS'; + id?: string; /** - * @example ATT - * @enum {string} + * @description Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other + * @example Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other */ - serviceProvider?: - | 'IRIDIUM' - | 'ATT' - | 'JASPER' - | 'VERIZON' - | 'COS' - | 'COST' - | 'CUBIC' - | 'ATTIOT'; + '@type'?: string; + }; + /** Resource */ + resourcewithoutLinks: { /** - * @description Subscription state of the communication gateway - * @example ACTIVE - * @enum {string} + * @description Unique id + * @example 363997 | fcdc83cb-8840-4215-84b5-1769889db932 */ - state?: - | 'NEW' - | 'ACTIVE' - | 'INACTIVE' - | 'EXPIRED' - | 'PENDING_ACTIVE' - | 'PENDING_INACTIVE' - | 'PENDING_EXPIRED' - | 'PENDING_VERIFICATION' - | 'PENDING_WDT' - | 'TERMINATED'; + id?: string; /** - * @description Country calling code of the communication module. - * @example 1 + * @description Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other + * @example Equipment | Machine | Implement | EquipmentType | EquipmentMake | EquipmentModel | Organization | TheftRecord | DecommissionRecord | WarrantyInformation | DeviceParameter | Other */ - countryCallingCode?: string; + '@type'?: string; }; /** TelematicsGateway */ 'telematics-gateway': components['schemas']['device'] & { @@ -1765,73 +1787,80 @@ export interface components { messagesRestricted?: boolean; communicationModules?: components['schemas']['communication-module'][]; }; - /** Implement */ - implement: components['schemas']['equipment'] & { - machine?: components['schemas']['machine']; - }; - /** Machine */ - machine: components['schemas']['equipment'] & { - implements?: components['schemas']['implement'][]; - }; - /** PatchDTO */ - 'equipment-patch': { - /** @enum {string} */ - operation?: 'UPDATE'; - /** @enum {string} */ - path?: '/organization' | '/archived' | '/organizationRole/type' | '/name'; - /** @description - For transfer request : value={organizationId} - For archive/unarchive request : value=true/false - For role update request : value={Controlling} - For name update request : value={name} */ - value?: string; + /** VariableRepresentationValue */ + variableRepresentationValue: { + variable?: components['schemas']['measurementAsDouble']; }; - /** Equipment Creation */ - createEquipment: { - /** - * @description Equipment Name. - * @example Cates 8360R 055358 - */ - name?: string; + /** + * Version + * @description Represents the version of a device or software, including its name. + * @example { + * "name": "3.16.1171" + * } + */ + version: components['schemas']['resource-embed'] & { /** - * @description Serial Number of the Equipment and passed on the query parameter - * @example Must be unique string. Max character count is 30. + * @description Version + * @example Version + * @enum {string} */ - serialNumber?: string; + '@type'?: 'Version'; /** - * Model of the equipment. - * @description Model of the equipment. + * @description The name of the version. + * @example 3.16.1171 */ - model?: { - /** - * @description Unique id - * @example 3 | 158df9ff-334a-4e0d-86cc-3adca17a9686 - */ - id?: string; - /** - * @description EquipmentModel - * @example EquipmentModel - */ - '@type'?: string; - }; + name?: string; }; }; responses: { + /** @description Create */ + CreateEquip: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': Record; + }; + }; /** @description A collection of Assets */ GetEquipment: { headers: { [name: string]: unknown; }; content: { - 'application/json': { - values?: unknown[]; - }; + 'application/json': { + values?: components['schemas']['equipmentForList'][]; + }; + }; + }; + /** @description A collection of Assets */ + GetEquipmentById: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + values?: components['schemas']['equipment'][]; + }; + }; + }; + /** @description A collection of Assets */ + GetEquipmentByMakeId: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': Record; }; }; /** @description A collection of Assets */ - GetEquipmentById: { + GetEquipmentMake: { headers: { [name: string]: unknown; }; content: { 'application/json': { - values?: unknown[]; + values?: unknown; }; }; }; @@ -1857,21 +1886,8 @@ export interface components { }; }; }; - /** Equipment Creation */ - UpdateEquipment: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - examples: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; /** @description A collection of Assets */ - GetEquipmentMake: { + GetEquipmentTypeByEquipmentMakeIdAndEquipmentTypeId: { headers: { [name: string]: unknown; }; @@ -1882,7 +1898,7 @@ export interface components { }; }; /** @description A collection of Assets */ - GetEquipmentByMakeId: { + GetEquipmentTypes: { headers: { [name: string]: unknown; }; @@ -1899,28 +1915,15 @@ export interface components { 'application/json': Record; }; }; - /** @description A collection of Assets */ - GetEquipmentTypes: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/json': Record; - }; - }; - /** @description A collection of Assets */ - GetEquipmentTypeByEquipmentMakeIdAndEquipmentTypeId: { + /** Equipment Creation */ + UpdateEquipment: { headers: { [name: string]: unknown; }; - content: { - 'application/json': { - values?: unknown; - }; - }; + content?: never; }; - /** @description Create */ - CreateEquip: { + /** @description Update */ + UpdatedEquip: { headers: { [name: string]: unknown; }; @@ -1928,66 +1931,24 @@ export interface components { 'application/json': Record; }; }; - /** @description Update */ - UpdatedEquip: { + examples: { headers: { [name: string]: unknown; }; - content: { - 'application/json': Record; - }; + content?: never; }; }; parameters: { - /** @description List of embed data for the Equipment ISG Type */ - embed: 'equipmentModels' | 'recordMetadata'; - /** @description Optional query parameter that controls which records are returned based on the record's deprecated flag: parameter set to false: Return only non-deprecated records query parameter not present: both deprecated and non-deprecated records returned. */ - deprecatedForEquipmentModels: boolean; - /** @description Whether to filter isg types by the deprecated flag */ - deprecated: false | true | 'all'; - /** @description Originating system of the request */ - originator: string; - /** @description List of OrganizationEquipment Ids (these ids are unique across all orgs) */ - OrganizationEquipmentIds: number[]; - /** @description List of serial numbers of the equipment */ - EquipmentSerialNumbers: string[]; - /** @description List of OrganizationIds */ - OrganizationIds: number[]; - /** @description List of PrincipalIds */ - PrincipalIds: number[]; - /** - * @description Refers to starting record value - * @example 200 - */ - PageOffset: number; - /** - * @description Refers to number of items per page(default 100 max 5000) - * @example 200 - */ - ItemLimit: number; - /** @example 1111 */ - id: number; - /** @example 1234, */ - organizationId: number; - /** @description The organization ids to get Equipment Models for. If provided, then only non-certified models will be returned. If not provided, then only certified models will be returned. */ - organizationIds: number[]; - /** @description embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds */ - EmbedForList: 'devices' | 'equipment' | 'icon' | 'pairingDetails'; - /** @description embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds */ - Embed: 'devices' | 'equipment' | 'pairingDetails' | 'icon' | 'offsets' | 'capabilities'; - Categories: 'Machine' | 'Implement'; - CapableOf: 'Connectivity' | '!Connectivity'; - Role: 'Controlling' | 'NonControlling'; /** @description true or false */ Archived: boolean; - /** @example VIN1234 */ - SerialNumber: string; - /** @description ID for Equipment Make */ - EquipmentMakeId: number; - /** @description ID for Equipment ISG Type */ - EquipmentISGTypeId: number; + CapableOf: 'Connectivity' | '!Connectivity'; + Categories: 'Machine' | 'Implement'; /** @description Deprecated value should be false */ Deprecated: boolean; + /** @description embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds */ + Embed: 'devices' | 'equipment' | 'pairingDetails' | 'icon' | 'offsets' | 'capabilities'; + /** @description embed 'pairingDetails' is only supported along with 'devices' or 'equipment' embeds */ + EmbedForList: 'devices' | 'equipment' | 'icon' | 'pairingDetails'; /** * @description Embed additional attributes if required. * @example [ @@ -1996,6 +1957,14 @@ export interface components { * ] */ EmbedV1: 'make' | 'type' | 'isgType'; + /** @description ID for Equipment ISG Type */ + EquipmentISGTypeId: number; + /** @description ID for Equipment Make */ + EquipmentMakeId: number; + /** @description Name for Equipment Make */ + EquipmentMakeName: string; + /** @description ID for Equipment Model */ + EquipmentModelId: number; /** * @description It should be equipment model name * @example [ @@ -2004,16 +1973,47 @@ export interface components { * ] */ EquipmentModelName: 'string or partial string with * wildcard search'; + /** @description List of serial numbers of the equipment */ + EquipmentSerialNumbers: string[]; /** @description ID for Equipment Type */ EquipmentTypeId: number; - /** @description ID for Equipment Model */ - EquipmentModelId: number; - /** @description List of type categories for the Equipment Model */ - category: 'machine' | 'implement'; /** @description Name for Equipment Type */ EquipmentTypeName: string; - /** @description Name for Equipment Make */ - EquipmentMakeName: string; + /** + * @description Refers to number of items per page(default 100 max 5000) + * @example 200 + */ + ItemLimit: number; + /** @description List of OrganizationEquipment Ids (these ids are unique across all orgs) */ + OrganizationEquipmentIds: number[]; + /** @description List of OrganizationIds */ + OrganizationIds: number[]; + /** + * @description Refers to starting record value + * @example 200 + */ + PageOffset: number; + /** @description List of PrincipalIds */ + PrincipalIds: number[]; + Role: 'Controlling' | 'NonControlling'; + /** @example VIN1234 */ + SerialNumber: string; + /** @description List of type categories for the Equipment Model */ + category: 'machine' | 'implement'; + /** @description Whether to filter isg types by the deprecated flag */ + deprecated: false | true | 'all'; + /** @description Optional query parameter that controls which records are returned based on the record's deprecated flag: parameter set to false: Return only non-deprecated records query parameter not present: both deprecated and non-deprecated records returned. */ + deprecatedForEquipmentModels: boolean; + /** @description List of embed data for the Equipment ISG Type */ + embed: 'equipmentModels' | 'recordMetadata'; + /** @example 1111 */ + id: number; + /** @example 1234, */ + organizationId: number; + /** @description The organization ids to get Equipment Models for. If provided, then only non-certified models will be returned. If not provided, then only certified models will be returned. */ + organizationIds: number[]; + /** @description Originating system of the request */ + originator: string; }; requestBodies: never; headers: never; @@ -2021,50 +2021,6 @@ export interface components { } export type $defs = Record; export interface operations { - createEquipment: { - parameters: { - query?: never; - header?: never; - path: { - /** @example 1234, */ - organizationId: components['parameters']['organizationId']; - }; - cookie?: never; - }; - /** @description Asset to be created. */ - requestBody?: { - content: { - 'application/json': components['schemas']['createEquipment']; - }; - }; - responses: { - /** @description Created */ - 201: components['responses']['CreateEquip']; - /** @description Accepted */ - 202: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/json': components['schemas']['Errors']; - }; - }; - /** @description User is not authorized for this request. */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; putEquipment: { parameters: { query?: never; @@ -2102,111 +2058,53 @@ export interface operations { }; }; }; - deleteEquipment: { - parameters: { - query?: never; - header?: never; - path: { - /** @example 1111 */ - id: components['parameters']['id']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Deleted */ - 200: components['responses']['UpdatedEquip']; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/json': components['schemas']['Errors']; - }; - }; - /** @description User is not authorized for this request. */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - getEquipmentMakes: { - parameters: { - query?: never; - header?: never; - path: { - /** @description Deprecated value should be false */ - deprecated: components['parameters']['Deprecated']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: components['responses']['GetEquipmentMake']; - /** @description User is not authorized */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - getEquipmentMakesById: { + deleteEquipment: { parameters: { query?: never; header?: never; path: { - /** @description ID for Equipment Make */ - equipmentMakeId: components['parameters']['EquipmentMakeId']; + /** @example 1111 */ + id: components['parameters']['id']; }; cookie?: never; }; requestBody?: never; responses: { - /** @description OK */ - 200: { + /** @description Deleted */ + 200: components['responses']['UpdatedEquip']; + /** @description Bad Request */ + 400: { headers: { [name: string]: unknown; }; content: { - 'application/json': { - links?: components['schemas']['link'][]; - values?: components['schemas']['equipment-make'][]; - }; + 'application/json': components['schemas']['Errors']; }; }; - /** @description User is not authorized */ + /** @description User is not authorized for this request. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description Resource Not foundapi-makes */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; }; }; - getEquipmentTypesByMakeId: { + getEquipmentISGTypes: { parameters: { - query?: never; - header?: never; - path: { - /** @description ID for Equipment Make */ - equipmentMakeId: components['parameters']['EquipmentMakeId']; - /** @description Deprecated value should be false */ - deprecated: components['parameters']['Deprecated']; + query?: { + /** @description List of type categories for the Equipment Model */ + category?: components['parameters']['category']; + /** @description Whether to filter isg types by the deprecated flag */ + deprecated?: components['parameters']['deprecated']; + /** @description List of embed data for the Equipment ISG Type */ + embed?: components['parameters']['embed']; + }; + header?: { + /** @description Originating system of the request */ + 'X-Deere-Originator'?: components['parameters']['originator']; }; + path?: never; cookie?: never; }; requestBody?: never; @@ -2219,13 +2117,13 @@ export interface operations { content: { 'application/json': { links?: components['schemas']['link'][]; - values?: components['schemas']['equipment-type'][]; + values?: components['schemas']['equipment-isg-type'][]; }; }; }; }; }; - getEquipmentTypes: { + getEquipmentMakes: { parameters: { query?: never; header?: never; @@ -2238,67 +2136,24 @@ export interface operations { requestBody?: never; responses: { /** @description OK */ - 200: { + 200: components['responses']['GetEquipmentMake']; + /** @description User is not authorized */ + 403: { headers: { [name: string]: unknown; }; - content: { - 'application/json': { - links?: components['schemas']['link'][]; - values?: components['schemas']['equipment-type'][]; - }; - }; + content?: never; }; }; }; - getEquipmentModels: { + getEquipmentMakesById: { parameters: { - query?: { - /** - * @description Embed additional attributes if required. - * @example [ - * "make", - * "type" - * ] - */ - embed?: components['parameters']['EmbedV1']; - /** - * @description It should be equipment model name - * @example [ - * "9RX420", - * "9RX*" - * ] - */ - equipmentModelName?: components['parameters']['EquipmentModelName']; - }; + query?: never; header?: never; path: { - /** @description Deprecated value should be false */ - deprecated: components['parameters']['Deprecated']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: components['responses']['GetEquipmentModelName']; - }; - }; - getEquipmentISGTypes: { - parameters: { - query?: { - /** @description List of type categories for the Equipment Model */ - category?: components['parameters']['category']; - /** @description Whether to filter isg types by the deprecated flag */ - deprecated?: components['parameters']['deprecated']; - /** @description List of embed data for the Equipment ISG Type */ - embed?: components['parameters']['embed']; - }; - header?: { - /** @description Originating system of the request */ - 'X-Deere-Originator'?: components['parameters']['originator']; + /** @description ID for Equipment Make */ + equipmentMakeId: components['parameters']['EquipmentMakeId']; }; - path?: never; cookie?: never; }; requestBody?: never; @@ -2311,10 +2166,24 @@ export interface operations { content: { 'application/json': { links?: components['schemas']['link'][]; - values?: components['schemas']['equipment-isg-type'][]; + values?: components['schemas']['equipment-make'][]; }; }; }; + /** @description User is not authorized */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Resource Not foundapi-makes */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; }; }; getEquipmentISGTypesByMakeId: { @@ -2466,4 +2335,135 @@ export interface operations { }; }; }; + getEquipmentTypesByMakeId: { + parameters: { + query?: never; + header?: never; + path: { + /** @description ID for Equipment Make */ + equipmentMakeId: components['parameters']['EquipmentMakeId']; + /** @description Deprecated value should be false */ + deprecated: components['parameters']['Deprecated']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + links?: components['schemas']['link'][]; + values?: components['schemas']['equipment-type'][]; + }; + }; + }; + }; + }; + getEquipmentModels: { + parameters: { + query?: { + /** + * @description Embed additional attributes if required. + * @example [ + * "make", + * "type" + * ] + */ + embed?: components['parameters']['EmbedV1']; + /** + * @description It should be equipment model name + * @example [ + * "9RX420", + * "9RX*" + * ] + */ + equipmentModelName?: components['parameters']['EquipmentModelName']; + }; + header?: never; + path: { + /** @description Deprecated value should be false */ + deprecated: components['parameters']['Deprecated']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: components['responses']['GetEquipmentModelName']; + }; + }; + getEquipmentTypes: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Deprecated value should be false */ + deprecated: components['parameters']['Deprecated']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + links?: components['schemas']['link'][]; + values?: components['schemas']['equipment-type'][]; + }; + }; + }; + }; + }; + createEquipment: { + parameters: { + query?: never; + header?: never; + path: { + /** @example 1234, */ + organizationId: components['parameters']['organizationId']; + }; + cookie?: never; + }; + /** @description Asset to be created. */ + requestBody?: { + content: { + 'application/json': components['schemas']['createEquipment']; + }; + }; + responses: { + /** @description Created */ + 201: components['responses']['CreateEquip']; + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Errors']; + }; + }; + /** @description User is not authorized for this request. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; } diff --git a/src/types/generated/farms.ts b/src/types/generated/farms.ts index d7e5643..39755e5 100644 --- a/src/types/generated/farms.ts +++ b/src/types/generated/farms.ts @@ -4,6 +4,61 @@ */ export interface paths { + '/organizations/{orgID}/farms/{id}/fields': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View a Farm's Field + * @description View details on the field to which a specified farm belongs. The response will link to the following resources: boundaries: View the boundaries of this field. clients: View the clients associated with this field. farms: View the farms belonging to this field. owningOrganization: View the organization that owns the field. activeBoundary: View the active boundary of this field. + */ + get: { + parameters: { + query?: never; + header?: { + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'x-deere-signature'?: components['parameters']['X-deere-signature']; + }; + path: { + /** @description The id of the organization */ + orgId: components['parameters']['OrgId']; + /** @description Farm ID */ + id: components['parameters']['Id3']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get Field by client Id */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['GroupLink'][]; + /** + * Format: int32 + * @example 1 + */ + total?: number; + values?: components['schemas']['FieldResponse2'][]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/organizations/{orgId}/farms': { parameters: { query?: never; @@ -76,61 +131,6 @@ export interface paths { patch?: never; trace?: never; }; - '/organizations/{orgID}/farms/{id}/fields': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * View a Farm's Field - * @description View details on the field to which a specified farm belongs. The response will link to the following resources: boundaries: View the boundaries of this field. clients: View the clients associated with this field. farms: View the farms belonging to this field. owningOrganization: View the organization that owns the field. activeBoundary: View the active boundary of this field. - */ - get: { - parameters: { - query?: never; - header?: { - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'x-deere-signature'?: components['parameters']['X-deere-signature']; - }; - path: { - /** @description The id of the organization */ - orgId: components['parameters']['OrgId']; - /** @description Farm ID */ - id: components['parameters']['Id3']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Get Field by client Id */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['GroupLink'][]; - /** - * Format: int32 - * @example 1 - */ - total?: number; - values?: components['schemas']['FieldResponse2'][]; - }; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; } export type webhooks = Record; export interface components { @@ -164,20 +164,6 @@ export interface components { */ lastModifiedTime?: string; }; - GetFarms: { - /** - * Format: int32 - * @example 1 - */ - total?: number; - links?: { - /** @example self */ - rel?: string; - /** @example https://apiqa.tal.deere.com/platform/organizations/5555/farms/ */ - uri?: string; - }[]; - values?: components['schemas']['GetFarm'][]; - }; GetFarm: { /** @example Farm */ '@type'?: string; @@ -211,19 +197,22 @@ export interface components { uri?: string; }[]; }; - /** @description Link to another resource */ - GroupLink: Record; - PostFarm: { - /** @example John Doe */ - name?: string; - /** @example false */ - archived?: boolean; + GetFarms: { /** - * @description Link to client resource - * @example https://apiqa.tal.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d + * Format: int32 + * @example 1 */ - clientUri?: string; + total?: number; + links?: { + /** @example self */ + rel?: string; + /** @example https://apiqa.tal.deere.com/platform/organizations/5555/farms/ */ + uri?: string; + }[]; + values?: components['schemas']['GetFarm'][]; }; + /** @description Link to another resource */ + GroupLink: Record; MalformedRequestError: { /** @example Link */ '@type'?: string; @@ -245,6 +234,17 @@ export interface components { /** @example {} */ otherAttributes?: Record; }; + PostFarm: { + /** @example John Doe */ + name?: string; + /** @example false */ + archived?: boolean; + /** + * @description Link to client resource + * @example https://apiqa.tal.deere.com/platform/organizations/5555/clients/9369f3f6-2428-4bba-bf64-0a19cdaf007d + */ + clientUri?: string; + }; }; responses: { /** @description Array of clients containing links related to assets */ @@ -256,23 +256,34 @@ export interface components { 'application/vnd.deere.axiom.v3+json': components['schemas']['Clients']; }; }; - /** @description Array of farms containing links related to assets */ - FarmsReturned: { + /** @description Deleted */ + DeletedResponse: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['GetFarms']; + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; }; }; - /** @description Success */ - FarmReturned: { + /** @description Does not have access */ + DoesNotHaveAccessResponse: { headers: { [name: string]: unknown; }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['GetFarm']; + content?: never; + }; + /** @description Invalid access to organization */ + DoesNotHaveAccessToOrg: { + headers: { + [name: string]: unknown; }; + content?: never; }; /** @description created */ FarmCreatedResponse: { @@ -282,48 +293,39 @@ export interface components { }; content?: never; }; - /** @description Deleted */ - DeletedResponse: { + /** @description Success */ + FarmReturned: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - /** - * Format: int32 - * @example 1 - */ - total?: number; - }; + 'application/vnd.deere.axiom.v3+json': components['schemas']['GetFarm']; }; }; - /** @description Updated */ - UpdatedResponse: { + /** @description Array of farms containing links related to assets */ + FarmsReturned: { headers: { [name: string]: unknown; }; - content?: never; - }; - /** @description Does not have access */ - DoesNotHaveAccessResponse: { - headers: { - [name: string]: unknown; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['GetFarms']; }; - content?: never; }; - /** @description Invalid access to organization */ - DoesNotHaveAccessToOrg: { + /** @description Content has not changed since last call */ + HasNotChanged: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description Content has not changed since last call */ - HasNotChanged: { + /** @description Request Validation failure. */ + MalformedRequest: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['MalformedRequestError']; + }; }; /** @description Organization not found */ OrgNotFound: { @@ -339,32 +341,30 @@ export interface components { }; content?: never; }; - /** @description Request Validation failure. */ - MalformedRequest: { + /** @description Updated */ + UpdatedResponse: { headers: { [name: string]: unknown; }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['MalformedRequestError']; - }; + content?: never; }; }; parameters: { - /** @description The id of the organization */ - OrgId: number; - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signature': string; - /** @description Farm ID */ - Id3: string; /** @description Farm id */ FarmId: string; - /** @description Embed additional traceability record metadata to response */ - RecordMetadataEmbed: string; + /** @description Farm ID */ + Id3: string; + /** @description The id of the organization */ + OrgId: number; /** * @description Allows filtering based on archived status * @example archived */ RecordFilter: 'available' | 'archived' | 'all'; + /** @description Embed additional traceability record metadata to response */ + RecordMetadataEmbed: string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature': string; }; requestBodies: { FarmRequest: { diff --git a/src/types/generated/field-operations-api.ts b/src/types/generated/field-operations-api.ts index f47e6b7..e3796d8 100644 --- a/src/types/generated/field-operations-api.ts +++ b/src/types/generated/field-operations-api.ts @@ -4,7 +4,7 @@ */ export interface paths { - '/organizations/{orgId}/fields/{fieldId}/fieldOperations': { + '/fieldOperations/{operationId}': { parameters: { query?: never; header?: never; @@ -12,42 +12,27 @@ export interface paths { cookie?: never; }; /** - * List Field Operations - * @description This resource returns logical data structures representing the agronomic operations performed in a field. Supported field operation types include Seeding, Application, and Harvest. A single field operation may potentially span consecutive days depending on the type of operation. Each field operation may have one or more measurements, listed as links from the field operation itself. Each field operation will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation. + * View a Field Operation + * @description View a single field operation. The response will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation. */ get: { parameters: { query?: { - /** @description Retrieve operations for a specific crop season (year). */ - cropSeason?: components['parameters']['CropSeason']; - /** @description Filter results by field operation type. Takes the values "APPLICATION", "HARVEST", "SEEDING", and "TILLAGE". */ - fieldOperationType?: components['parameters']['FieldOperationType']; - /** @description Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ - startDate?: components['parameters']['StartDate']; - /** @description Specify the ending date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ - endDate?: components['parameters']['EndDate']; /** @description List available operation measurement types and totals. */ embed?: components['parameters']['FieldEmbed']; - /** @description Query by one or more workPlanIds(comma separated) */ - workPlanIds?: components['parameters']['WorkPlanIds']; - }; - header?: { - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'x-deere-signature'?: components['parameters']['X-deere-signature']; }; + header?: never; path: { - /** @description Owning Organization ID */ - orgId: components['parameters']['OrgId']; - /** @description Field ID */ - fieldId: components['parameters']['FieldId']; + /** @description Operation ID */ + operationId: components['parameters']['OperationId']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['FieldOperations']; + 200: components['responses']['FieldOperationId']; 403: components['responses']['DoesNotHaveAccessToFieldOperations']; - 404: components['responses']['RequestedResourceNotFound']; + 404: components['responses']['InputFieldOperationValueIsInvalid']; }; }; put?: never; @@ -58,7 +43,7 @@ export interface paths { patch?: never; trace?: never; }; - '/fieldOperations/{operationId}': { + '/fieldOperations/{operationId}/measurementTypes': { parameters: { query?: never; header?: never; @@ -66,27 +51,62 @@ export interface paths { cookie?: never; }; /** - * View a Field Operation - * @description View a single field operation. The response will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation. + * Field Operation Measurements + * @description Field Operations include a variety of measurements collected when the operation is performed in the field. This endpoint returns an array of measurement types available for a given field operation. Two categories of measurements are available today: Target: Target measurements refer to what the machine or implement attempted to perform in the field. Result: Result measurements refer to what the machine or implement actually accomplished in the field. For example, the SeedingRateTarget measurement describes the rate at which the equipment attempted to plant seeds, while the SeedingRateResult measurement describes the rate at which seeds were actually planted by the equipment. Target measurements may be consistent throughout the entire operation (the operator may have applied a single rate across an entire field) but result measurements will vary during the operation as they account for machine error, operator error, and environmental factors. The difference in rate and location are easily visible in the associated map image. Note: The values included in the responses will depend on their availability as well as the field operation type (Seeding, Application Tank Mix, Application Single Product, Harvest Yield Contour, or Harvest Yield Result). Please refer . "carting" operations as well as construction operations "constructionmilling", "constructionpaving", "constructioncompacting", "constructioncrushing", "constructionstabilizingrecycling" are not supported at this time. */ get: { parameters: { - query?: { - /** @description List available operation measurement types and totals. */ - embed?: components['parameters']['FieldEmbed']; + query?: never; + header?: never; + path: { + /** @description Operation ID */ + operationId: components['parameters']['OperationId']; + /** @description Measurement Type */ + measurementType: components['parameters']['MeasurementType_MeasurementType']; }; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['responses']['FieldOperationMeasurement']; + 403: components['responses']['DoesNotHaveAccessToFieldOperationMeasurements']; + 404: components['responses']['InputOrganizationOrFieldOperationIsInvalid']; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/fieldOperations/{operationId}/measurementTypes/{measurementType}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Field Operation Measurement + * @description Field Operations include a variety of measurements collected when the operation is performed in the field. This endpoint returns an array of measurement types available for a given field operation. Two categories of measurements are available today: Target: Target measurements refer to what the machine or implement attempted to perform in the field. Result: Result measurements refer to what the machine or implement actually accomplished in the field. For example, the SeedingRateTarget measurement describes the rate at which the equipment attempted to plant seeds, while the SeedingRateResult measurement describes the rate at which seeds were actually planted by the equipment. Target measurements may be consistent throughout the entire operation (the operator may have applied a single rate across an entire field) but result measurements will vary during the operation as they account for machine error, operator error, and environmental factors. The difference in rate and location are easily visible in the associated map image. Note: The values included in the responses will depend on their availability as well as the field operation type (Seeding, Application Tank Mix, Application Single Product, Harvest Yield Contour, or Harvest Yield Result). To view the different responses for each field operation type, view the documentation above. Please refer Note: This API has two possible accept headers. One will give a response with totals, and the other will give a response with a Base64 encoded image. For the image layer, A map image is available for each measurement offering a visual depiction of the data. Argonomic data points are grouped either by label (such as variety name) or numerical range, and this information provided in the JSON response as a map legend. + */ + get: { + parameters: { + query?: never; header?: never; path: { /** @description Operation ID */ operationId: components['parameters']['OperationId']; + /** @description Measurement Type */ + measurementType: components['parameters']['MeasurementType_MeasurementType']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['FieldOperationId']; - 403: components['responses']['DoesNotHaveAccessToFieldOperations']; - 404: components['responses']['InputFieldOperationValueIsInvalid']; + 200: components['responses']['FieldOperationMeasurementOrImage_MeasurementType']; }; }; put?: never; @@ -147,123 +167,261 @@ export interface paths { patch?: never; trace?: never; }; + '/organizations/{orgId}/fields/{fieldId}/fieldOperations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Field Operations + * @description This resource returns logical data structures representing the agronomic operations performed in a field. Supported field operation types include Seeding, Application, and Harvest. A single field operation may potentially span consecutive days depending on the type of operation. Each field operation may have one or more measurements, listed as links from the field operation itself. Each field operation will include links to: organization: The organization which owns this data. field: The field in which this operation was performed. self: The field operation. + */ + get: { + parameters: { + query?: { + /** @description Retrieve operations for a specific crop season (year). */ + cropSeason?: components['parameters']['CropSeason']; + /** @description Filter results by field operation type. Takes the values "APPLICATION", "CARTING", "HARVEST", "SEEDING", and "TILLAGE". */ + fieldOperationType?: components['parameters']['FieldOperationType']; + /** @description Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ + startDate?: components['parameters']['StartDate']; + /** @description Specify the ending date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ + endDate?: components['parameters']['EndDate']; + /** @description List available operation measurement types and totals. */ + embed?: components['parameters']['FieldEmbed']; + /** @description Query by one or more workPlanIds(comma separated) */ + workPlanIds?: components['parameters']['WorkPlanIds']; + }; + header?: { + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'x-deere-signature'?: components['parameters']['X-deere-signature']; + }; + path: { + /** @description Owning Organization ID */ + orgId: components['parameters']['OrgId']; + /** @description Field ID */ + fieldId: components['parameters']['FieldId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['responses']['FieldOperations']; + 403: components['responses']['DoesNotHaveAccessToFieldOperations']; + 404: components['responses']['RequestedResourceNotFound']; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; } export type webhooks = Record; export interface components { schemas: { - /** @description Operators that performed work using this machine */ - Operators: { + /** + * @description The product identifier managed by regulatory agency. e.g. EPA registration number of product issued by the US Environmental Protection Agency + * @example 0084229-00011-AA-0000000 + */ + AgencyRegistrationNumber: string; + /** @description The client associated with this FieldOperation. Populated only when the associated embed is requested. */ + Client: { /** - * @description Unique identifier for this operator - * @example 657b4391-79b3-4012-a617-7ceba7111ad0 + * @description Globally unique identifier for this client. + * @example 66dd9c64-71d7-4904-86f8-e04d40ccf59d */ - operatorId?: string; + id?: string; + links?: components['schemas']['Link'][]; /** - * @description Name of the operator - * @example John Doe + * @description The name of the client. + * @example My Custom Client Name */ name?: string; - /** - * @description Operator license number - * @example ABC123 - */ - license?: string; + /** @example false */ + archived?: boolean; }; - /** @description Machines utilized during this operation */ - FieldOperationMachines: { - /** - * @description Doc File based Field Operation Machine erid. - * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 - */ - erid?: string; - Operators?: components['schemas']['Operators']; + /** @description An individual product combined with others in a tank mix. */ + Component: { + /** @example Component */ + '@type'?: string; /** - * Format: int64 - * @description PrincipalId of the machine - * @example 637795 + * @description Display recorded Component GUID. + * @example fa14f029-831c-456b-a76e-2d3c26207c19 */ - machineId?: number | null; + guid?: string; /** - * @description VIN of the machine - * @example WXYEJKB73894JE3 + * @description The general name of the product. + * @example Water */ - vin?: string; + name?: string; + agencyRegistrationNumber?: components['schemas']['AgencyRegistrationNumber']; + rate?: components['schemas']['EventMeasurement']; }; - LinkGETFieldOperations: { + /** + * @description The type of display + * @enum {string} + */ + ConnectMobileEnum: 'OneAppMobile'; + /** + * @description Filter results by crop season. + * @example 2016 + */ + CropSeason: number; + CropSeasonSummary: { + links?: components['schemas']['FieldLink'][]; + fieldOperationType?: components['schemas']['FieldOperationTypesEnum']; + cropSeasons?: components['schemas']['CropSeasons']; + }; + /** + * @description The crop seasons (year) of the recent operation + * @example [ + * "2016", + * "2015" + * ] + */ + CropSeasons: components['schemas']['CropSeason'][]; + /** + * @description - A unique textual identifier for a type of Crop - EnumList is based on ISG_Shared/blob/master/crops/crops.xml - You may use com.deere.ads.utility.CropTokenLookup in platform to retrieve crop ids. + * @example ALFALFA + */ + CropToken: string; + DisplayTypeEnum: components['schemas']['JohnDeereDisplayTypeEnum'] & + components['schemas']['ConnectMobileEnum'] & + components['schemas']['ThirdPartyDisplayTypeEnum']; + /** @description Describes an edit that should change the id of any object that matches the fromGuid */ + EridToEridEdit: { + fromGuid?: components['schemas']['ProductErid']; + toGuid?: components['schemas']['ProductErid']; + }; + Error: { /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456 + * Format: guid + * @example 11111111-2222-3333-4444-555555555555 */ - organization?: unknown; + guid?: string; /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 + * @description An english description of the error + * @example was invalid because */ - field?: unknown; + message?: string; /** - * @description Field Operation Measurements Link. - * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes + * @description A string constant representing the type of error + * @example 400 */ - measurementTypes?: unknown; + code?: string; /** - * @description zero or more field operation measurements links. These will vary by the type of operation - * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult + * @description The name of the property or parameter deemed invalid + * @example example-field */ - measurement?: unknown; + field?: string; /** - * @description Clients Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 + * @description The value that was supplied for this field in the request + * @example Bad value */ - client?: unknown; + invalidValue?: string; + }; + Errors: components['schemas']['Error'][]; + /** + * @description A general representation of quantity and unit. + * @example { + * "@type": "EventMeasurement", + * "value": 17.13, + * "unitId": "gal1ac-1" + * } + */ + EventMeasurement: { + /** @example EventMeasurement */ + '@type'?: string; /** - * @description Farms Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 + * Format: double + * @description The quantity represented by this measurement. */ - farm?: unknown; + value?: number; /** - * @description Asynchronous Shapefiles Link. - * @example https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg + * @description The unit associated to the quantity measured + * @example gal1ac-1. */ - shapeFileAsync?: unknown; + unitId?: string; + /** @example vrSolutionRateLiquid */ + variableRepresentation?: string; /** - * @description Link to work plan associated to the operation. - * @example https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e + * @description Indicates whether a manual data edit was directly applied to this value. If a data edit for a different layer affected this value, it *will not be set*. May not be serialized if false. + * @example false */ - workPlans?: unknown; + edited?: boolean; }; - LinkGETFieldOperationsId: { + /** @description Relevant stats for a measurement recorded during the operation. */ + EventMeasurementStats: { + /** @example EventMeasurementStats */ + '@type'?: string; + areaRecorded?: components['schemas']['EventMeasurement']; + averageValue?: components['schemas']['EventMeasurement']; + totalValue?: components['schemas']['EventMeasurement']; + minValue?: components['schemas']['EventMeasurement']; + maxValue?: components['schemas']['EventMeasurement']; + firstValue?: components['schemas']['EventMeasurement']; + lastValue?: components['schemas']['EventMeasurement']; + }; + /** @description A general representation of an observed value. */ + EventObservation: { + /** @example EventObservation */ + '@type'?: string; /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456 + * @description The observed value, e.g. NW wind direction. + * @example NW */ - organization?: unknown; + value?: string; + }; + /** @description Relevant stats for the values for an observation during the operation. */ + EventObservationStats: { + areaRecorded?: components['schemas']['EventMeasurement']; + firstObservation?: components['schemas']['EventObservation']; + lastObservation?: components['schemas']['EventObservation']; + predominantObservation?: components['schemas']['EventObservation']; + }; + /** @description The farm associated with this FieldOperation. Populated only when the associated embed is requested. */ + Farm: { /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 + * @description Globally unique identifier for this farm. + * @example 4b781329-2f8c-4a68-98ce-8d5213fc8588 */ - field?: unknown; + id?: string; + links?: components['schemas']['Link'][]; /** - * @description Field Operation Measurements Link. - * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes + * @description The name of the farm. + * @example My Custom Farm Name */ - measurementTypes?: unknown; + name?: string; + /** @example false */ + archived?: boolean; + }; + /** @description The field associated with this FieldOperation. Populated only when the associated embed is requested. */ + Field: { /** - * @description zero or more field operation measurements links. These will vary by the type of operation - * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult + * @description Globally unique identifier for this field. + * @example 5ef3b56c-c01d-4ce5-b630-bd1850e39c29 */ - measurement?: unknown; + id?: string; + links?: components['schemas']['Link'][]; /** - * @description Clients Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 + * @description The name of the field. + * @example My Custom Field Name */ - client?: unknown; + name?: string; + /** @example false */ + archived?: boolean; /** - * @description Farms Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 + * Format: date-time + * @example 2020-09-21T15:41:15.205Z */ - farm?: unknown; + lastModifiedTime?: string; }; - Link: string; /** @description A link provides a URI to access resources that are related to the response. */ FieldLink: { /** @@ -278,253 +436,374 @@ export interface components { */ uri?: string; }; - /** - * @description The type of operation - * @example HARVEST - */ - FieldOperationTypesEnum: string; - /** @description The client associated with this FieldOperation. Populated only when the associated embed is requested. */ - Client: { + FieldOperation: { /** - * @description Globally unique identifier for this client. - * @example 66dd9c64-71d7-4904-86f8-e04d40ccf59d + * @description Field Operation ID + * @example MjkyMDdfNT */ id?: string; - links?: components['schemas']['Link'][]; /** - * @description The name of the client. - * @example My Custom Client Name + * @description A new x-deere-signature response header will be included if the response has changed since last api call. + * @example 520122365ebb4870a344784570d202c7 */ - name?: string; - /** @example false */ - archived?: boolean; - }; - /** @description The farm associated with this FieldOperation. Populated only when the associated embed is requested. */ - Farm: { + 'x-deere-signature'?: string; /** - * @description Globally unique identifier for this farm. - * @example 4b781329-2f8c-4a68-98ce-8d5213fc8588 + * @description Field Operation type. + * @example application */ - id?: string; - links?: components['schemas']['Link'][]; + fieldOperationType?: string; /** - * @description The name of the farm. - * @example My Custom Farm Name + * @description Crop season year. + * @example 2015 */ - name?: string; - /** @example false */ - archived?: boolean; - }; - /** @description The field associated with this FieldOperation. Populated only when the associated embed is requested. */ - Field: { + cropSeason?: string; /** - * @description Globally unique identifier for this field. - * @example 5ef3b56c-c01d-4ce5-b630-bd1850e39c29 + * @description The type of machine that generated the field operation. This may be "unknown". + * @example unknown */ - id?: string; - links?: components['schemas']['Link'][]; + adaptMachineType?: string; /** - * @description The name of the field. - * @example My Custom Field Name + * Format: date-time + * @description Starting date and time of this field operation.. + * @example 2015-05-29T22:00:19.200Z */ - name?: string; - /** @example false */ - archived?: boolean; + startDate?: string; /** * Format: date-time - * @example 2020-09-21T15:41:15.205Z + * @description Ending date and time of this field operation. + * @example 2015-05-29T22:23:53.746Z */ - lastModifiedTime?: string; - }; - /** - * Format: int64 - * @description The organization owning the fields and associated operations - * @example 123456 - */ - OrgId: number; - TankMixProduct: { - guid?: components['schemas']['ProductErid']; + endDate?: string; /** - * @description Flag indicating whether the product is a tank mix (true) or a single component (false). + * Format: date-time + * @description Last time that anything was modified on this field operation. + * @example 2016-04-29T22:12:53.446Z + */ + modifiedTime?: string; + /** + * Format: string + * @description Crop Name. + * @example CORN_WET + */ + cropName?: string; + /** + * @description List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix + * @example [ { "@type": "Product", "productType": "SEED", "name": "aa1", "tankMix": false } ] + */ + varieties?: unknown[]; + /** + * @description Details of the product applied during this field operation. Includes name, tankmix, rate, carrier, and components data. + * @example See sample response below. + */ + products?: unknown; + /** + * @description Name of the tank mix + * @example Tank Mix Use 1 + */ + name?: string; + /** + * @description Boolean flag as to whether the application operation was for a tank mix or not. * @example true */ tankMix?: boolean; - rate?: components['schemas']['EventMeasurement']; - carrier?: components['schemas']['Component']; - components?: components['schemas']['Component'][]; - }; - NonTankMixProduct: { - /** @example Product */ - '@type'?: string; - guid?: components['schemas']['ProductErid']; - productType?: components['schemas']['FieldOperationProductTypesEnum']; /** - * @description The general name of the product, or 'Tank Mix' for a product consisting of multiple components in a carrier, for APPLICATION operations. - * @example Priaxor + * @description Rate of the application. Includes value and unitId data. + * @example See sample response below. */ - name?: string; + rate?: unknown; /** - * @description The brand name of product. - * @example BrandForProducts + * @description Numeric value. + * @example 10 */ - brand?: string; - agencyRegistrationNumber?: components['schemas']['AgencyRegistrationNumber']; + value?: number; /** - * @description Flag indicating whether the product is a tank mix (true) or a single component (false). - * @example false + * @description Unit of value. + * @example gal1ac-1 */ - tankMix?: boolean; - }; - /** @description An individual product combined with others in a tank mix. */ - Component: { - /** @example Component */ - '@type'?: string; + unitId?: string; /** - * @description Display recorded Component GUID. - * @example fa14f029-831c-456b-a76e-2d3c26207c19 + * @description Data on the product carrier. Includes name and rate. + * @example See sample response below. */ - guid?: string; + carrier?: unknown; /** - * @description The general name of the product. - * @example Water + * @description Data on the product component. Includes name and rate. + * @example See sample response below. */ - name?: string; - agencyRegistrationNumber?: components['schemas']['AgencyRegistrationNumber']; - rate?: components['schemas']['EventMeasurement']; + components?: unknown; + fieldOperationMachines?: components['schemas']['FieldOperationMachines']; + /** @description Embedded measurement data. Present only when the request passes ?embed=measurementTypes. JD's published OpenAPI spec omits this field; it is patched in via scripts/embed-contracts.yaml. Verified against real wire traces from the field-mcp probe on 2026-04-14. */ + measurementTypes?: components['schemas']['FieldOperationMeasurement'][]; + }; + FieldOperationCompareStatisticsRequest: { + /** @description The field operation ids that we are comparing so for Yield By Variety the target is the Seeding field operation(s) */ + compareOperationIds: string[]; + baseLayer: components['schemas']['FieldOperationLayersEnum']; + compareLayer: components['schemas']['FieldOperationLayersEnum']; + boundary?: components['schemas']['Polygon']; }; /** - * @description The product identifier managed by regulatory agency. e.g. EPA registration number of product issued by the US Environmental Protection Agency - * @example 0084229-00011-AA-0000000 + * @description Layers based on defined comparisons of other layers + * @enum {string} */ - AgencyRegistrationNumber: string; - /** - * @description The type of display - * @enum {string} - */ - JohnDeereDisplayTypeEnum: - | 'GS4_4600' - | 'GS3_2630' - | 'GS2_2600' - | 'GS2_1800' - | 'GS2_CommandCenter'; - /** - * @description The type of display - * @enum {string} - */ - ConnectMobileEnum: 'OneAppMobile'; - /** - * @description The type of display - * @enum {string} - */ - ThirdPartyDisplayTypeEnum: - | 'IntegraVersa' - | 'ProtobufV36' - | 'ProtobufV41' - | 'TrimbleFMX' - | 'Unknown'; - DisplayTypeEnum: components['schemas']['JohnDeereDisplayTypeEnum'] & - components['schemas']['ConnectMobileEnum'] & - components['schemas']['ThirdPartyDisplayTypeEnum']; - /** - * @description - A unique textual identifier for a type of Crop - EnumList is based on ISG_Shared/blob/master/crops/crops.xml - You may use com.deere.ads.utility.CropTokenLookup in platform to retrieve crop ids. - * @example ALFALFA - */ - CropToken: string; - /** - * @description Filter results by crop season. - * @example 2016 - */ - CropSeason: number; - /** - * @description The crop seasons (year) of the recent operation - * @example [ - * "2016", - * "2015" - * ] - */ - CropSeasons: components['schemas']['CropSeason'][]; - CropSeasonSummary: { - links?: components['schemas']['FieldLink'][]; - fieldOperationType?: components['schemas']['FieldOperationTypesEnum']; - cropSeasons?: components['schemas']['CropSeasons']; + FieldOperationCompositeLayersEnum: 'QualityTarget' | 'QualityPrescription'; + FieldOperationGeoTIFFLocation: { + /** + * Format: uri + * @description AWS S3 Presigned URL of Resource. Use gzip for best compression. + * @example https://s3.us-east-2.amazonaws.com/s3-bucket-path/49f35d8a-ff54-4b83-81c4-0f45b7b47eba + */ + location?: string; + mapLegend?: components['schemas']['MapLegend']; + extent?: components['schemas']['MapExtent']; + }; + FieldOperationId: { + /** + * @description The organization ID. + * @example 1234 + */ + orgId?: string; + /** + * @description The year in which the grower logically assigned this operation. Note that operational activity may occur outside this calendar year. + * @example 2015 + */ + cropSeason?: string; + /** + * @description A string indicating the type of operation (valid values include: seeding, application, harvest, or tillage). + * @example Harvest + */ + fieldOperationType?: string; + /** + * Format: string + * @description A string indicating the type of crop used during this operation. Can be omitted based on operation type and original data source. Only available on harvest and seeding operation types. + * @example CORN_WET + */ + cropName?: string; + /** + * Format: date-time + * @description Last time that anything was modified on this field operation. + * @example 2018-11-17T11:53:00.000Z + */ + modifiedTime?: string; + /** + * @description List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix + * @example [ { "@type": "Product", "productType": "SEED", "name": "aa1", "tankMix": false } ] + */ + varieties?: unknown[]; + /** + * @description The type of machine that generated the field operation. This may be "unknown". + * @example unknown + */ + adaptMachineType?: string; + fieldOperationMachines?: components['schemas']['FieldOperationMachines']; + /** @description Same measurementTypes array as on FieldOperation, but on the FieldOperationId schema returned by GET /fieldOperations/{id}. JD's spec treats these as separate types but the embedded wire format is identical. Added in 2.1.1 after 2.1.0 shipped coverage for the list/listAll response shape only. */ + measurementTypes?: components['schemas']['FieldOperationMeasurement'][]; }; /** - * @description FieldOperation Product Types TODO Enum - * @enum {string} - */ - FieldOperationProductTypesEnum: 'OTHER' | 'CHEMICAL' | 'SEED' | 'FEED' | 'FERTILIZER'; - FieldOperationMeasurementTypesEnum: string & - components['schemas']['FieldOperationMeasurementTypesInFullRelease'] & - components['schemas']['FieldOperationMeasurementTypesInAgreportsApi']; - /** - * @description FieldOperation Measurement Types supported in the HDP versions of the endpoints and therefore fully released. - * @enum {string} - */ - FieldOperationMeasurementTypesInFullRelease: - | 'SeedingRateTarget' - | 'SeedingRateResult' - | 'SeedingSpeedResult' - | 'SeedingVarietiesTarget' - | 'SeedingVarietiesResult' - | 'ApplicationRateTarget' - | 'ApplicationRateResult' - | 'ApplicationSpeedResult' - | 'HarvestYieldResult' - | 'HarvestYieldContourResult' - | 'HarvestSpecialtyGrossYieldResult' - | 'HarvestWetMassResult' - | 'HarvestMoistureResult' - | 'HarvestTrashResult' - | 'HarvestSpeedResult' - | 'HarvestAdfResult' - | 'HarvestNdfResult' - | 'HarvestCrudeProteinResult' - | 'HarvestStarchResult' - | 'HarvestSugarResult' - | 'TillageDepthResult' - | 'TillagePressureResult' - | 'TillageSpeedResult' - | 'TillageDepthTarget' - | 'TillagePressureTarget'; - /** - * @description FieldOperation Measurement Types supported in the Agreports/DataLake versions of the endpoints. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints. + * @description Layers based on defined types recorded or entered during the field operation. They will use EventObservationStats for statistics. * @enum {string} */ - FieldOperationMeasurementTypesInAgreportsApi: - | 'ElevationResult' - | 'ApplicationHeightTarget' - | 'FuelRateResult' - | 'WindSpeed' - | 'AirTemperature' - | 'TemperatureDifference' - | 'RelativeHumidity' - | 'SoilTemperature' - | 'RatePrescription' - | 'PressurePrescription' - | 'DepthPrescription' - | 'SeedDepthTarget' - | 'SprayPressure' - | 'InoculantDosing' - | 'LengthOfCut' - | 'GaugeWheelMargin' - | 'DownforceResult' - | 'RideQuality' - | 'SeedSpacingVariation' - | 'GroundContact' - | 'Singulation' + FieldOperationIndexLayersEnum: + | 'RateResultByProduct' + | 'RateTargetByProduct' + | 'WindDirection' | 'SkyCondition' | 'SoilMoisture' - | 'TargetQuality' - | 'PrescriptionQuality'; + | 'Varieties'; + FieldOperationLayer: { + /** @example FieldOperationLayer */ + '@type'?: string; + id: components['schemas']['FieldOperationLayersEnum']; + links?: components['schemas']['Link'][]; + }; + FieldOperationLayerImageRequest: { + ranges?: components['schemas']['MapRange'][]; + }; + /** @description Includes the summarized values for all layers on a field operation */ + FieldOperationLayerStatistics: { + /** @example FieldOperationLayerStatistics */ + '@type'?: string; + /** @description Links to associated data. */ + links?: components['schemas']['Link'][]; + layerName?: components['schemas']['FieldOperationLayersEnum']; + statistics?: components['schemas']['LayerStatistics']; + }[]; + /** @description Describe an reponse of operaton layers */ + FieldOperationLayers: components['schemas']['FieldOperationLayer'][]; + FieldOperationLayersEnum: string & + components['schemas']['FieldOperationMeasurementLayersEnum'] & + components['schemas']['FieldOperationIndexLayersEnum'] & + components['schemas']['FieldOperationCompositeLayersEnum']; + FieldOperationMachine: { + /** @example FieldOperationMachine */ + '@type'?: string; + /** + * @description Doc File based Field Operation Machine erid. + * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 + */ + erid?: string; + /** + * Format: guid + * @description Doc File based Field Operation Machine GUID. Deprecated, use erid instead. + * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 + */ + GUID?: string; + /** @example JOHN DEERE */ + make?: string; + /** + * Format: int64 + * @example 2016 + */ + modelYear?: number; + /** @example 824K */ + model?: string; + /** @example Machine1 */ + name?: string; + /** @example WXYEJKB73894JE3 */ + vin?: string; + /** @example combine */ + adaptMachineType?: string; + /** + * Format: int64 + * @description The earliest engine hour measurement for a machine participating in the field operation. + * @example 300 + */ + beginEngineHours?: number; + /** + * Format: int64 + * @description The earliest engine hour measurement for a machine participating in the field operation. + * @example 300 + */ + endEngineHours?: number; + /** + * Format: date-time + * @description The starting date of the field operation by machine in ISO-8601 format. + * @example 2016-11-17T11:53:00.000Z + */ + beginTime?: string; + /** + * Format: date-time + * @description The ending date of the field operation by machine in ISO-8601 format. + * @example 2016-11-17T11:53:00.000Z + */ + endTime?: string; + /** + * Format: date-time + * @description The most recent time the operational data was updated in ISO-8601 format. + * @example 2018-11-17T11:53:00.000Z + */ + modifiedTime?: string; + cropName?: components['schemas']['CropToken']; + products?: components['schemas']['TankMixProduct'] & + components['schemas']['NonTankMixProduct']; + /** + * Format: double + * @description The calibration factor for this machine + * @example 1.25 + */ + calibrationFactor?: number; + /** + * @description JDLink machine that is only populated when the 'machine' embed is specified + * @example { + * "id": "someId", + * "serialNumber": "1234567890123" + * } + */ + machine?: Record; + operators?: components['schemas']['Operator'][]; + links?: components['schemas']['Link'][]; + }; + /** @description Machines utilized during this operation */ + FieldOperationMachines: { + /** + * @description Doc File based Field Operation Machine erid. + * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 + */ + erid?: string; + Operators?: components['schemas']['Operators']; + /** + * Format: int64 + * @description PrincipalId of the machine + * @example 637795 + */ + machineId?: number | null; + /** + * @description VIN of the machine + * @example WXYEJKB73894JE3 + */ + vin?: string; + }; + FieldOperationMeasurement: unknown & + components['schemas']['FieldOperationMeasurementInFullRelease'] & + components['schemas']['FieldOperationMeasurementFromAgreportsApi']; /** * @description FieldOperation Measurement Category * @enum {string} */ FieldOperationMeasurementCategoryEnum: 'Target' | 'Result' | 'Prescription'; - FieldOperationLayersEnum: string & - components['schemas']['FieldOperationMeasurementLayersEnum'] & - components['schemas']['FieldOperationIndexLayersEnum'] & - components['schemas']['FieldOperationCompositeLayersEnum']; + /** @description Properties added to FieldOperationMeasurement when trying to add the measurementTypes in FieldOperationMeasurementTypesInAgreportsApi via agreports-api. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints. */ + FieldOperationMeasurementFromAgreportsApi: { + elevation?: components['schemas']['EventMeasurementStats']; + fuelRate?: components['schemas']['EventMeasurementStats']; + applicationHeight?: components['schemas']['EventMeasurementStats']; + windSpeed?: components['schemas']['EventMeasurementStats']; + temperature?: components['schemas']['EventMeasurementStats']; + temperatureDifference?: components['schemas']['EventMeasurementStats']; + humidity?: components['schemas']['EventMeasurementStats']; + windDirection?: components['schemas']['EventObservationStats']; + skyCondition?: components['schemas']['EventObservationStats']; + soilMoisture?: components['schemas']['EventObservationStats']; + rate?: components['schemas']['EventMeasurementStats']; + pressure?: components['schemas']['EventMeasurementStats']; + depth?: components['schemas']['EventMeasurementStats']; + dosing?: components['schemas']['EventMeasurementStats']; + cutLength?: components['schemas']['EventMeasurementStats']; + gaugeWheelMargin?: components['schemas']['EventMeasurementStats']; + downforce?: components['schemas']['EventMeasurementStats']; + groundContact?: components['schemas']['EventMeasurementStats']; + rideQuality?: components['schemas']['EventMeasurementStats']; + seedSpacingVariation?: components['schemas']['EventMeasurementStats']; + singulation?: components['schemas']['EventMeasurementStats']; + doubles?: components['schemas']['EventMeasurementStats']; + skips?: components['schemas']['EventMeasurementStats']; + yieldVolume?: components['schemas']['EventMeasurementStats']; + quality?: components['schemas']['EventMeasurementStats']; + }; + /** @description The fully released portion of the FieldOperationMeasurement. */ + FieldOperationMeasurementInFullRelease: { + links?: components['schemas']['Link'][]; + /** @example FieldOperationMeasurement */ + '@type'?: string; + measurementName?: components['schemas']['FieldOperationMeasurementTypesEnum']; + measurementCategory?: components['schemas']['FieldOperationMeasurementCategoryEnum']; + area?: components['schemas']['EventMeasurement']; + yield?: components['schemas']['EventMeasurement']; + averageYield?: components['schemas']['EventMeasurement']; + averageMoisture?: components['schemas']['EventMeasurement']; + wetMass?: components['schemas']['EventMeasurement']; + averageWetMass?: components['schemas']['EventMeasurement']; + harvestLabAccumulatedWetMass?: components['schemas']['EventMeasurement']; + averageSpeed?: components['schemas']['EventMeasurement']; + totalMaterial?: components['schemas']['EventMeasurement']; + averageMaterial?: components['schemas']['EventMeasurement']; + averageDepth?: components['schemas']['EventMeasurement']; + averagePressure?: components['schemas']['EventMeasurement']; + averageTrash?: components['schemas']['EventMeasurement']; + averageAcidDetergentFiber?: components['schemas']['EventMeasurement']; + averageNeutralDetergentFiber?: components['schemas']['EventMeasurement']; + averageStarch?: components['schemas']['EventMeasurement']; + averageCrudeProtein?: components['schemas']['EventMeasurement']; + averageSugar?: components['schemas']['EventMeasurement']; + maxAcidDetergentFiber?: components['schemas']['EventMeasurement']; + maxNeutralDetergentFiber?: components['schemas']['EventMeasurement']; + maxStarch?: components['schemas']['EventMeasurement']; + maxCrudeProtein?: components['schemas']['EventMeasurement']; + maxSugar?: components['schemas']['EventMeasurement']; + varietyTotals?: components['schemas']['VarietyTotal'][]; + productTotals?: components['schemas']['ProductTotal'][]; + /** @description Present on ApplicationRateResult, ApplicationSpeedResult, and ApplicationRateTarget measurement entries. JD declares the outer `productTotals` and the inner `ProductTotal` but omits this intermediate layer. Verified in the field-mcp probe on 2026-04-14 (Atrazine application, org 7294700). */ + applicationProductTotals?: components['schemas']['ApplicationProductTotal'][]; + }; /** * @description Layers based on variable rate measurements recorded during the field operation. They will use EventMeasurementStats for statistics. * @enum {string} @@ -571,374 +850,344 @@ export interface components { | 'TemperatureDifference' | 'RelativeHumidity' | 'SoilTemperature'; - /** - * @description Layers based on defined types recorded or entered during the field operation. They will use EventObservationStats for statistics. - * @enum {string} - */ - FieldOperationIndexLayersEnum: - | 'RateResultByProduct' - | 'RateTargetByProduct' - | 'WindDirection' - | 'SkyCondition' - | 'SoilMoisture' - | 'Varieties'; - /** - * @description Layers based on defined comparisons of other layers - * @enum {string} - */ - FieldOperationCompositeLayersEnum: 'QualityTarget' | 'QualityPrescription'; - FieldOperation: { + FieldOperationMeasurementType: { /** - * @description Field Operation ID - * @example MjkyMDdfNT + * @description Measurement Name. Note: This response details section correspond to header-application/vnd.deere.axiom.v3+json + * @example TillageDepthTarget */ - id?: string; + measurementName?: string; /** - * @description A new x-deere-signature response header will be included if the response has changed since last api call. - * @example 520122365ebb4870a344784570d202c7 + * @description Measurement Category. + * @example Target */ - 'x-deere-signature'?: string; + measurementCategory?: string; /** - * @description Field Operation type. - * @example application + * @description The area covered for this measurement. Includes value, and unitId. + * @example See sample response below */ - fieldOperationType?: string; + area?: unknown; /** - * @description Crop season year. - * @example 2015 + * @description The average depth observed across the area covered. Includes value, and unitId. + * @example See sample response below */ - cropSeason?: string; + averageDepth?: unknown; /** - * @description The type of machine that generated the field operation. This may be "unknown". - * @example unknown + * @description Numeric measurement value. + * @example 15.24 */ - adaptMachineType?: string; - /** - * Format: date-time - * @description Starting date and time of this field operation.. - * @example 2015-05-29T22:00:19.200Z - */ - startDate?: string; - /** - * Format: date-time - * @description Ending date and time of this field operation. - * @example 2015-05-29T22:23:53.746Z - */ - endDate?: string; - /** - * Format: date-time - * @description Last time that anything was modified on this field operation. - * @example 2016-04-29T22:12:53.446Z - */ - modifiedTime?: string; - /** - * Format: string - * @description Crop Name. - * @example CORN_WET - */ - cropName?: string; - /** - * @description List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix - * @example [ { "@type": "Product", "productType": "SEED", "name": "aa1", "tankMix": false } ] - */ - varieties?: unknown[]; + value?: number; /** - * @description Details of the product applied during this field operation. Includes name, tankmix, rate, carrier, and components data. - * @example See sample response below. + * @description Unit of measurement. + * @example cm */ - products?: unknown; + unitId?: string; + }; + FieldOperationMeasurementTypesEnum: string & + components['schemas']['FieldOperationMeasurementTypesInFullRelease'] & + components['schemas']['FieldOperationMeasurementTypesInAgreportsApi']; + /** + * @description FieldOperation Measurement Types supported in the Agreports/DataLake versions of the endpoints. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints. + * @enum {string} + */ + FieldOperationMeasurementTypesInAgreportsApi: + | 'ElevationResult' + | 'ApplicationHeightTarget' + | 'FuelRateResult' + | 'WindSpeed' + | 'AirTemperature' + | 'TemperatureDifference' + | 'RelativeHumidity' + | 'SoilTemperature' + | 'RatePrescription' + | 'PressurePrescription' + | 'DepthPrescription' + | 'SeedDepthTarget' + | 'SprayPressure' + | 'InoculantDosing' + | 'LengthOfCut' + | 'GaugeWheelMargin' + | 'DownforceResult' + | 'RideQuality' + | 'SeedSpacingVariation' + | 'GroundContact' + | 'Singulation' + | 'SkyCondition' + | 'SoilMoisture' + | 'TargetQuality' + | 'PrescriptionQuality'; + /** + * @description FieldOperation Measurement Types supported in the HDP versions of the endpoints and therefore fully released. + * @enum {string} + */ + FieldOperationMeasurementTypesInFullRelease: + | 'SeedingRateTarget' + | 'SeedingRateResult' + | 'SeedingSpeedResult' + | 'SeedingVarietiesTarget' + | 'SeedingVarietiesResult' + | 'ApplicationRateTarget' + | 'ApplicationRateResult' + | 'ApplicationSpeedResult' + | 'HarvestYieldResult' + | 'HarvestYieldContourResult' + | 'HarvestSpecialtyGrossYieldResult' + | 'HarvestWetMassResult' + | 'HarvestMoistureResult' + | 'HarvestTrashResult' + | 'HarvestSpeedResult' + | 'HarvestAdfResult' + | 'HarvestNdfResult' + | 'HarvestCrudeProteinResult' + | 'HarvestStarchResult' + | 'HarvestSugarResult' + | 'TillageDepthResult' + | 'TillagePressureResult' + | 'TillageSpeedResult' + | 'TillageDepthTarget' + | 'TillagePressureTarget'; + FieldOperationMeasurement_MeasurementType: { /** - * @description Name of the tank mix - * @example Tank Mix Use 1 + * @description Field Operation name. Note: This response details section correspond to header-application/vnd.deere.axiom.v3.image+json + * @example fieldOperationMapImage */ name?: string; + /** @example See sample response below. */ + declaredType?: unknown; + /** @example See sample response below. */ + scope?: unknown; /** - * @description Boolean flag as to whether the application operation was for a tank mix or not. - * @example true + * @description The PNG image file. + * @example See sample response below. */ - tankMix?: boolean; + image?: Record; /** - * @description Rate of the application. Includes value and unitId data. + * @description The legend used to render the map image. Includes unitId and ranges. * @example See sample response below. */ - rate?: unknown; + legends?: unknown; /** - * @description Numeric value. - * @example 10 + * @description Two coordinates that represent the corners of the image when overlaid onto a Web Mercator projection1. Includes minimumLatitude, minimumLongitude, maximumLatitude, and maximumLongitude. + * @example See sample response below. */ - value?: number; + extent?: unknown; /** - * @description Unit of value. - * @example gal1ac-1 + * @description Numeric values in the legend's ranges are measurements in this unit. The unit depends on the Accept-UOM-System header for the MapImage request. + * @example cm */ unitId?: string; /** - * @description Data on the product carrier. Includes name and rate. - * @example See sample response below. - */ - carrier?: unknown; - /** - * @description Data on the product component. Includes name and rate. + * @description The ranges contained in the legend. Includes either a label (for non-numeric ranges), or minimum, maximum, hexColor, and percent. * @example See sample response below. */ - components?: unknown; - fieldOperationMachines?: components['schemas']['FieldOperationMachines']; - /** @description Embedded measurement data. Present only when the request passes ?embed=measurementTypes. JD's published OpenAPI spec omits this field; it is patched in via scripts/embed-contracts.yaml. Verified against real wire traces from the field-mcp probe on 2026-04-14. */ - measurementTypes?: components['schemas']['FieldOperationMeasurement'][]; - }; - FieldOperationId: { - /** - * @description The organization ID. - * @example 1234 - */ - orgId?: string; + ranges?: unknown; /** - * @description The year in which the grower logically assigned this operation. Note that operational activity may occur outside this calendar year. - * @example 2015 + * @description A label associated with the legend item. May be omitted for ranges with numeric values. + * @example 15 */ - cropSeason?: string; + label?: string; /** - * @description A string indicating the type of operation (valid values include: seeding, application, harvest, or tillage). - * @example Harvest + * @description The HEX color value of the legend item. + * @example #4B0082 */ - fieldOperationType?: string; + hexColor?: string; /** - * Format: string - * @description A string indicating the type of crop used during this operation. Can be omitted based on operation type and original data source. Only available on harvest and seeding operation types. - * @example CORN_WET + * @description The percentage of agronomic data points that are represented by this legend item. For example, 0.05 means that 5% of the operation's measurements fall into this legend range. + * @example 1 */ - cropName?: string; + percent?: number; + /** @example false */ + nil?: boolean; + /** @example true */ + globalScope?: boolean; + /** @example false */ + typeSubstituted?: boolean; + }; + FieldOperationPNGImage: { /** - * Format: date-time - * @description Last time that anything was modified on this field operation. - * @example 2018-11-17T11:53:00.000Z + * @description Base64 encoded PNG image + * @example data:image/png;base64,{base64EncodedContent} */ - modifiedTime?: string; + image?: string; + mapLegend?: components['schemas']['MapLegend']; + extent?: components['schemas']['MapExtent']; + }; + /** + * @description FieldOperation Product Types TODO Enum + * @enum {string} + */ + FieldOperationProductTypesEnum: 'OTHER' | 'CHEMICAL' | 'SEED' | 'FEED' | 'FERTILIZER'; + /** Format: Errors/FieldOperationContextException */ + FieldOperationSearchErrors: { /** - * @description List of seed varieties. Only available on harvest and seeding operation types. May contain guid, productType, name, brand, agencyRegistrationNumber, and tankMix - * @example [ { "@type": "Product", "productType": "SEED", "name": "aa1", "tankMix": false } ] + * Format: guid + * @example 17826sd23-e5e1-4921-8841-3c5f582e3a2e */ - varieties?: unknown[]; + guid?: string; /** - * @description The type of machine that generated the field operation. This may be "unknown". - * @example unknown + * @description The value that was supplied for this field in the request + * @example invalid/unsupported geojson */ - adaptMachineType?: string; - fieldOperationMachines?: components['schemas']['FieldOperationMachines']; - /** @description Same measurementTypes array as on FieldOperation, but on the FieldOperationId schema returned by GET /fieldOperations/{id}. JD's spec treats these as separate types but the embedded wire format is identical. Added in 2.1.1 after 2.1.0 shipped coverage for the list/listAll response shape only. */ - measurementTypes?: components['schemas']['FieldOperationMeasurement'][]; - }; - UpdateFieldOperation: { - cropSeason?: components['schemas']['CropSeason']; - cropName?: components['schemas']['CropToken']; - varieties?: ( - | components['schemas']['NameToEridEdit'] - | components['schemas']['EridToEridEdit'] - )[]; - product?: { - guid?: components['schemas']['ProductErid']; - }; + message?: string; + errors?: Record[]; }; - FieldOperationMachine: { - /** @example FieldOperationMachine */ + /** + * @description The type of operation + * @example HARVEST + */ + FieldOperationTypesEnum: string; + FieldOperationWorkNote: { + /** @example FieldOperationWorkNote */ '@type'?: string; - /** - * @description Doc File based Field Operation Machine erid. - * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 - */ - erid?: string; /** * Format: guid - * @description Doc File based Field Operation Machine GUID. Deprecated, use erid instead. - * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 - */ - GUID?: string; - /** @example JOHN DEERE */ - make?: string; - /** - * Format: int64 - * @example 2016 - */ - modelYear?: number; - /** @example 824K */ - model?: string; - /** @example Machine1 */ - name?: string; - /** @example WXYEJKB73894JE3 */ - vin?: string; - /** @example combine */ - adaptMachineType?: string; - /** - * Format: int64 - * @description The earliest engine hour measurement for a machine participating in the field operation. - * @example 300 - */ - beginEngineHours?: number; - /** - * Format: int64 - * @description The earliest engine hour measurement for a machine participating in the field operation. - * @example 300 + * @description eventId of the work note. + * @example 3df13267-c5ee-4cc3-ab79-7cf013dc1e98 */ - endEngineHours?: number; + id: string; + /** @example note1 */ + note: string; /** * Format: date-time - * @description The starting date of the field operation by machine in ISO-8601 format. - * @example 2016-11-17T11:53:00.000Z + * @description Timestamp of the work note. + * @example 2018-08-27T08:08:08.000Z */ - beginTime?: string; + timestamp?: string; + /** @description GPS location where the the work note was taken. */ + gpsLocation?: components['schemas']['Point']; + }; + FieldOperationsSearch: { + fieldIds?: string[]; + fieldOperationTypes?: components['schemas']['FieldOperationTypesEnum'][]; + cropTypes?: components['schemas']['CropToken'][]; + displayTypes?: components['schemas']['DisplayTypeEnum'][]; /** * Format: date-time - * @description The ending date of the field operation by machine in ISO-8601 format. - * @example 2016-11-17T11:53:00.000Z + * @description The starting date of the operation in ISO-8601 format. + * @example 2018-08-27T08:08:08.000Z */ - endTime?: string; + startDate?: string; /** * Format: date-time - * @description The most recent time the operational data was updated in ISO-8601 format. - * @example 2018-11-17T11:53:00.000Z + * @description The ending date of the operation in ISO-8601 format. + * @example 2019-08-27T08:08:08.000Z */ - modifiedTime?: string; - cropName?: components['schemas']['CropToken']; - products?: components['schemas']['TankMixProduct'] & - components['schemas']['NonTankMixProduct']; + endDate?: string; + embed?: ('client' | 'farm' | 'field' | 'fieldOperationMachines' | 'measurementTypes')[]; + }; + /** + * @description The type of display + * @enum {string} + */ + JohnDeereDisplayTypeEnum: + | 'GS4_4600' + | 'GS3_2630' + | 'GS2_2600' + | 'GS2_1800' + | 'GS2_CommandCenter'; + /** @description The statistics for a given layer context. */ + LayerStatistics: { + /** @example LayerStatistics */ + '@type'?: string; + } & ( + | components['schemas']['EventMeasurementStats'] + | components['schemas']['EventObservationStats'] + ); + Link: string; + LinkGETFieldOperations: { /** - * Format: double - * @description The calibration factor for this machine - * @example 1.25 + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 */ - calibrationFactor?: number; + organization?: unknown; /** - * @description JDLink machine that is only populated when the 'machine' embed is specified - * @example { - * "id": "someId", - * "serialNumber": "1234567890123" - * } + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 */ - machine?: Record; - operators?: components['schemas']['Operator'][]; - links?: components['schemas']['Link'][]; - }; - UpdateFieldOperationMachine: { + field?: unknown; /** - * @description Doc File based Field Operation Machine erid. - * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 + * @description Field Operation Measurements Link. + * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes */ - erid?: string; + measurementTypes?: unknown; /** - * Format: double - * @description The calibration factor for this machine - * @example 1.25 + * @description zero or more field operation measurements links. These will vary by the type of operation + * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult */ - calibrationFactor?: number; - }; - FieldOperationWorkNote: { - /** @example FieldOperationWorkNote */ - '@type'?: string; + measurement?: unknown; /** - * Format: guid - * @description eventId of the work note. - * @example 3df13267-c5ee-4cc3-ab79-7cf013dc1e98 + * @description Clients Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 */ - id: string; - /** @example note1 */ - note: string; + client?: unknown; /** - * Format: date-time - * @description Timestamp of the work note. - * @example 2018-08-27T08:08:08.000Z + * @description Farms Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 */ - timestamp?: string; - /** @description GPS location where the the work note was taken. */ - gpsLocation?: components['schemas']['Point']; - }; - MapRangeForIndex: { - /** @example MapLegendItem */ - '@type'?: string; + farm?: unknown; /** - * @description The string label for this range. Used for images that are not based on numerical values - * @example Variety 1 + * @description Asynchronous Shapefiles Link. + * @example https://sandboxapi.deere.com/platform/fieldOps/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNg */ - label?: string; + shapeFileAsync?: unknown; /** - * @description The color used in the image for this rage - * @example #cc0000 + * @description Link to work plan associated to the operation. + * @example https://sandboxapi.deere.com/platform/organizations/123456/workPlans/2fac815e-5696-4ff6-86a0-39093b7dbf7e */ - hexColor?: string; + workPlans?: unknown; + }; + LinkGETFieldOperationsId: { /** - * Format: double - * @description The proportion of the field operation matching this range (not actually a percentage). - * @example 0.15 + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 */ - percent?: number; + organization?: unknown; /** - * Format: int64 - * @description This is a placeholder for various index key - * @example 55 + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 */ - key?: number; - }; - MapRangeForMeasurement: { - /** @example MapLegendItem */ - '@type'?: string; + field?: unknown; /** - * Format: double - * @description The inclusive minimum value included in this range - * @example 13.15 + * @description Field Operation Measurements Link. + * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes */ - minimum?: number; + measurementTypes?: unknown; /** - * Format: double - * @description The exclusive maximum value included in this range - * @example 17.95 + * @description zero or more field operation measurements links. These will vary by the type of operation + * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkMw/measurementTypes/TillagePressureResult */ - maximum?: number; + measurement?: unknown; /** - * @description The color used in the image for this rage - * @example #cc0000 + * @description Clients Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/clients/46234f43-0000-1000-4014-e1e1e11124e0 */ - hexColor?: string; + client?: unknown; /** - * Format: double - * @description The proportion of the field operation matching this range (not actually a percentage). - * @example 0.15 + * @description Farms Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/farms/4641d448-0000-1000-4033-e1e1e11124e0 */ - percent?: number; + farm?: unknown; }; - MapRangeForGeoTiff: { - /** @example MapLegendItem */ - '@type'?: string; + LinksGet: { /** - * @description The string label for this range. Used for images that are not based on numerical values - * @example Variety 1 + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 */ - label?: string; + organization?: unknown; /** - * Format: int64 - * @description This is a placeholder for GeoTiff based Index Key - * @example 1 + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27 */ - key?: number; - }; - MapRange: components['schemas']['MapRangeForGeoTiff'] & - components['schemas']['MapRangeForIndex'] & - components['schemas']['MapRangeForMeasurement']; - MapRangeWithLayerStatistics: Record & - components['schemas']['MapRange'] & { - /** @example MapRangeWithLayerStatistics */ - '@type'?: string; - statistics?: components['schemas']['LayerStatistics']; - }; - /** @description Describes the breaks and their colors for an image */ - MapLegend: { - /** @example MapLegend */ - '@type'?: string; - layerName?: components['schemas']['FieldOperationLayersEnum']; + field?: unknown; /** - * @description Units for the legend - * @example lb1ac-1 + * @description Field Operations Link. + * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA */ - unitId?: string; - ranges?: components['schemas']['MapRange'][]; + fieldOperation?: unknown; + /** + * @description Field Operation Measurements Link. + * @example https://sandboxapi.deere.com/platform/fieldOperations/MjIzMDMxXzU4NDFkMDM2YTA2ZDkwMDk3MGYyNDJkNA/measurementTypes/TillageDepthTarget + */ + measurementType?: unknown; }; /** @description The GPS extents of a map image */ MapExtent: { @@ -963,175 +1212,125 @@ export interface components { */ maximumLongitude?: number; }; - FieldOperationPNGImage: { + /** @description Describes the breaks and their colors for an image */ + MapLegend: { + /** @example MapLegend */ + '@type'?: string; + layerName?: components['schemas']['FieldOperationLayersEnum']; /** - * @description Base64 encoded PNG image - * @example data:image/png;base64,{base64EncodedContent} + * @description Units for the legend + * @example lb1ac-1 */ - image?: string; - mapLegend?: components['schemas']['MapLegend']; - extent?: components['schemas']['MapExtent']; + unitId?: string; + ranges?: components['schemas']['MapRange'][]; }; - FieldOperationGeoTIFFLocation: { + MapRange: components['schemas']['MapRangeForGeoTiff'] & + components['schemas']['MapRangeForIndex'] & + components['schemas']['MapRangeForMeasurement']; + MapRangeForGeoTiff: { + /** @example MapLegendItem */ + '@type'?: string; /** - * Format: uri - * @description AWS S3 Presigned URL of Resource. Use gzip for best compression. - * @example https://s3.us-east-2.amazonaws.com/s3-bucket-path/49f35d8a-ff54-4b83-81c4-0f45b7b47eba + * @description The string label for this range. Used for images that are not based on numerical values + * @example Variety 1 */ - location?: string; - mapLegend?: components['schemas']['MapLegend']; - extent?: components['schemas']['MapExtent']; - }; - /** @description Includes the summarized values for all layers on a field operation */ - FieldOperationLayerStatistics: { - /** @example FieldOperationLayerStatistics */ - '@type'?: string; - /** @description Links to associated data. */ - links?: components['schemas']['Link'][]; - layerName?: components['schemas']['FieldOperationLayersEnum']; - statistics?: components['schemas']['LayerStatistics']; - }[]; - /** @description The statistics for a given layer context. */ - LayerStatistics: { - /** @example LayerStatistics */ - '@type'?: string; - } & ( - | components['schemas']['EventMeasurementStats'] - | components['schemas']['EventObservationStats'] - ); - FieldOperationLayerImageRequest: { - ranges?: components['schemas']['MapRange'][]; - }; - FieldOperationCompareStatisticsRequest: { - /** @description The field operation ids that we are comparing so for Yield By Variety the target is the Seeding field operation(s) */ - compareOperationIds: string[]; - baseLayer: components['schemas']['FieldOperationLayersEnum']; - compareLayer: components['schemas']['FieldOperationLayersEnum']; - boundary?: components['schemas']['Polygon']; + label?: string; + /** + * Format: int64 + * @description This is a placeholder for GeoTiff based Index Key + * @example 1 + */ + key?: number; }; - FieldOperationMeasurement: unknown & - components['schemas']['FieldOperationMeasurementInFullRelease'] & - components['schemas']['FieldOperationMeasurementFromAgreportsApi']; - /** @description The fully released portion of the FieldOperationMeasurement. */ - FieldOperationMeasurementInFullRelease: { - links?: components['schemas']['Link'][]; - /** @example FieldOperationMeasurement */ + MapRangeForIndex: { + /** @example MapLegendItem */ '@type'?: string; - measurementName?: components['schemas']['FieldOperationMeasurementTypesEnum']; - measurementCategory?: components['schemas']['FieldOperationMeasurementCategoryEnum']; - area?: components['schemas']['EventMeasurement']; - yield?: components['schemas']['EventMeasurement']; - averageYield?: components['schemas']['EventMeasurement']; - averageMoisture?: components['schemas']['EventMeasurement']; - wetMass?: components['schemas']['EventMeasurement']; - averageWetMass?: components['schemas']['EventMeasurement']; - harvestLabAccumulatedWetMass?: components['schemas']['EventMeasurement']; - averageSpeed?: components['schemas']['EventMeasurement']; - totalMaterial?: components['schemas']['EventMeasurement']; - averageMaterial?: components['schemas']['EventMeasurement']; - averageDepth?: components['schemas']['EventMeasurement']; - averagePressure?: components['schemas']['EventMeasurement']; - averageTrash?: components['schemas']['EventMeasurement']; - averageAcidDetergentFiber?: components['schemas']['EventMeasurement']; - averageNeutralDetergentFiber?: components['schemas']['EventMeasurement']; - averageStarch?: components['schemas']['EventMeasurement']; - averageCrudeProtein?: components['schemas']['EventMeasurement']; - averageSugar?: components['schemas']['EventMeasurement']; - maxAcidDetergentFiber?: components['schemas']['EventMeasurement']; - maxNeutralDetergentFiber?: components['schemas']['EventMeasurement']; - maxStarch?: components['schemas']['EventMeasurement']; - maxCrudeProtein?: components['schemas']['EventMeasurement']; - maxSugar?: components['schemas']['EventMeasurement']; - varietyTotals?: components['schemas']['VarietyTotal'][]; - productTotals?: components['schemas']['ProductTotal'][]; - /** @description Present on ApplicationRateResult, ApplicationSpeedResult, and ApplicationRateTarget measurement entries. JD declares the outer `productTotals` and the inner `ProductTotal` but omits this intermediate layer. Verified in the field-mcp probe on 2026-04-14 (Atrazine application, org 7294700). */ - applicationProductTotals?: components['schemas']['ApplicationProductTotal'][]; - }; - /** @description Properties added to FieldOperationMeasurement when trying to add the measurementTypes in FieldOperationMeasurementTypesInAgreportsApi via agreports-api. These are released to some clients but, *will never* be released to all clients. Similar data will be available from layer and statistics endpoints. */ - FieldOperationMeasurementFromAgreportsApi: { - elevation?: components['schemas']['EventMeasurementStats']; - fuelRate?: components['schemas']['EventMeasurementStats']; - applicationHeight?: components['schemas']['EventMeasurementStats']; - windSpeed?: components['schemas']['EventMeasurementStats']; - temperature?: components['schemas']['EventMeasurementStats']; - temperatureDifference?: components['schemas']['EventMeasurementStats']; - humidity?: components['schemas']['EventMeasurementStats']; - windDirection?: components['schemas']['EventObservationStats']; - skyCondition?: components['schemas']['EventObservationStats']; - soilMoisture?: components['schemas']['EventObservationStats']; - rate?: components['schemas']['EventMeasurementStats']; - pressure?: components['schemas']['EventMeasurementStats']; - depth?: components['schemas']['EventMeasurementStats']; - dosing?: components['schemas']['EventMeasurementStats']; - cutLength?: components['schemas']['EventMeasurementStats']; - gaugeWheelMargin?: components['schemas']['EventMeasurementStats']; - downforce?: components['schemas']['EventMeasurementStats']; - groundContact?: components['schemas']['EventMeasurementStats']; - rideQuality?: components['schemas']['EventMeasurementStats']; - seedSpacingVariation?: components['schemas']['EventMeasurementStats']; - singulation?: components['schemas']['EventMeasurementStats']; - doubles?: components['schemas']['EventMeasurementStats']; - skips?: components['schemas']['EventMeasurementStats']; - yieldVolume?: components['schemas']['EventMeasurementStats']; - quality?: components['schemas']['EventMeasurementStats']; - }; - /** - * @description A general representation of quantity and unit. - * @example { - * "@type": "EventMeasurement", - * "value": 17.13, - * "unitId": "gal1ac-1" - * } - */ - EventMeasurement: { - /** @example EventMeasurement */ + /** + * @description The string label for this range. Used for images that are not based on numerical values + * @example Variety 1 + */ + label?: string; + /** + * @description The color used in the image for this rage + * @example #cc0000 + */ + hexColor?: string; + /** + * Format: double + * @description The proportion of the field operation matching this range (not actually a percentage). + * @example 0.15 + */ + percent?: number; + /** + * Format: int64 + * @description This is a placeholder for various index key + * @example 55 + */ + key?: number; + }; + MapRangeForMeasurement: { + /** @example MapLegendItem */ '@type'?: string; /** * Format: double - * @description The quantity represented by this measurement. + * @description The inclusive minimum value included in this range + * @example 13.15 */ - value?: number; + minimum?: number; /** - * @description The unit associated to the quantity measured - * @example gal1ac-1. + * Format: double + * @description The exclusive maximum value included in this range + * @example 17.95 */ - unitId?: string; - /** @example vrSolutionRateLiquid */ - variableRepresentation?: string; + maximum?: number; /** - * @description Indicates whether a manual data edit was directly applied to this value. If a data edit for a different layer affected this value, it *will not be set*. May not be serialized if false. - * @example false + * @description The color used in the image for this rage + * @example #cc0000 */ - edited?: boolean; + hexColor?: string; + /** + * Format: double + * @description The proportion of the field operation matching this range (not actually a percentage). + * @example 0.15 + */ + percent?: number; }; - /** @description Relevant stats for a measurement recorded during the operation. */ - EventMeasurementStats: { - /** @example EventMeasurementStats */ - '@type'?: string; - areaRecorded?: components['schemas']['EventMeasurement']; - averageValue?: components['schemas']['EventMeasurement']; - totalValue?: components['schemas']['EventMeasurement']; - minValue?: components['schemas']['EventMeasurement']; - maxValue?: components['schemas']['EventMeasurement']; - firstValue?: components['schemas']['EventMeasurement']; - lastValue?: components['schemas']['EventMeasurement']; + MapRangeWithLayerStatistics: Record & + components['schemas']['MapRange'] & { + /** @example MapRangeWithLayerStatistics */ + '@type'?: string; + statistics?: components['schemas']['LayerStatistics']; + }; + /** @description Describes an edit that should change the id of any object that matches the name */ + NameToEridEdit: { + /** + * @description The name to match against + * @example Variety A + */ + fromName?: string; + toGuid?: components['schemas']['ProductErid']; }; - /** @description A general representation of an observed value. */ - EventObservation: { - /** @example EventObservation */ + NonTankMixProduct: { + /** @example Product */ '@type'?: string; + guid?: components['schemas']['ProductErid']; + productType?: components['schemas']['FieldOperationProductTypesEnum']; /** - * @description The observed value, e.g. NW wind direction. - * @example NW + * @description The general name of the product, or 'Tank Mix' for a product consisting of multiple components in a carrier, for APPLICATION operations. + * @example Priaxor */ - value?: string; - }; - /** @description Relevant stats for the values for an observation during the operation. */ - EventObservationStats: { - areaRecorded?: components['schemas']['EventMeasurement']; - firstObservation?: components['schemas']['EventObservation']; - lastObservation?: components['schemas']['EventObservation']; - predominantObservation?: components['schemas']['EventObservation']; + name?: string; + /** + * @description The brand name of product. + * @example BrandForProducts + */ + brand?: string; + agencyRegistrationNumber?: components['schemas']['AgencyRegistrationNumber']; + /** + * @description Flag indicating whether the product is a tank mix (true) or a single component (false). + * @example false + */ + tankMix?: boolean; }; Operator: { /** @@ -1146,6 +1345,30 @@ export interface components { /** @example OPERATOR_LICENSE */ license?: string; }; + /** @description Operators that performed work using this machine */ + Operators: { + /** + * @description Unique identifier for this operator + * @example 657b4391-79b3-4012-a617-7ceba7111ad0 + */ + operatorId?: string; + /** + * @description Name of the operator + * @example John Doe + */ + name?: string; + /** + * @description Operator license number + * @example ABC123 + */ + license?: string; + }; + /** + * Format: int64 + * @description The organization owning the fields and associated operations + * @example 123456 + */ + OrgId: number; Point: { /** * @description Identifies the class Point @@ -1175,6 +1398,11 @@ export interface components { /** @description The number of polygons allowed. Currently 1, implying no interior rings. If this number is changes, the maxItems should be considered. From RFC7946: o For type "Polygon", the "coordinates" member MUST be an array of linear ring coordinate arrays. o For Polygons with more than one of these rings, the first MUST be the exterior ring, and any others MUST be interior rings. The exterior ring bounds the surface, and the interior rings (if present) bound holes within the surface. Again, note we only allow a single set of coordinates, implying no interior rings. */ coordinates: number[][][]; }; + /** + * @description Recorded Product Erid. + * @example fa14f029-831c-456b-a76e-2d3c26207c19 + */ + ProductErid: string; /** @description The ProductTotal associated with this FieldOperation. */ ProductTotal: { /** @example ProductTotal */ @@ -1211,127 +1439,84 @@ export interface components { maxCrudeProtein?: components['schemas']['EventMeasurement']; maxSugar?: components['schemas']['EventMeasurement']; }; - /** @description The VarietyTotal associated with this FieldOperation. */ - VarietyTotal: { - /** @example VarietyTotal */ - '@type'?: string; - /** - * Format: guid - * @example 3df13267-c5ee-4cc3-ab79-7cf013dc1e98 - */ - varietyId?: string; - /** @example 2D351 */ - name?: string; - /** @example Mycogen Corp. */ - brand?: string; - area?: components['schemas']['EventMeasurement']; - yield?: components['schemas']['EventMeasurement']; - averageYield?: components['schemas']['EventMeasurement']; - averageMoisture?: components['schemas']['EventMeasurement']; - wetMass?: components['schemas']['EventMeasurement']; - averageWetMass?: components['schemas']['EventMeasurement']; - harvestLabAccumulatedWetMass?: components['schemas']['EventMeasurement']; - totalMaterial?: components['schemas']['EventMeasurement']; - averageMaterial?: components['schemas']['EventMeasurement']; - averageTrash?: components['schemas']['EventMeasurement']; - averageAcidDetergentFiber?: components['schemas']['EventMeasurement']; - averageNeutralDetergentFiber?: components['schemas']['EventMeasurement']; - averageStarch?: components['schemas']['EventMeasurement']; - averageCrudeProtein?: components['schemas']['EventMeasurement']; - averageSugar?: components['schemas']['EventMeasurement']; - maxAcidDetergentFiber?: components['schemas']['EventMeasurement']; - maxNeutralDetergentFiber?: components['schemas']['EventMeasurement']; - maxStarch?: components['schemas']['EventMeasurement']; - maxCrudeProtein?: components['schemas']['EventMeasurement']; - maxSugar?: components['schemas']['EventMeasurement']; - }; - Errors: components['schemas']['Error'][]; - Error: { - /** - * Format: guid - * @example 11111111-2222-3333-4444-555555555555 - */ - guid?: string; - /** - * @description An english description of the error - * @example was invalid because - */ - message?: string; - /** - * @description A string constant representing the type of error - * @example 400 - */ - code?: string; - /** - * @description The name of the property or parameter deemed invalid - * @example example-field - */ - field?: string; - /** - * @description The value that was supplied for this field in the request - * @example Bad value - */ - invalidValue?: string; - }; - /** Format: Errors/FieldOperationContextException */ - FieldOperationSearchErrors: { - /** - * Format: guid - * @example 17826sd23-e5e1-4921-8841-3c5f582e3a2e - */ - guid?: string; - /** - * @description The value that was supplied for this field in the request - * @example invalid/unsupported geojson - */ - message?: string; - errors?: Record[]; - }; - FieldOperationsSearch: { - fieldIds?: string[]; - fieldOperationTypes?: components['schemas']['FieldOperationTypesEnum'][]; - cropTypes?: components['schemas']['CropToken'][]; - displayTypes?: components['schemas']['DisplayTypeEnum'][]; - /** - * Format: date-time - * @description The starting date of the operation in ISO-8601 format. - * @example 2018-08-27T08:08:08.000Z - */ - startDate?: string; + TankMixProduct: { + guid?: components['schemas']['ProductErid']; /** - * Format: date-time - * @description The ending date of the operation in ISO-8601 format. - * @example 2019-08-27T08:08:08.000Z + * @description Flag indicating whether the product is a tank mix (true) or a single component (false). + * @example true */ - endDate?: string; - embed?: ('client' | 'farm' | 'field' | 'fieldOperationMachines' | 'measurementTypes')[]; + tankMix?: boolean; + rate?: components['schemas']['EventMeasurement']; + carrier?: components['schemas']['Component']; + components?: components['schemas']['Component'][]; }; /** - * @description Recorded Product Erid. - * @example fa14f029-831c-456b-a76e-2d3c26207c19 + * @description The type of display + * @enum {string} */ - ProductErid: string; - /** @description Describes an edit that should change the id of any object that matches the name */ - NameToEridEdit: { + ThirdPartyDisplayTypeEnum: + | 'IntegraVersa' + | 'ProtobufV36' + | 'ProtobufV41' + | 'TrimbleFMX' + | 'Unknown'; + UpdateFieldOperation: { + cropSeason?: components['schemas']['CropSeason']; + cropName?: components['schemas']['CropToken']; + varieties?: ( + | components['schemas']['NameToEridEdit'] + | components['schemas']['EridToEridEdit'] + )[]; + product?: { + guid?: components['schemas']['ProductErid']; + }; + }; + UpdateFieldOperationMachine: { /** - * @description The name to match against - * @example Variety A + * @description Doc File based Field Operation Machine erid. + * @example t48a7dd0-as35-44e1-81b4-435d494f7cd5 */ - fromName?: string; - toGuid?: components['schemas']['ProductErid']; - }; - /** @description Describes an edit that should change the id of any object that matches the fromGuid */ - EridToEridEdit: { - fromGuid?: components['schemas']['ProductErid']; - toGuid?: components['schemas']['ProductErid']; + erid?: string; + /** + * Format: double + * @description The calibration factor for this machine + * @example 1.25 + */ + calibrationFactor?: number; }; - /** @description Describe an reponse of operaton layers */ - FieldOperationLayers: components['schemas']['FieldOperationLayer'][]; - FieldOperationLayer: { - /** @example FieldOperationLayer */ + /** @description The VarietyTotal associated with this FieldOperation. */ + VarietyTotal: { + /** @example VarietyTotal */ '@type'?: string; - id: components['schemas']['FieldOperationLayersEnum']; - links?: components['schemas']['Link'][]; + /** + * Format: guid + * @example 3df13267-c5ee-4cc3-ab79-7cf013dc1e98 + */ + varietyId?: string; + /** @example 2D351 */ + name?: string; + /** @example Mycogen Corp. */ + brand?: string; + area?: components['schemas']['EventMeasurement']; + yield?: components['schemas']['EventMeasurement']; + averageYield?: components['schemas']['EventMeasurement']; + averageMoisture?: components['schemas']['EventMeasurement']; + wetMass?: components['schemas']['EventMeasurement']; + averageWetMass?: components['schemas']['EventMeasurement']; + harvestLabAccumulatedWetMass?: components['schemas']['EventMeasurement']; + totalMaterial?: components['schemas']['EventMeasurement']; + averageMaterial?: components['schemas']['EventMeasurement']; + averageTrash?: components['schemas']['EventMeasurement']; + averageAcidDetergentFiber?: components['schemas']['EventMeasurement']; + averageNeutralDetergentFiber?: components['schemas']['EventMeasurement']; + averageStarch?: components['schemas']['EventMeasurement']; + averageCrudeProtein?: components['schemas']['EventMeasurement']; + averageSugar?: components['schemas']['EventMeasurement']; + maxAcidDetergentFiber?: components['schemas']['EventMeasurement']; + maxNeutralDetergentFiber?: components['schemas']['EventMeasurement']; + maxStarch?: components['schemas']['EventMeasurement']; + maxCrudeProtein?: components['schemas']['EventMeasurement']; + maxSugar?: components['schemas']['EventMeasurement']; }; /** @description One element of FieldOperationMeasurement.applicationProductTotals. Not documented in JD's spec; fields are provisional, verified against one Atrazine application wire trace on 2026-04-14. Matches JD's house style of keeping FieldOperationMeasurementInFullRelease fields all optional, so no required[] is declared here. Widen or tighten as additional wire traces arrive. */ ApplicationProductTotal: { @@ -1348,6 +1533,15 @@ export interface components { }; }; responses: { + /** @description Created work note */ + CreatedWorkNote: { + headers: { + /** @description The uri of the newly created resource */ + Location?: string; + [name: string]: unknown; + }; + content?: never; + }; /** @description A collection of field with crop season and FieldOprationType */ CropSeasonSummaries: { headers: { @@ -1366,8 +1560,36 @@ export interface components { }; }; }; - /** @description A collection of field operations */ - FieldOperations: { + /** @description The user has not been provided access to the field operation specified by id. */ + DoesNotHaveAccessToFieldOperation: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user has not been provided access to the Field Operation Layers for this organization. */ + DoesNotHaveAccessToFieldOperationLayers: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user has not been provided access to the Field Operation Measurements for this organization. */ + DoesNotHaveAccessToFieldOperationMeasurements: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user has not been provided access to the field operations for this organization. */ + DoesNotHaveAccessToFieldOperations: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A field operation object */ + FieldOperation: { headers: { [name: string]: unknown; }; @@ -1384,21 +1606,21 @@ export interface components { }; }; }; - /** @description A field operation object */ - FieldOperation: { + /** @description Field Operation Statistics broken down according to the legend for another context. */ + FieldOperationDataAnalysisStatistics: { headers: { [name: string]: unknown; }; content: { 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['LinkGETFieldOperations'][]; + links?: components['schemas']['Link'][]; /** * Format: int64 * @description Number of results in the list * @example 70 */ total?: number; - values?: components['schemas']['FieldOperation'][]; + values?: components['schemas']['MapRangeWithLayerStatistics'][]; }; }; }; @@ -1420,8 +1642,62 @@ export interface components { }; }; }; - /** @description A collection of field operation machines */ - FieldOperationMachines: { + /** @description An Object of Field Operation layer image */ + FieldOperationLayerImage: { + headers: { + /** + * @description The minimum longitude represented in the image + * @example -96.776622 + */ + 'x-minimum-longitude'?: number; + /** + * @description The minimum latitude represented in the image + * @example 40.282002 + */ + 'x-minimum-latitude'?: number; + /** + * @description The maximum longitude represented in the image + * @example -90.047496 + */ + 'x-maximum-longitude'?: number; + /** + * @description The maximum latitude represented in the image + * @example 43.542938 + */ + 'x-maximum-latitude'?: number; + [name: string]: unknown; + }; + content: { + 'image/png': string; + }; + }; + /** @description An Object of Field Operation layer legend */ + FieldOperationLayerLegend: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + id?: components['schemas']['FieldOperationLayersEnum']; + /** + * @description The unit associated to the quantity measured + * @example gal1ac-1. + */ + unitId?: string; + /** @example vrSolutionRateLiquid */ + variableRepresentation?: string; + ranges?: components['schemas']['MapRange'][]; + /** @description embedable base64 encoded PNG image */ + image?: { + /** @example data:image/png;base64,{base64EncodedContent} */ + data?: string; + extent?: components['schemas']['MapExtent']; + }; + }; + }; + }; + /** @description An Object of Field Operation Statistics */ + FieldOperationLayerStatistics: { headers: { [name: string]: unknown; }; @@ -1434,12 +1710,12 @@ export interface components { * @example 70 */ total?: number; - values?: components['schemas']['FieldOperationMachine'][]; + values?: components['schemas']['FieldOperationLayerStatistics']; }; }; }; - /** @description A collection of field operation work notes */ - FieldOperationWorkNotes: { + /** @description An Object of Field Operation Layers */ + FieldOperationLayers: { headers: { [name: string]: unknown; }; @@ -1449,37 +1725,44 @@ export interface components { /** * Format: int64 * @description Number of results in the list - * @example 10 + * @example 70 */ total?: number; - values?: components['schemas']['FieldOperationWorkNote'][]; + values?: components['schemas']['FieldOperationLayers']; }; }; }; - /** @description A field operation work note object */ - FieldOperationWorkNote: { + /** @description A collection of field operation machines */ + FieldOperationMachines: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationWorkNote']; + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['Link'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + values?: components['schemas']['FieldOperationMachine'][]; + }; }; }; - /** @description A collection of Field Operation Measurements */ - FieldOperationMeasurements: { + /** @description An object of Field Operation Measurements or image */ + FieldOperationMeasurement: { headers: { [name: string]: unknown; }; content: { 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['Link'][]; /** * Format: int64 * @description Number of results in the list * @example 70 */ total?: number; - values?: components['schemas']['FieldOperationMeasurement'][]; }; }; }; @@ -1494,44 +1777,40 @@ export interface components { 'application/vnd.deere.axiom.v3.location+tif+json': components['schemas']['FieldOperationGeoTIFFLocation']; }; }; - /** @description An Object of Field Operation Statistics */ - FieldOperationLayerStatistics: { + /** @description An object of Field Operation Measurements or image */ + FieldOperationMeasurementOrImage_MeasurementType: { headers: { [name: string]: unknown; }; content: { + /** + * Field Operation Measurement + * @description Field Operations + */ 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['Link'][]; + links?: components['schemas']['LinksGet'][]; /** * Format: int64 * @description Number of results in the list * @example 70 */ total?: number; - values?: components['schemas']['FieldOperationLayerStatistics']; + values?: components['schemas']['FieldOperationMeasurementType'][]; }; - }; - }; - /** @description Field Operation Statistics broken down according to the legend for another context. */ - FieldOperationDataAnalysisStatistics: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['Link'][]; + 'application/vnd.deere.axiom.v3.image+json': { + links?: components['schemas']['LinksGet'][]; /** * Format: int64 * @description Number of results in the list * @example 70 */ total?: number; - values?: components['schemas']['MapRangeWithLayerStatistics'][]; + values?: components['schemas']['FieldOperationMeasurement_MeasurementType'][]; }; }; }; - /** @description An Object of Field Operation Layers */ - FieldOperationLayers: { + /** @description A collection of Field Operation Measurements */ + FieldOperationMeasurements: { headers: { [name: string]: unknown; }; @@ -1542,174 +1821,148 @@ export interface components { * Format: int64 * @description Number of results in the list * @example 70 - */ - total?: number; - values?: components['schemas']['FieldOperationLayers']; - }; - }; - }; - /** @description An Object of Field Operation layer legend */ - FieldOperationLayerLegend: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': { - id?: components['schemas']['FieldOperationLayersEnum']; - /** - * @description The unit associated to the quantity measured - * @example gal1ac-1. - */ - unitId?: string; - /** @example vrSolutionRateLiquid */ - variableRepresentation?: string; - ranges?: components['schemas']['MapRange'][]; - /** @description embedable base64 encoded PNG image */ - image?: { - /** @example data:image/png;base64,{base64EncodedContent} */ - data?: string; - extent?: components['schemas']['MapExtent']; - }; - }; - }; - }; - /** @description An Object of Field Operation layer image */ - FieldOperationLayerImage: { - headers: { - /** - * @description The minimum longitude represented in the image - * @example -96.776622 - */ - 'x-minimum-longitude'?: number; - /** - * @description The minimum latitude represented in the image - * @example 40.282002 - */ - 'x-minimum-latitude'?: number; - /** - * @description The maximum longitude represented in the image - * @example -90.047496 - */ - 'x-maximum-longitude'?: number; - /** - * @description The maximum latitude represented in the image - * @example 43.542938 - */ - 'x-maximum-latitude'?: number; + */ + total?: number; + values?: components['schemas']['FieldOperationMeasurement'][]; + }; + }; + }; + /** @description A collection of Field Operation Measurements */ + FieldOperationMeasurements_MeasurementType: { + headers: { [name: string]: unknown; }; content: { - 'image/png': string; + 'application/vnd.deere.axiom.v3.image+json': { + links?: components['schemas']['LinksGet'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + values?: components['schemas']['FieldOperationMeasurement_MeasurementType'][]; + }; }; }; - /** @description Accepted */ - RequestHasBeenAccepted: { + /** @description A field operation work note object */ + FieldOperationWorkNote: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': Record; + 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationWorkNote']; }; }; - /** @description Updated successfully */ - UpdatedResponse: { + /** @description A collection of field operation work notes */ + FieldOperationWorkNotes: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['Link'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 10 + */ + total?: number; + values?: components['schemas']['FieldOperationWorkNote'][]; + }; + }; }; - /** @description Not Acceptable. Expected in case of TILLAGE operation. */ - RequestHasNotBeenAccepted: { + /** @description A collection of field operations */ + FieldOperations: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['LinkGETFieldOperations'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + values?: components['schemas']['FieldOperation'][]; + }; + }; }; - /** @description Temporary Redirect. The location will be a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to that URL. Do not include an Authorization header in this request, as the authorization is provided via the pre-signed nature of the URL. */ - RedirectToPreSignedURL: { + /** @description The specified field operation does not exist. */ + InputFieldOperationValueIsInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The user has not been provided access to the field operations for this organization. */ - DoesNotHaveAccessToFieldOperations: { + /** @description The specified organization does not exist. */ + InputOrgValueIsInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The user has not been provided access to the field operation specified by id. */ - DoesNotHaveAccessToFieldOperation: { + /** @description The specified organization or field operation does not exist. */ + InputOrganizationOrFieldOperationIsInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The user has not been provided access to the Field Operation Measurements for this organization. */ - DoesNotHaveAccessToFieldOperationMeasurements: { + /** @description The specified organization, field operation, or layer does not exist. */ + InputOrganizationOrFieldOperationOrLayerIsInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The user has not been provided access to the Field Operation Layers for this organization. */ - DoesNotHaveAccessToFieldOperationLayers: { + /** @description The specified organization, field operation, or measurement name does not exist. */ + InputOrganizationOrFieldOperationOrMeasurementIsInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The specified organization does not exist. */ - InputOrgValueIsInvalid: { + /** @description The specified organization or measurement Type does not exist. */ + InputOrganizationOrMeasurementTypeIsInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The specified field operation does not exist. */ - InputFieldOperationValueIsInvalid: { + /** @description Temporary Redirect. The location will be a pre-signed URL that is valid for no less than one hour. To download the file, perform a GET request to that URL. Do not include an Authorization header in this request, as the authorization is provided via the pre-signed nature of the URL. */ + RedirectToPreSignedURL: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The layer you are trying to edit cannot be edited. */ - RequestedOperationNotSupported: { + /** @description Accepted */ + RequestHasBeenAccepted: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; - }; - }; - /** @description The specified organization or field operation does not exist. */ - InputOrganizationOrFieldOperationIsInvalid: { - headers: { - [name: string]: unknown; + 'application/vnd.deere.axiom.v3+json': Record; }; - content?: never; }; - /** @description The specified organization or measurement Type does not exist. */ - InputOrganizationOrMeasurementTypeIsInvalid: { + /** @description Not Acceptable. Expected in case of TILLAGE operation. */ + RequestHasNotBeenAccepted: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The specified organization, field operation, or layer does not exist. */ - InputOrganizationOrFieldOperationOrLayerIsInvalid: { + /** @description The layer you are trying to edit cannot be edited. */ + RequestedOperationNotSupported: { headers: { [name: string]: unknown; }; - content?: never; - }; - /** @description The specified organization, field operation, or measurement name does not exist. */ - InputOrganizationOrFieldOperationOrMeasurementIsInvalid: { - headers: { - [name: string]: unknown; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; }; - content?: never; }; /** @description The requested resource was not found. */ RequestedResourceNotFound: { @@ -1718,63 +1971,45 @@ export interface components { }; content?: never; }; - /** @description Created work note */ - CreatedWorkNote: { + /** @description Updated successfully */ + UpdatedResponse: { headers: { - /** @description The uri of the newly created resource */ - Location?: string; [name: string]: unknown; }; content?: never; }; }; parameters: { - /** @description Owning Organization ID */ - OrgId: string; - /** @description Field ID */ - FieldId: string; - /** @description Operation ID */ - OperationId: string; - /** @description The identifier for a work note. The work note id will be used to identify unique work notes. */ - WorkNoteId: string; - /** @description The measurementType within field operation by machine */ - MeasurementType: components['schemas']['FieldOperationMeasurementTypesEnum']; - /** @description The operation layer name for a given field operation */ - OperationLayerName: components['schemas']['FieldOperationLayersEnum']; + /** @description Unit of measure system to use for numeric values in the shapefiles. Accepted values are "METRIC", "ENGLISH", and "MIXED".If this header is not specified, the unit system will be determined by the organization preference of the owning organization.For all unit systems, the units are consistent with . */ + 'Accept-UOM-System': string; + /** @description Desired unit system. Takes ENGLISH or METRIC. */ + 'Accept-UOM-System_MeasurementType': string; + /** @description Desired yield representation (unit) type. Accepted values are VOLUME or MASS. */ + 'Accept-Yield-Preference': string; + /** @description Desired yield representation (unit) type. Takes VOLUME or MASS. */ + 'Accept-Yield-Preference_MeasurementType': string; /** @description The type of comparison to apply to the current Field Operation Layer. Rules: * `dataAnalysis` - Build the statistics for the `baseLayer` broken down by the land area for each of the legend values for the `compareLayer`. */ CompareType: 'dataAnalysis'; - /** @description Filter results by field operation type. Takes the values "APPLICATION", "HARVEST", "SEEDING", and "TILLAGE". */ - FieldOperationType: components['schemas']['FieldOperationTypesEnum']; - /** @description The type of operations. If the request param is not supplied, no filtering by fieldOperationType will happen */ - FieldOperationTypes: components['schemas']['FieldOperationTypesEnum'][]; - /** @description List available operation measurement types and totals. */ - FieldEmbed: 'measurementTypes'; - /** @description Query by one or more workPlanIds(comma separated) */ - WorkPlanIds: Record; - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signature': string; - /** @description Set to true for standard Deere rounded measurements. Set to false for not rounded measurements. */ - RoundMeasurements: true | false; + /** @description A percentage value representing how much smoothing/contouring will be applied to the image. Higher numbers mean more contouring. */ + Contour: number; /** @description Retrieve operations for a specific crop season (year). */ CropSeason: components['schemas']['CropSeason']; /** @description Retrieve operations for a specific crop seasons (years). */ CropSeasons: components['schemas']['CropSeasons']; - /** @description If true, this will download the shapefile in small 20MB pieces */ - SplitShapeFile: boolean; - /** @description Choose between point-based and polygon-based shapefiles. Accepted values are "Point" and "Polygon". */ - ShapeType: 'Point' | 'Polygon'; - /** @description Choose a data resolution for the shapefile. Accepted values are "EachSection", "EachSensor", and "OneHertz". */ - Resolution: 'EachSection' | 'EachSensor' | 'OneHertz'; - /** @description Unit of measure system to use for numeric values in the shapefiles. Accepted values are "METRIC", "ENGLISH", and "MIXED".If this header is not specified, the unit system will be determined by the organization preference of the owning organization.For all unit systems, the units are consistent with . */ - 'Accept-UOM-System': string; - /** @description Desired yield representation (unit) type. Accepted values are VOLUME or MASS. */ - 'Accept-Yield-Preference': string; - /** @description Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ - StartDate: string; /** @description Specify the ending date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ EndDate: string; - /** @description A percentage value representing how much smoothing/contouring will be applied to the image. Higher numbers mean more contouring. */ - Contour: number; + /** @description List available operation measurement types and totals. */ + FieldEmbed: 'measurementTypes'; + /** @description Field ID */ + FieldId: string; + /** @description Include additional subelements in response. */ + FieldOperationLayerLegendEmbed: 'image'[]; + /** @description Include additional subelements in response. */ + FieldOperationMachineEmbed: 'machine'[]; + /** @description Filter results by field operation type. Takes the values "APPLICATION", "CARTING", "HARVEST", "SEEDING", and "TILLAGE". */ + FieldOperationType: components['schemas']['FieldOperationTypesEnum']; + /** @description The type of operations. If the request param is not supplied, no filtering by fieldOperationType will happen */ + FieldOperationTypes: components['schemas']['FieldOperationTypesEnum'][]; /** @description Include additional subelements in response. */ FieldOperationsEmbed: ( | 'measurementTypes' @@ -1788,48 +2023,46 @@ export interface components { | 'fieldOperationWorkNotes' | 'operationLayers' )[]; - /** @description Include additional subelements in response. */ - FieldOperationMachineEmbed: 'machine'[]; - /** @description Include additional subelements in response. */ - FieldOperationLayerLegendEmbed: 'image'[]; + /** @description The measurementType within field operation by machine */ + MeasurementType: components['schemas']['FieldOperationMeasurementTypesEnum']; + /** @description Measurement Type */ + MeasurementType_MeasurementType: string; + /** @description Operation ID */ + OperationId: string; /** @description The identifier(s) for Field Operation(s). Used when there is the potential for more than one Field Operation to be passed. The identifier(s) will have a different format for HDP vs. IMET Field Operations but, clients should treat this as a generic string and not parse it in any way. */ OperationIds: string[]; + /** @description The operation layer name for a given field operation */ + OperationLayerName: components['schemas']['FieldOperationLayersEnum']; + /** @description Owning Organization ID */ + OrgId: string; + /** @description Choose a data resolution for the shapefile. Accepted values are "EachSection", "EachSensor", and "OneHertz". */ + Resolution: 'EachSection' | 'EachSensor' | 'OneHertz'; + /** @description Set to true for standard Deere rounded measurements. Set to false for not rounded measurements. */ + RoundMeasurements: true | false; + /** @description Choose between point-based and polygon-based shapefiles. Accepted values are "Point" and "Polygon". */ + ShapeType: 'Point' | 'Polygon'; + /** @description If true, this will download the shapefile in small 20MB pieces */ + SplitShapeFile: boolean; + /** @description Specify the starting date of the seven-day period in ISO-8601 format. Query Filter is inclusive. */ + StartDate: string; + /** @description The identifier for a work note. The work note id will be used to identify unique work notes. */ + WorkNoteId: string; + /** @description Query by one or more workPlanIds(comma separated) */ + WorkPlanIds: Record; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature': string; }; requestBodies: { - /** @description Request body for generating an image for a field operation layer. */ - FieldOperationLayerImageRequest: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationLayerImageRequest']; - }; - }; /** @description Request to get comparison stats for field operations */ FieldOperationCompareStatisticsRequest: { content: { 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationCompareStatisticsRequest']; }; }; - /** @description See the examples for valid manual data edits. Data edits cannot be combined. Data edits may have cascading effects on layers and measurements not specified in the request. For synchronous edits, clients may fetch the Field Operation totals immediately to see the full impact. For asynchronous edits, clients may poll the Field Operation totals to wait for the specified value to be reflected. A status API may be added in the future. */ - UpdateFieldOperationLayerStatisticsRequest: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationLayerStatistics']; - }; - }; - /** @description Update a field operation. */ - UpdateFieldOperationRequest: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['UpdateFieldOperation']; - }; - }; - /** @description Update field operation machines. */ - UpdateFieldOperationMachinesRequest: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['UpdateFieldOperationMachine'][]; - }; - }; - /** @description Payload for the FieldOperationSearch to retrive field operations for provided organization, field ids and duration. */ - SearchFieldOperations: { + /** @description Request body for generating an image for a field operation layer. */ + FieldOperationLayerImageRequest: { content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationsSearch']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationLayerImageRequest']; }; }; /** @description Payload for the FieldOperationWorkNote to create field operation work note. */ @@ -1858,6 +2091,30 @@ export interface components { }; }; }; + /** @description Payload for the FieldOperationSearch to retrive field operations for provided organization, field ids and duration. */ + SearchFieldOperations: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationsSearch']; + }; + }; + /** @description See the examples for valid manual data edits. Data edits cannot be combined. Data edits may have cascading effects on layers and measurements not specified in the request. For synchronous edits, clients may fetch the Field Operation totals immediately to see the full impact. For asynchronous edits, clients may poll the Field Operation totals to wait for the specified value to be reflected. A status API may be added in the future. */ + UpdateFieldOperationLayerStatisticsRequest: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldOperationLayerStatistics']; + }; + }; + /** @description Update field operation machines. */ + UpdateFieldOperationMachinesRequest: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['UpdateFieldOperationMachine'][]; + }; + }; + /** @description Update a field operation. */ + UpdateFieldOperationRequest: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['UpdateFieldOperation']; + }; + }; }; headers: never; pathItems: never; diff --git a/src/types/generated/fields.ts b/src/types/generated/fields.ts index 454185c..d124138 100644 --- a/src/types/generated/fields.ts +++ b/src/types/generated/fields.ts @@ -4,6 +4,45 @@ */ export interface paths { + '/organizations/{orgID}/fields/{id}/clients': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View Clients that Own a Field + * @description View details about the client that owns the field. The response will link to the following resources: fields: View the field the client belongs to. farms: View the farms belonging to the client. owningOrganization: View the org that owns the field. + */ + get: { + parameters: { + query?: never; + header?: { + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'x-deere-signature'?: components['parameters']['X-deere-signature']; + }; + path: { + /** @description The ID of the organization */ + orgId: components['parameters']['OrgId']; + /** @description field guid */ + fieldId: components['parameters']['FieldId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['responses']['getFieldResponse']; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/organizations/{orgId}/fields': { parameters: { query?: never; @@ -213,173 +252,192 @@ export interface paths { patch?: never; trace?: never; }; - '/organizations/{orgID}/fields/{id}/clients': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * View Clients that Own a Field - * @description View details about the client that owns the field. The response will link to the following resources: fields: View the field the client belongs to. farms: View the farms belonging to the client. owningOrganization: View the org that owns the field. - */ - get: { - parameters: { - query?: never; - header?: { - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'x-deere-signature'?: components['parameters']['X-deere-signature']; - }; - path: { - /** @description The ID of the organization */ - orgId: components['parameters']['OrgId']; - /** @description field guid */ - fieldId: components['parameters']['FieldId']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - 200: components['responses']['getFieldResponse']; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; } export type webhooks = Record; export interface components { schemas: { - FieldsResponse: { + ABLine: { + /** @example AbLine */ + '@Type'?: string; + /** @example 356.5847091769351 */ + heading?: number; + aPoint?: components['schemas']['Point']; + }; + AccessPoint: { + /** Format: uri */ + id?: string; + description?: string; + direction?: string; + isEntry?: boolean; + isExit?: boolean; + location?: components['schemas']['Point']; + name?: string; links?: components['schemas']['Link'][]; - totals?: number; - values?: components['schemas']['FieldResponse'][]; }; - FieldResponse: { - /** @example Field */ + Author: { + /** @example User */ '@Type'?: string; - /** @example --- */ + /** @example scoutcarla1 */ + accountName?: string; + /** @example scoutcarla1 */ + givenName?: string; + /** @example scoutcarla1 */ + familyName?: string; + }; + Boundary: { + /** @example Boundary */ + '@Type'?: string; + /** @example Auto-Generated 2014 Harvest */ name?: string; - farms?: components['schemas']['Farms']; - clients?: components['schemas']['Clients']; - boundaries?: components['schemas']['Boundary'][]; - accessPoints?: components['schemas']['AccessPoint'][]; - guidanceLines?: components['schemas']['GuidanceLines'][]; - /** @example true */ - archived?: boolean; - flags?: components['schemas']['Flag'][]; + /** @example Auto */ + sourceType?: string; + /** + * Format: date-time + * @example 2016-11-17T11:53:00.000Z + */ + modifiedTime?: string; + area?: components['schemas']['MeasurementAsDouble']; + workableArea?: components['schemas']['MeasurementAsDouble']; + multipolygons?: components['schemas']['Polygon'][]; + extent?: components['schemas']['Extent']; /** * Format: uuid * @example 9369f3f6-2428-4bba-bf64-0a19cdaf007d */ id?: string; links?: components['schemas']['Link'][]; + /** @description Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries. */ + active?: boolean; + /** @description Indicates whether the contained area is irrigated */ + irrigated?: boolean; }; - Farms: { - /** @example Farms */ - '@Type'?: string; - farms?: components['schemas']['Farm'][]; - }; - Farm: { - /** @example Farm */ + Client: { + /** @example Client */ '@Type'?: string; /** @example --- */ name?: string; /** * Format: uri - * @example 1efb4de1-fe41-42bc-bbb3-d128a432cafd + * @example 68b887c7-1ac2-40a4-b70b-117a8ec34abf */ id?: string; links?: components['schemas']['Link'][]; }; + Clients: { + /** @example Clients */ + '@Type'?: string; + clients?: components['schemas']['Client'][]; + }; + CreateUpdateClient: { + /** @example Client */ + '@Type'?: string; + /** @example SouthEast End_Client */ + name?: string; + }; CreateUpdateFarm: { /** @example Farm */ '@Type'?: string; /** @example SouthEast End */ name?: string; }; - Clients: { - /** @example Clients */ + /** @description Place holder for Matt to create the field object to be created or updated. */ + CreateUpdateField: { + /** @example Field */ '@Type'?: string; - clients?: components['schemas']['Client'][]; + /** @example Land_Demo_1 */ + name?: string; + /** @example true */ + archived?: boolean; + Farms?: { + /** @example Farms */ + '@Type'?: string; + farms?: components['schemas']['CreateUpdateFarm'][]; + }; + Clients?: { + /** @example Clients */ + '@Type'?: string; + clients?: components['schemas']['CreateUpdateClient'][]; + }; }; - Client: { - /** @example Client */ + Extent: { + /** @example Extent */ + '@Type'?: string; + topLeft?: components['schemas']['Point']; + bottomRight?: components['schemas']['Point']; + }; + Farm: { + /** @example Farm */ '@Type'?: string; /** @example --- */ name?: string; /** * Format: uri - * @example 68b887c7-1ac2-40a4-b70b-117a8ec34abf + * @example 1efb4de1-fe41-42bc-bbb3-d128a432cafd */ id?: string; links?: components['schemas']['Link'][]; }; - /** @description Link to another resource */ - GroupLink: { + Farms: { + /** @example Farms */ + '@Type'?: string; + farms?: components['schemas']['Farm'][]; + }; + FieldGuidSearches: { + /** @example FieldGuidSearches */ + '@Type'?: string; + fieldIds?: string[]; + /** @example client */ + clientName?: string; + /** @example farm */ + farmName?: string; + /** @example field */ + fieldName?: string; + embeds?: ( + | 'farms' + | 'clients' + | 'boundaries' + | 'activeBoundary' + | 'simplifiedBoundaries' + | 'metadataOnlyBoundaries' + | 'guidanceLines' + | 'shapes' + | 'accessPoints' + | 'notes' + )[]; + /** @enum {string} */ + status?: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; + }; + FieldResponse: { + /** @example Field */ + '@Type'?: string; + /** @example --- */ + name?: string; + farms?: components['schemas']['Farms']; + clients?: components['schemas']['Clients']; + boundaries?: components['schemas']['Boundary'][]; + accessPoints?: components['schemas']['AccessPoint'][]; + guidanceLines?: components['schemas']['GuidanceLines'][]; + /** @example true */ + archived?: boolean; + flags?: components['schemas']['Flag'][]; /** - * @description Boundaries Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/boundaries + * Format: uuid + * @example 9369f3f6-2428-4bba-bf64-0a19cdaf007d */ - boundaries?: unknown; + id?: string; + links?: components['schemas']['Link'][]; + }; + FieldsPost: { /** - * @description Clients Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/clients + * @description New Field Name + * @example UniqueFieldName */ - clients?: unknown; + name?: string; /** - * @description Farms Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/farms + * @description Archived status (false = active) + * @example false */ - farms?: unknown; - /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456 - */ - owningOrganization?: unknown; - /** - * @description Notes Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes - */ - notes?: unknown; - /** - * @description Boundaries Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true - */ - simplifiedBoundaries?: unknown; - /** - * @description Field Operations Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations - */ - fieldOperation?: unknown; - /** - * @description Map Layer Summaries Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries - */ - mapLayerSummaries?: unknown; - /** - * @description Contribution Definition Link - * @example https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef - */ - contributionDefinition?: unknown; - }; - FieldsPost: { - /** - * @description New Field Name - * @example UniqueFieldName - */ - name?: string; - /** - * @description Archived status (false = active) - * @example false - */ - archived?: string; + archived?: string; /** * @description Existing or Unique (new) farm name * @example FarmName @@ -403,6 +461,66 @@ export interface components { */ 'clients.id'?: string; }; + FieldsResponse: { + links?: components['schemas']['Link'][]; + totals?: number; + values?: components['schemas']['FieldResponse'][]; + }; + Flag: { + /** @example GenericNote */ + '@Type'?: string; + /** + * Format: date-time + * @example 2016-08-19T18:48:48.886Z + */ + createdDate?: string; + /** + * Format: date-time + * @example 2016-08-19T18:48:48.886Z + */ + lastModifiedDate?: string; + /** @example some text */ + text?: string; + metadata?: components['schemas']['MetaData'][]; + author?: components['schemas']['Author'][]; + geometry?: components['schemas']['Geometry']; + /** @example SCOUT */ + noteType?: string; + /** + * Format: uri + * @example 4e7a1fa7-9db9-45ea-94d3-e45b2fa43c2a + */ + id?: string; + links?: components['schemas']['Link'][]; + }; + Geometry: { + coordinates?: string[]; + /** @example Point */ + type?: string; + }; + GetFarm: { + /** @example Farm */ + '@type'?: string; + /** @example John Doe */ + name?: string; + /** + * Format: uuid + * @example 9369f3f6-2428-4bba-bf64-0a19cdaf007d + */ + readonly id?: string; + /** @example false */ + archived?: boolean; + /** @example https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c */ + clientUri?: string; + readonly links?: { + /** @example Link */ + '@type'?: string; + /** @example self */ + rel?: string; + /** @example https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d */ + uri?: string; + }[]; + }; GetFarms: { /** * Format: int32 @@ -420,49 +538,53 @@ export interface components { }[]; values?: components['schemas']['GetFarm'][]; }; - CreateUpdateClient: { - /** @example Client */ - '@Type'?: string; - /** @example SouthEast End_Client */ - name?: string; - }; - Boundary: { - /** @example Boundary */ - '@Type'?: string; - /** @example Auto-Generated 2014 Harvest */ - name?: string; - /** @example Auto */ - sourceType?: string; + /** @description Link to another resource */ + GroupLink: { /** - * Format: date-time - * @example 2016-11-17T11:53:00.000Z + * @description Boundaries Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/boundaries */ - modifiedTime?: string; - area?: components['schemas']['MeasurementAsDouble']; - workableArea?: components['schemas']['MeasurementAsDouble']; - multipolygons?: components['schemas']['Polygon'][]; - extent?: components['schemas']['Extent']; + boundaries?: unknown; /** - * Format: uuid - * @example 9369f3f6-2428-4bba-bf64-0a19cdaf007d + * @description Clients Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/clients */ - id?: string; - links?: components['schemas']['Link'][]; - /** @description Whether or not this boundary is currently in use. A field with associated boundaries will have exactly one active boundary; however, a field may also exist with no boundaries. */ - active?: boolean; - /** @description Indicates whether the contained area is irrigated */ - irrigated?: boolean; - }; - AccessPoint: { - /** Format: uri */ - id?: string; - description?: string; - direction?: string; - isEntry?: boolean; - isExit?: boolean; - location?: components['schemas']['Point']; - name?: string; - links?: components['schemas']['Link'][]; + clients?: unknown; + /** + * @description Farms Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/e61b83f4-3a12-431e-8010-596f2466dc27/farms + */ + farms?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 + */ + owningOrganization?: unknown; + /** + * @description Notes Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/notes + */ + notes?: unknown; + /** + * @description Boundaries Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/boundaries?simple=true + */ + simplifiedBoundaries?: unknown; + /** + * @description Field Operations Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/fieldOperations + */ + fieldOperation?: unknown; + /** + * @description Map Layer Summaries Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/fields/d61b83f4-3a12-431e-8010-596f2466dc27/mapLayerSummaries + */ + mapLayerSummaries?: unknown; + /** + * @description Contribution Definition Link + * @example https://sandboxapi.deere.com/platform/contributionDefinitions/32a256ea-0000-4756-b000-b6dabda856ef + */ + contributionDefinition?: unknown; }; GuidanceLines: components['schemas']['ABLine'] & { bPoint?: components['schemas']['Point']; @@ -496,32 +618,28 @@ export interface components { locked?: boolean; links?: components['schemas']['Link'][]; }; - Flag: { - /** @example GenericNote */ + /** @description Link to another resource */ + Link: { + /** @example self */ + rel?: string; + /** @example https://sandboxapi.deere.com/platform/users/USER */ + uri?: string; + }; + MeasurementAsDouble: { + /** @example MeasurementAsDouble */ '@Type'?: string; /** - * Format: date-time - * @example 2016-08-19T18:48:48.886Z - */ - createdDate?: string; - /** - * Format: date-time - * @example 2016-08-19T18:48:48.886Z + * Format: double + * @example 7.502938 */ - lastModifiedDate?: string; - /** @example some text */ - text?: string; - metadata?: components['schemas']['MetaData'][]; - author?: components['schemas']['Author'][]; - geometry?: components['schemas']['Geometry']; - /** @example SCOUT */ - noteType?: string; + valueAsDouble?: number; + /** @example vrEastShiftComponent */ + vrDomainId?: string; /** - * Format: uri - * @example 4e7a1fa7-9db9-45ea-94d3-e45b2fa43c2a + * @description The unit of measure for this value + * @example ha */ - id?: string; - links?: components['schemas']['Link'][]; + unit?: string; }; MetaData: { /** @example Metadata */ @@ -531,41 +649,6 @@ export interface components { /** @example 9 */ value?: number; }; - Author: { - /** @example User */ - '@Type'?: string; - /** @example scoutcarla1 */ - accountName?: string; - /** @example scoutcarla1 */ - givenName?: string; - /** @example scoutcarla1 */ - familyName?: string; - }; - Geometry: { - coordinates?: string[]; - /** @example Point */ - type?: string; - }; - ABLine: { - /** @example AbLine */ - '@Type'?: string; - /** @example 356.5847091769351 */ - heading?: number; - aPoint?: components['schemas']['Point']; - }; - Polygon: { - /** @example Polygon */ - '@Type'?: string; - rings?: components['schemas']['Ring'][]; - }; - Ring: { - /** @example Ring */ - '@Type'?: string; - points?: components['schemas']['Point'][]; - /** @example exterior */ - type?: string; - passable?: boolean; - }; Point: { /** @example Point */ '@Type'?: string; @@ -582,104 +665,46 @@ export interface components { */ lon?: number; }; - Extent: { - /** @example Extent */ - '@Type'?: string; - topLeft?: components['schemas']['Point']; - bottomRight?: components['schemas']['Point']; - }; - MeasurementAsDouble: { - /** @example MeasurementAsDouble */ + Polygon: { + /** @example Polygon */ '@Type'?: string; - /** - * Format: double - * @example 7.502938 - */ - valueAsDouble?: number; - /** @example vrEastShiftComponent */ - vrDomainId?: string; - /** - * @description The unit of measure for this value - * @example ha - */ - unit?: string; - }; - /** @description Link to another resource */ - Link: { - /** @example self */ - rel?: string; - /** @example https://sandboxapi.deere.com/platform/users/USER */ - uri?: string; + rings?: components['schemas']['Ring'][]; }; - FieldGuidSearches: { - /** @example FieldGuidSearches */ + Ring: { + /** @example Ring */ '@Type'?: string; - fieldIds?: string[]; - /** @example client */ - clientName?: string; - /** @example farm */ - farmName?: string; - /** @example field */ - fieldName?: string; - embeds?: ( - | 'farms' - | 'clients' - | 'boundaries' - | 'activeBoundary' - | 'simplifiedBoundaries' - | 'metadataOnlyBoundaries' - | 'guidanceLines' - | 'shapes' - | 'accessPoints' - | 'notes' - )[]; - /** @enum {string} */ - status?: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; + points?: components['schemas']['Point'][]; + /** @example exterior */ + type?: string; + passable?: boolean; }; - GetFarm: { - /** @example Farm */ - '@type'?: string; - /** @example John Doe */ - name?: string; - /** - * Format: uuid - * @example 9369f3f6-2428-4bba-bf64-0a19cdaf007d - */ - readonly id?: string; - /** @example false */ - archived?: boolean; - /** @example https://apiqa.tal.deere.com/platform/organizations/5555/clients/22b84b4c-b651-d554-a02b-89829cd5239c */ - clientUri?: string; - readonly links?: { - /** @example Link */ - '@type'?: string; - /** @example self */ - rel?: string; - /** @example https://apiqa.tal.deere.com/platform/organizations/5555/farms/9369f3f6-2428-4bba-bf64-0a19cdaf007d */ - uri?: string; - }[]; + }; + responses: { + /** @description Field successfully created */ + Created: { + headers: { + /** @description The uri of the newly created resource */ + Location?: string; + [name: string]: unknown; + }; + content?: never; }; - /** @description Place holder for Matt to create the field object to be created or updated. */ - CreateUpdateField: { - /** @example Field */ - '@Type'?: string; - /** @example Land_Demo_1 */ - name?: string; - /** @example true */ - archived?: boolean; - Farms?: { - /** @example Farms */ - '@Type'?: string; - farms?: components['schemas']['CreateUpdateFarm'][]; + /** @description Field deleted. If the client and farm has only this field the client and farm will be deleted */ + Deleted: { + headers: { + [name: string]: unknown; }; - Clients?: { - /** @example Clients */ - '@Type'?: string; - clients?: components['schemas']['CreateUpdateClient'][]; + content: { + 'application/vnd:deere:axiom:v3+json': unknown; }; }; - }; - responses: { + /** @description Invalid access to organization */ + DoesNotHaveAccessToOrg: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Array of farms */ FarmsReturned: { headers: { @@ -689,30 +714,22 @@ export interface components { 'application/vnd.deere.axiom.v3+json': components['schemas']['GetFarms']; }; }; - /** @description Array of fields containing links related to fields */ - FieldsReturned: { + /** @description Success */ + FieldReturned: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldsResponse']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldResponse']; }; }; - /** @description Get Field by client Id */ - getFieldResponse: { + /** @description Array of fields containing links related to fields */ + FieldsReturned: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['GroupLink'][]; - /** - * Format: int32 - * @example 1 - */ - total?: number; - values?: components['schemas']['FieldResponse'][]; - }; + 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldsResponse']; }; }; /** @description Array of fields with header for partial success. */ @@ -726,22 +743,6 @@ export interface components { 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldsResponse']; }; }; - /** @description Success */ - FieldReturned: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldResponse']; - }; - }; - /** @description Invalid access to organization */ - DoesNotHaveAccessToOrg: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; /** @description Organization not found */ OrgNotFound: { headers: { @@ -756,15 +757,6 @@ export interface components { }; content?: never; }; - /** @description Field successfully created */ - Created: { - headers: { - /** @description The uri of the newly created resource */ - Location?: string; - [name: string]: unknown; - }; - content?: never; - }; /** @description Field successfully updated */ Updated: { headers: { @@ -774,14 +766,12 @@ export interface components { 'application/vnd.deere.axiom.v3+json': components['schemas']['FieldsPost']; }; }; - /** @description Field deleted. If the client and farm has only this field the client and farm will be deleted */ - Deleted: { + /** @description The possible errors are: * CFF_CLIENT_ID_ALREADY_EXISTS * CFF_BAD_CLIENT_ID * CFF_CLIENT_ID_NAME_CONFLICT * CFF_CLIENT_ID_NOT_FOUND * CFF_CLIENT_NAME_ALREADY_EXISTS * CFF_EMPTY_CLIENT_NAME * CFF_CLIENT_NAME_EXCEEDS_255_CHARS * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT * CFF_FARM_ID_ALREADY_EXISTS * CFF_BAD_FARM_ID * CFF_FARM_ID_NAME_CONFLICT * CFF_FARM_ID_NOT_FOUND * CFF_FARM_NAME_ALREADY_EXISTS * CFF_EMPTY_FARM_NAME * CFF_FARM_NAME_EXCEEDS_255_CHARS * CFF_ALREADY_EXISTS_ACTIVE * CFF_ALREADY_EXISTS_ARCHIVED * CFF_ALREADY_EXISTS_MERGED * CFF_FIELD_ID_ALREADY_EXISTS * CFF_BAD_FIELD_ID * CFF_FIELD_NAME_ALREADY_EXISTS * CFF_EMPTY_FIELD_NAME * CFF_FIELD_NAME_EXCEEDS_255_CHARS * CFF_MISSING_REQUEST_BODY * CFF_OUTDATED_REQUEST * CFF_USER_LAST_MODIFIED_CLIPPED */ + ValidationErrorForCreate: { headers: { [name: string]: unknown; }; - content: { - 'application/vnd:deere:axiom:v3+json': unknown; - }; + content?: never; }; /** @description The possible errors are: * CFF_CLIENT_ID_ALREADY_EXISTS * CFF_BAD_CLIENT_ID * CFF_CLIENT_ID_NAME_CONFLICT * CFF_CLIENT_ID_NOT_FOUND * CFF_CLIENT_NAME_ALREADY_EXISTS * CFF_EMPTY_CLIENT_NAME * CFF_CLIENT_NAME_EXCEEDS_255_CHARS * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT * CFF_FARM_ID_ALREADY_EXISTS * CFF_BAD_FARM_ID * CFF_FARM_ID_NAME_CONFLICT * CFF_FARM_ID_NOT_FOUND * CFF_FARM_NAME_ALREADY_EXISTS * CFF_EMPTY_FARM_NAME * CFF_FARM_NAME_EXCEEDS_255_CHARS * CFF_ALREADY_EXISTS_ACTIVE * CFF_ALREADY_EXISTS_ARCHIVED * CFF_ALREADY_EXISTS_MERGED * CFF_FIELD_ID_ALREADY_EXISTS * CFF_BAD_FIELD_ID * CFF_FIELD_NAME_ALREADY_EXISTS * CFF_EMPTY_FIELD_NAME * CFF_FIELD_NAME_EXCEEDS_255_CHARS * CFF_MISSING_REQUEST_BODY * CFF_OUTDATED_REQUEST * CFF_USER_LAST_MODIFIED_CLIPPED */ ValidationErrorForUpdate: { @@ -790,27 +780,37 @@ export interface components { }; content?: never; }; - /** @description The possible errors are: * CFF_CLIENT_ID_ALREADY_EXISTS * CFF_BAD_CLIENT_ID * CFF_CLIENT_ID_NAME_CONFLICT * CFF_CLIENT_ID_NOT_FOUND * CFF_CLIENT_NAME_ALREADY_EXISTS * CFF_EMPTY_CLIENT_NAME * CFF_CLIENT_NAME_EXCEEDS_255_CHARS * CFF_DUPLICATE_GUID_WITHIN_DOCUMENT * CFF_FARM_EXISTS_UNDER_DIFFERENT_CLIENT * CFF_FARM_ID_ALREADY_EXISTS * CFF_BAD_FARM_ID * CFF_FARM_ID_NAME_CONFLICT * CFF_FARM_ID_NOT_FOUND * CFF_FARM_NAME_ALREADY_EXISTS * CFF_EMPTY_FARM_NAME * CFF_FARM_NAME_EXCEEDS_255_CHARS * CFF_ALREADY_EXISTS_ACTIVE * CFF_ALREADY_EXISTS_ARCHIVED * CFF_ALREADY_EXISTS_MERGED * CFF_FIELD_ID_ALREADY_EXISTS * CFF_BAD_FIELD_ID * CFF_FIELD_NAME_ALREADY_EXISTS * CFF_EMPTY_FIELD_NAME * CFF_FIELD_NAME_EXCEEDS_255_CHARS * CFF_MISSING_REQUEST_BODY * CFF_OUTDATED_REQUEST * CFF_USER_LAST_MODIFIED_CLIPPED */ - ValidationErrorForCreate: { + /** @description Get Field by client Id */ + getFieldResponse: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['GroupLink'][]; + /** + * Format: int32 + * @example 1 + */ + total?: number; + values?: components['schemas']['FieldResponse'][]; + }; + }; }; }; parameters: { - /** @description The ID of the organization */ - OrgId: number; - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signature': string; /** @description client name */ ClientName: string; + /** @description Context Organization ID */ + ContextOrganizationId: string; /** @description farm name */ FarmName: string; + /** @description list of objects to include */ + FieldEmbed: ('farms' | 'clients' | 'guidanceLines' | 'accessPoints')[]; + /** @description field guid */ + FieldId: string; /** @description field name */ FieldName: string; - /** @description Filters by resource state (whether or not the resource is archived) */ - recordFilter: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; /** @description list of objects to include */ FieldsEmbed: ( | 'farms' @@ -822,14 +822,14 @@ export interface components { | 'accessPoints' | 'notes' )[]; - /** @description list of objects to include */ - FieldEmbed: ('farms' | 'clients' | 'guidanceLines' | 'accessPoints')[]; - /** @description Context Organization ID */ - ContextOrganizationId: string; - /** @description field guid */ - FieldId: string; + /** @description The ID of the organization */ + OrgId: number; /** @description Indicates a preference for returned measurements to be in English vs Metric */ UnitOfMeasureHeader: 'METRIC' | 'ENGLISH'; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature': string; + /** @description Filters by resource state (whether or not the resource is archived) */ + recordFilter: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; }; requestBodies: { ASingleField: { diff --git a/src/types/generated/files.ts b/src/types/generated/files.ts index 1e208f5..43a047c 100644 --- a/src/types/generated/files.ts +++ b/src/types/generated/files.ts @@ -4,6 +4,102 @@ */ export interface paths { + '/fileTransfers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List File Transfer Requests + * @description This resource allows the client to check the status of a file transfer request that has already been submitted. The response will contain links to the following resources: file: View the file for which the transfer was requested. machine: View the machine to which the transfer was requested. + */ + get: { + parameters: { + query?: { + /** @description The source of the file transfer. Takes the values ORGANIZATION or MACHINE. */ + source?: components['parameters']['Source2']; + }; + header?: { + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'x-deere-signature'?: components['parameters']['X-deere-signature_FileTransfers']; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description File Transfer. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + values?: unknown; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/fileTransfers/{id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View a File Transfer Request + * @description This resource allows the client to check the status of a file transfer request that has already been submitted. The response will contain links to the following resources: file: View the file for which the transfer was requested. machine: View the machine to which the transfer was requested. + */ + get: { + parameters: { + query?: { + /** @description The source of the file transfer. Takes the values ORGANIZATION or MACHINE. */ + source?: components['parameters']['Source']; + }; + header?: never; + path: { + /** @description File Transfer ID */ + id: components['parameters']['Id']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description File Transfer by ID. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + values?: unknown; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/files': { parameters: { query?: never; @@ -173,6 +269,84 @@ export interface paths { patch?: never; trace?: never; }; + '/organizations/{orgId}/fileTransfers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get File Transfer List by Organization + * @description This resource will retrieve list of all File Transfer by an Organization. The response will contain links to the following resources: file: View the file for which the transfer was requested. machine: View the machine to which the transfer was requested. + */ + get: { + parameters: { + query?: { + /** @description The source of the file transfer. Takes the values ORGANIZATION or MACHINE. */ + source?: components['parameters']['Source']; + }; + header?: never; + path: { + /** @description Organization */ + orgId: components['parameters']['OrgId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description File Transfer. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + values?: unknown; + }; + }; + }; + }; + }; + put?: never; + /** + * Submit a File Transfer Request + * @description This resource allows you to select a file and machine, and use the client software to submit a file transfer request. After that, MyJohnDeere API v3's infrastructure transfers the selected file to the selected machine, where it becomes available for the machine operator to use. The response links to the following resources: file: The file for which the transfer is being requested. machine: The machine to which the transfer is being requested. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Organization */ + orgId: components['parameters']['OrgId2']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['FileTransfersPost']; + }; + }; + responses: { + /** @description File Transfer. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostFileTransfersResponse']; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/organizations/{orgId}/files': { parameters: { query?: never; @@ -306,6 +480,109 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + EditableFileDetails: { + /** @example RW8360R907628_12062012.zip */ + name?: string; + /** + * @description Indicates whether the file has been archived. + * @example false + */ + archived?: boolean; + /** + * @description If set to true, then processing of the file will be delayed until this is toggled to false. + * @example false + */ + delayProcessing?: boolean; + }; + FileLinkGet: { + /** + * @description Files Link. + * @example https://sandboxapi.deere.com/platform/files/612 + */ + file?: unknown; + /** + * @description Machines Link. + * @example https://sandboxapi.deere.com/platform/machines/1523 + */ + machine?: unknown; + }; + FileTransfersLink: { + /** + * @description Files Link. + * @example https://sandboxapi.deere.com/platform/files/fileID + */ + file?: unknown; + /** + * @description Machines Link. + * @example https://sandboxapi.deere.com/platform/machines/machineID + */ + machine?: unknown; + }; + FileTransfersLinkAPIInteractions: { + /** @description Status. */ + Status?: unknown; + /** @description The url of the created resources */ + location?: unknown; + }; + FileTransfersLinkGet: { + /** + * @description Files Link. + * @example https://sandboxapi.deere.com/platform/files/15234 + */ + file?: unknown; + /** + * @description Machines Link. + * @example https://sandboxapi.deere.com/platform/machines/8237 + */ + machine?: unknown; + /** + * @description Organization Link. + * @example https://sandboxapi.deere.com/platform/organizations/1234 + */ + owningOrganization?: unknown; + }; + FileTransfersPost: { + links?: { + /** @enum {string} */ + rel?: 'file' | 'equipment'; + /** Format: uri */ + uri?: string; + }[]; + }; + FileTransfersValue: { + /** + * @description Information on the transferred file, including name, type, created type, modified time, native size, source, status, and whether it was archived. + * @example See sample response below. + */ + file?: Record; + /** + * @description File Transfer ID + * @example 1628996 + */ + id?: string; + /** + * @description File source. If the request parameter value for source is MACHINE, this response value will also be MACHINE. If the request parameter value for source is ORGANIZATION, this response value will be HOST. + * @example HOST + */ + source?: string; + /** + * Format: date-time + * @description Timestamp of when the file transfer was initiated.All timestamps are formatted according to the standard. + * @example 2015-06-09T09:43:01.381Z + */ + transferInitiationTime?: string; + /** + * Format: date-time + * @description Timestamp of when the file transfer was last updated.All timestamps are formatted according to the standard. + * @example 2015-06-09T09:43:01.384Z + */ + lastUpdatedTime?: string; + /** + * @description Status of the file transfer. + * @example WDT_AVAILABLE_TO_DISPLAY + */ + status?: string; + }; /** * @example SETUP * @enum {string} @@ -325,68 +602,44 @@ export interface components { | 'ISO_SETUP' | 'BOUNDARY' | 'EXCEL'; - PostableFileDetails: components['schemas']['EditableFileDetails'] & { - type?: components['schemas']['FileType']; + FileValue: { /** - * @description The source of the file (e.g., the display type or user that uploaded it) - * @example myUserName + * @description A new x-deere-signature response header will be included if the response has changed since last api call. + * @example 877280ba-c8fe-49f0-a0ea-b6855cebd36f.1639958400000 */ - source?: string; + 'x-deere-signature'?: string; /** - * @description Contextual metadata for the file, such as frequency, report type, machines, and fields - * @example { - * "frequency": "DAILY", - * "reportType": "CONNECTIVITY", - * "machines": [ - * "eb8a4a58-9d94-4c98-ae56-09331aa0ff50", - * "3341fe33-4825-464b-8442-3f17fa876cd1" - * ], - * "fields": [ - * "3341fe33-4825-464b-8442-3f17fa876cd1", - * "3341fe33-4825-464b-8442-3f17fa876cd1" - * ] - * } + * @description Information on the transferred file, including name, type, created type, modified time, native size, source, status, and whether it was archived. + * @example See sample response below. */ - contextMetadata?: Record; + file?: Record; /** - * @description Additional custom metadata for the file - * @example { - * "time_range_start": "2025-07-01T00:00:00Z", - * "time_range_end": "2025-07-28T00:00:00Z", - * "locale": "en-US", - * "time_zone": "UTC", - * "unit_of_measure": "XYZ", - * "user_type": "Admin", - * "schedule_id": "124jsg" - * } + * @description File Transfer ID + * @default N/A + * @example 51234 */ - customMetadata?: Record; - }; - EditableFileDetails: { - /** @example RW8360R907628_12062012.zip */ - name?: string; + id: string; /** - * @description Indicates whether the file has been archived. - * @example false + * @description File source. If the request parameter value for source is MACHINE, this response value will also be MACHINE. If the request parameter value for source is ORGANIZATION, this response value will be HOST. + * @default N/A + * @example HOST */ - archived?: boolean; + source: string; /** - * @description If set to true, then processing of the file will be delayed until this is toggled to false. - * @example false + * @description Timestamp of when the file transfer was initiated.All timestamps are formatted according to the standard. + * @example 2018-03-20T18:52:22.155Z */ - delayProcessing?: boolean; - }; - FilesLink: { + transferInitiationTime?: string; /** - * @description Organization Link. - * @example https://sandboxapi.deere.com/platform/organizations/1234 + * @description Timestamp of when the file transfer was last updated.All timestamps are formatted according to the standard. + * @example 2018-03-20T21:11:35.519Z */ - owningOrganization?: unknown; + lastUpdatedTime?: string; /** - * @description Partnership Link. - * @example https://sandboxapi.deere.com/platform/files/466578633/partnerships + * @description Status of the file transfer. + * @example WDT_IN_PROCESS */ - partnerships?: unknown; + status?: string; }; FilesGet: { /** @@ -473,6 +726,87 @@ export interface components { */ manufacturer?: string; }; + FilesLink: { + /** + * @description Organization Link. + * @example https://sandboxapi.deere.com/platform/organizations/1234 + */ + owningOrganization?: unknown; + /** + * @description Partnership Link. + * @example https://sandboxapi.deere.com/platform/files/466578633/partnerships + */ + partnerships?: unknown; + }; + /** @description File Transfers Post Api Response. */ + PostFileTransfersResponse: { + /** + * @description The URL of the created resource. + * @example https://sandboxapi.deere.com/platform/fileTransfers/7482 + */ + Location?: string; + }; + PostFiles: { + /** + * @description The file was successfully created. + * @example Created + */ + 201?: unknown; + /** + * @description File names must be between 5 and 69 characters and may only contain international alphanumeric characters, spaces, and any of the following: ".,-_". Specifically, it must match the following Unicode regular expression: ^[\p{N}\p{L}.,_ \-]+$ + * @example Must be between 5 and 69 characters Should not contain invalid characters. + */ + 400?: unknown; + }; + PostableFileDetails: components['schemas']['EditableFileDetails'] & { + type?: components['schemas']['FileType']; + /** + * @description The source of the file (e.g., the display type or user that uploaded it) + * @example myUserName + */ + source?: string; + /** + * @description Contextual metadata for the file, such as frequency, report type, machines, and fields + * @example { + * "frequency": "DAILY", + * "reportType": "CONNECTIVITY", + * "machines": [ + * "eb8a4a58-9d94-4c98-ae56-09331aa0ff50", + * "3341fe33-4825-464b-8442-3f17fa876cd1" + * ], + * "fields": [ + * "3341fe33-4825-464b-8442-3f17fa876cd1", + * "3341fe33-4825-464b-8442-3f17fa876cd1" + * ] + * } + */ + contextMetadata?: Record; + /** + * @description Additional custom metadata for the file + * @example { + * "time_range_start": "2025-07-01T00:00:00Z", + * "time_range_end": "2025-07-28T00:00:00Z", + * "locale": "en-US", + * "time_zone": "UTC", + * "unit_of_measure": "XYZ", + * "user_type": "Admin", + * "schedule_id": "124jsg" + * } + */ + customMetadata?: Record; + }; + PutFiles: { + /** + * @description The file was updated. + * @example No Content + */ + 204?: unknown; + /** + * @description File names must be between 1 and 45 characters and may only contain international alphanumeric characters, spaces, and any of the following: ".,-_". Specifically, it must match the following Unicode regular expression: ^[\p{N}\p{L}.,_ \-]+$ + * @example Must be between 1 and 45 characters Should not contain invalid characters. + */ + 400?: unknown; + }; ValueFileIdGet: { /** * @description The id of the file. @@ -543,109 +877,97 @@ export interface components { */ new?: boolean; }; - PostFiles: { - /** - * @description The file was successfully created. - * @example Created - */ - 201?: unknown; - /** - * @description File names must be between 5 and 69 characters and may only contain international alphanumeric characters, spaces, and any of the following: ".,-_". Specifically, it must match the following Unicode regular expression: ^[\p{N}\p{L}.,_ \-]+$ - * @example Must be between 5 and 69 characters Should not contain invalid characters. - */ - 400?: unknown; - }; - PutFiles: { - /** - * @description The file was updated. - * @example No Content - */ - 204?: unknown; - /** - * @description File names must be between 1 and 45 characters and may only contain international alphanumeric characters, spaces, and any of the following: ".,-_". Specifically, it must match the following Unicode regular expression: ^[\p{N}\p{L}.,_ \-]+$ - * @example Must be between 1 and 45 characters Should not contain invalid characters. - */ - 400?: unknown; - }; }; responses: { /** @description Successful operation */ - FileListResponse: { + FileIdGet: { headers: { [name: string]: unknown; }; content: { + 'application/zip': unknown; + 'application/octet-stream': unknown; + 'application/x-zip': unknown; + 'application/x-zip-compressed': unknown; + 'multipart/mixed': unknown; 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['FilesLink'][]; - /** - * Format: double - * @description Total number of files matching the request - * @example 123 - */ - total?: number; + links?: unknown; values?: unknown; }; }; }; /** @description Successful operation */ - FileIdGet: { + FileListResponse: { headers: { [name: string]: unknown; }; content: { - 'application/zip': unknown; - 'application/octet-stream': unknown; - 'application/x-zip': unknown; - 'application/x-zip-compressed': unknown; - 'multipart/mixed': unknown; 'application/vnd.deere.axiom.v3+json': { - links?: unknown; + links?: components['schemas']['FilesLink'][]; + /** + * Format: double + * @description Total number of files matching the request + * @example 123 + */ + total?: number; values?: unknown; }; }; }; }; parameters: { - /** @description Organization */ - OrganizationID: string; - /** @description Organization */ - OrganizationID2: string; - /** @description Organization */ - OrganizationID3: string; - /** @description Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host. */ - Filter: string; - /** @description Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host. */ - FilterOptional: string; + /** @description Allows client to filter files according to whether they have been archived. TRUE returns only archived files. */ + Archived: boolean; + /** @description Set to false to force the file to be processed if it would otherwise delay processing. Can only be used with a copyFrom link. */ + DelayProcessing: boolean; + /** @description Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the standard */ + EndDate: Record; + /** @description File Id. */ + FileId: string; /** @description Takes a number that identifies the file type. */ FileType: number; /** @description Takes the file type number. */ FileTypeOptional: number; - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signature': string; - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signatureOptional': string; - /** @description Filters by whether a file is transferable */ - Transferable: boolean; + /** @description Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host. */ + Filter: string; + /** @description Takes ALL or MACHINE. ALL shows all the files in the org. MACHINE shows only the files sent from a machine to the host. */ + FilterOptional: string; + /** @description File Transfer ID */ + Id: string; + /** @description Currently only supports a copyFrom rel, which can be passed to copy another file into the destination organization. */ + Links: Record; + /** @description File name. */ + Name: string; /** @description Allows client to download file in chunks. -1 will download entire file. For smaller pieces, enter offset point (in bytes) in this parameter. */ Offset: number; + /** @description Organization */ + OrgId: string; + /** @description Organization */ + OrgId2: string; + /** @description Organization */ + OrganizationID: string; + /** @description Organization */ + OrganizationID2: string; + /** @description Organization */ + OrganizationID3: string; /** @description Allows client to download file in chunks. -1 will download entire file. For smaller pieces, enter size (in bytes) in this parameter. */ Size: number; - /** @description File Id. */ - FileId: string; + /** @description The source of the file transfer. Takes the values ORGANIZATION or MACHINE. */ + Source: string; + /** @description The source of the file transfer. Takes the values ORGANIZATION or MACHINE. */ + Source2: string; /** @description Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the standard. */ StartDate: string; - /** @description Takes a timestamp (in UTC) that indicates when the file was created. Timestamp format is the standard */ - EndDate: Record; /** @description Allows client to filter files according to whether they are transferable to machines. Takes TRANSFERABLE and NON_TRANSFERABLE. */ Status: string; - /** @description Allows client to filter files according to whether they have been archived. TRUE returns only archived files. */ - Archived: boolean; - /** @description File name. */ - Name: string; - /** @description Set to false to force the file to be processed if it would otherwise delay processing. Can only be used with a copyFrom link. */ - DelayProcessing: boolean; - /** @description Currently only supports a copyFrom rel, which can be passed to copy another file into the destination organization. */ - Links: Record; + /** @description Filters by whether a file is transferable */ + Transferable: boolean; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature': string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signatureOptional': string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature_FileTransfers': string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/flags.ts b/src/types/generated/flags.ts index 8e80b52..7a3b364 100644 --- a/src/types/generated/flags.ts +++ b/src/types/generated/flags.ts @@ -4,7 +4,7 @@ */ export interface paths { - '/organizations/{orgId}/flags/{flagId}': { + '/organizations/{orgId}/fields/{fieldId}/flags': { parameters: { query?: never; header?: never; @@ -12,21 +12,109 @@ export interface paths { cookie?: never; }; /** - * List a flag by org id and Flag id - * @description This endpoint will return a flag for a given org and Flag id. + * List flags for the field + * @description This resource will return a list of flag objects associated with the field. */ - get: operations['getFlagForOrganizationByFlagId']; + get: operations['getOrgFieldFlags']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{orgId}/flagCategories': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; /** - * Update flag by id - * @description This resource will update flag by Organization and Flag Id. + * List Flags Category Collection + * @description This resource will return a Flags Category Collection for Organization. */ - put: operations['updateFlagByIdOrgId']; + get: operations['getFlagCategoriesForOrganization']; + put?: never; + /** + * Create a custom category + * @description This resource will create a custom category in the given organization. + */ + post: operations['createFlagCategory']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{orgId}/flagCategories/{categoryId}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get flag category by id + * @description This resource will return a flag category with the name translated into the specified language. The category can be a reference flagCategory, a master flagCategory created from a referenced flagCategory or a user-defined category. + */ + get: operations['getFlagCategoryByIdOrgId']; + /** + * Update flag category by organization and flag category Id + * @description This resource will update flag category by Id. + */ + put: operations['updateFlagCategoryByIdOrgId']; post?: never; /** - * Delete a flag for a given org - * @description This resource will delete a single flag based on its Id and org id + * Delete a flag category + * @description This resource will delete a single empty category based on the categoryId and orgId. */ - delete: operations['deleteFlagByIdOrgId']; + delete: operations['deleteFlagCategoryByIdOrgId']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{orgId}/flagCategories/{categoryId}/flagCategoryPreferences': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List collection of FlagCategoryPreference + * @description This endpoint will return a collection of FlagCategoryPreference objects associated with the given flag category. The object with the key "default" is created automatically on the 1st access to the flagCategory object by a client. The default preference object shall be initialized with default values: prefKey: "default" hexColor: "#FFFFFF" + */ + get: operations['getFlagCategoryPreferencesByIdOrgId']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{orgId}/flagCategoryPreferences/{flagCategoryPreferencesId}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View preferences object for a category + * @description This resource will return the preferences object for the given flag category and org + */ + get: operations['getFlagCategoryPreferenceByIdOrgId']; + /** + * Update flag category preferences + * @description This resource will update flag category preferences by Id and Org + */ + put: operations['updateFlagCategoryPreferenceByIdOrgId']; + post?: never; + delete?: never; options?: never; head?: never; patch?: never; @@ -56,7 +144,7 @@ export interface paths { patch?: never; trace?: never; }; - '/organizations/{orgId}/fields/{fieldId}/flags': { + '/organizations/{orgId}/flags/{flagId}': { parameters: { query?: never; header?: never; @@ -64,13 +152,21 @@ export interface paths { cookie?: never; }; /** - * List flags for the field - * @description This resource will return a list of flag objects associated with the field. + * List a flag by org id and Flag id + * @description This endpoint will return a flag for a given org and Flag id. */ - get: operations['getOrgFieldFlags']; - put?: never; + get: operations['getFlagForOrganizationByFlagId']; + /** + * Update flag by id + * @description This resource will update flag by Organization and Flag Id. + */ + put: operations['updateFlagByIdOrgId']; post?: never; - delete?: never; + /** + * Delete a flag for a given org + * @description This resource will delete a single flag based on its Id and org id + */ + delete: operations['deleteFlagByIdOrgId']; options?: never; head?: never; patch?: never; @@ -80,6 +176,140 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + ContentType: unknown; + FlagCategory: { + /** + * @description Name of the category. + * @example Rocks + */ + categoryTitle?: string; + /** + * @description Whether or not the category is archived + * @default false + * @example false + */ + archived: boolean; + /** + * @description Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org. + * @example true + */ + preferred?: boolean; + /** + * Format: uuid + * @description GUID of a flag category. + * @example 7c602ae8-4351-4640-9de8-88792bda83d7 + */ + readonly id?: string; + /** + * Format: date-time + * @example 2018-12-28T09:17:10.694Z + */ + createdDate?: string; + /** + * Format: date-time + * @example 2018-12-28T09:17:10.694Z + */ + lastModifiedDate?: string; + }; + FlagCategory2: { + /** + * @description Name of the category. + * @example Rocks + */ + categoryTitle?: string; + /** + * @description Whether or not the category is archived + * @default false + * @example false + */ + archived: boolean; + /** + * @description Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org. + * @example true + */ + preferred?: boolean; + /** + * Format: uuid + * @description GUID of a flag category. + * @example 688c20bb-9609-4590-95c9-649ba65c06df + */ + readonly id?: string; + /** @example 2018-12-18T13:29:14.167Z */ + createdDate?: string; + /** @example 2018-12-18T13:29:30.924Z */ + lastModifiedDate?: string; + }; + /** @description The object for keeping visual and non-visual preferences for the given FlagCategory. */ + FlagCategoryPreference: { + /** + * Format: GUID + * @description Id of the FlagCategoryPreferences resource. + * @example ac6a5bb5fae84b1da29459a8101295b0 + */ + id?: string; + /** + * @description Key name for the preference object to be identified by clients to support client-specific preferences + * @default default + * @example default + */ + prefKey: string; + /** + * @description Color code for the flag category in hexadecimal format. + * @example #0BA74A + */ + hexColor?: string; + /** + * Format: date-time + * @example 2018-07-01T21:00:11Z + */ + createdTime?: string; + /** + * Format: date-time + * @example 2018-07-01T21:10:10Z + */ + modifiedTime?: string; + }; + GetPreferences: { + /** + * @description Users Link. + * @example https://sandboxapi.deere.com/platform/users/rostaninoleg + */ + modifiedBy?: unknown; + }; + LinkCategoryId: { + /** + * @description Organization Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 + */ + organization?: unknown; + /** + * @description Update Category Link. + * @example https://sandboxapi.deere.com/platform/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7 + */ + updateCategory?: unknown; + /** + * @description Delete Category Link. + * @example https://sandboxapi.deere.com/platform/organizations/{orgId}/flagCategories/7c602ae8-4351-4640-9de8-88792bda83d7 + */ + deleteCategory?: unknown; + }; + LinkCategoryId2: { + /** + * @description Organization Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 + */ + organization?: unknown; + /** + * @description Update Category Link. + * @example https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3 + */ + updateCategory?: unknown; + /** + * @description Delete Category Link. + * @example https://sandboxapi.deere.com/platform/flagCategories/835b863c-1997-451d-8850-1123ff4ec0e3 + */ + deleteCategory?: unknown; + }; LinkFlagId: { /** * @description Flag Category Preferences Link. @@ -131,7 +361,31 @@ export interface components { */ field?: unknown; }; - ContentType: unknown; + PutPreferences: { + /** + * @description Users Link. + * @example https://sandboxapi.deere.com/platform/users/USERNAME + */ + modifiedBy?: unknown; + }; + PutResponse: { + /** + * @description Name of the category. + * @example Rocks + */ + categoryTitle?: string; + /** + * @description Whether or not the category is archived + * @default false + * @example false + */ + archived: boolean; + /** + * @description Shows/sets whether the category is a preferred one in the current org. This can be applied to both user-defined and reference flag categories in this org. + * @example true + */ + preferred?: boolean; + }; ValuesFlagId: { /** * @description Currently only three geometries types (Point, LineString and Polygon) are supported. @@ -245,38 +499,66 @@ export interface components { }; }; parameters: { + /** @description If embedding flag category, language that category name shall be returned within a flag, e.g., "de-DE" */ + 'Accept-Language': string; + /** @description Language category names are being returned by the endpoint. */ + 'Accept-Language_FlagCategories': string; + /** @description CategoryId to query for Category. */ + CategoryId: string; + /** @description CategoryId to query for Category. */ + CategoryId2: string; + /** @description CategoryId to query for preferences. */ + CategoryId_FlagCategoriesPreferences: string; + /** @description Specify a comma-separated list of category GUIDs to retrieve */ + CategoryIds: string; + /** @description Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used */ + CategoryNames: string; + /** @description Embed additional attributes if required to reduce the number of requests */ + Embed: string; + /** @description Embed additional attributes if required. */ + Embed_FlagCategories: string; + /** @description Flags created before end time (in UTC) will be returned */ + EndTime: string; /** @description Fields guid of the field. */ FieldId: string; + /** @description flagCategoryPreferencesId to query for preferences. */ + FlagCategoryPreferencesId: string; + /** @description flagCategoryPreferencesId to query for preferences. */ + FlagCategoryPreferencesId2: string; + /** @description flagId to query for flag */ + FlagId: string; + /** @description Specify whether to request global flags, field-related flags or both */ + FlagScopes: string; + /** @description Does not populate geometry, overrides simple if both are true */ + MetadataOnly: boolean; /** @description Org Id to query for Flag */ OrgId: string; /** @description Organization Id */ OrgId2: string; + /** @description Organization Id. */ + OrgId2_FlagCategories: string; /** @description Organization Id where the Flag belongs to */ OrgId3: string; - /** @description flagId to query for flag */ - FlagId: string; - /** @description If embedding flag category, language that category name shall be returned within a flag, e.g., "de-DE" */ - 'Accept-Language': string; - /** @description Embed additional attributes if required to reduce the number of requests */ - Embed: string; - /** @description Flags created after start time (in UTC) will be returned */ - StartTime: string; - /** @description Flags created before end time (in UTC) will be returned */ - EndTime: string; - /** @description Specify a comma-separated list of category GUIDs to retrieve */ - CategoryIds: string; - /** @description Specify a comma-separated list of category names to retrieve. Instead/together with names, aliases for well known categories can be used */ - CategoryNames: string; + /** @description OrgId to query for Category */ + OrgId3_FlagCategories: string; + /** @description Organization Id where the Flag category belongs to */ + OrgId4: string; + /** @description OrgId to query for Org. */ + OrgId_FlagCategories: string; + /** @description orgId to query for preferences. */ + OrgId_FlagCategoriesPreferences: string; + /** @description orgId to query for preferences. */ + OrganizationId: string; + /** @description CategoryId to query for preferences */ + PrefKey: string; /** @description Request flags by archived status */ RecordFilter: string; - /** @description Specify whether to request global flags, field-related flags or both */ - FlagScopes: string; /** @description Clients which cannot handle specific geometry types can select only supported ones. Request flags with geometry only of type */ ShapeTypes: string; /** @description Populates simplified geometry */ Simple: boolean; - /** @description Does not populate geometry, overrides simple if both are true */ - MetadataOnly: boolean; + /** @description Flags created after start time (in UTC) will be returned */ + StartTime: string; }; requestBodies: never; headers: never; @@ -284,7 +566,7 @@ export interface components { } export type $defs = Record; export interface operations { - getFlagForOrganizationByFlagId: { + getOrgFieldFlags: { parameters: { query?: { /** @description Embed additional attributes if required to reduce the number of requests */ @@ -299,8 +581,6 @@ export interface operations { categoryNames?: components['parameters']['CategoryNames']; /** @description Request flags by archived status */ recordFilter?: components['parameters']['RecordFilter']; - /** @description Specify whether to request global flags, field-related flags or both */ - flagScopes?: components['parameters']['FlagScopes']; /** @description Clients which cannot handle specific geometry types can select only supported ones. Request flags with geometry only of type */ shapeTypes?: components['parameters']['ShapeTypes']; /** @description Populates simplified geometry */ @@ -313,24 +593,24 @@ export interface operations { 'Accept-Language'?: components['parameters']['Accept-Language']; }; path: { - /** @description Org Id to query for Flag */ - orgId: components['parameters']['OrgId']; - /** @description flagId to query for flag */ - flagId: components['parameters']['FlagId']; + /** @description Organization Id where the Flag belongs to */ + orgId: components['parameters']['OrgId3']; + /** @description Fields guid of the field. */ + fieldId: components['parameters']['FieldId']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['FlagIdGet']; - /** @description Access forbidden. The user does not have permission to access the given organization. */ + 200: components['responses']['GetOrgId']; + /** @description Forbidden. The user has no access to the given flag */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description Entity Not found. No organization present for given orgId or no flag id present in the given org id */ + /** @description Entity Not found. No organization and/or field with these ids. */ 404: { headers: { [name: string]: unknown; @@ -339,34 +619,202 @@ export interface operations { }; }; }; - updateFlagByIdOrgId: { + getFlagCategoriesForOrganization: { parameters: { - query?: never; - header?: never; + query?: { + /** @description Embed additional attributes if required. */ + embed?: components['parameters']['Embed_FlagCategories']; + }; + header?: { + /** @description Language category names are being returned by the endpoint. */ + 'Accept-Language'?: components['parameters']['Accept-Language_FlagCategories']; + }; path: { - /** @description Organization Id */ - orgId: components['parameters']['OrgId2']; - /** @description flagId to query for flag */ - flagId: components['parameters']['FlagId']; + /** @description Organization Id where the Flag category belongs to */ + orgId: components['parameters']['OrgId4']; }; cookie?: never; }; - requestBody?: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ValuesFlagIdPut']; - }; - }; + requestBody?: never; responses: { - /** @description Update response by Flag Id */ + /** @description Returns collection of flag categories which includes reference and user-defined categories. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': unknown; + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['LinkCategoryId2'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + values?: components['schemas']['FlagCategory2'][]; + }; }; }; - /** @description - No contributionDefinition link specified - No category link specified */ + /** @description Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. No organization present for given orgId. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + createFlagCategory: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Organization Id where the Flag category belongs to */ + orgId: components['parameters']['OrgId4']; + }; + cookie?: never; + }; + /** @description This resource will create a custom category in the given organization. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PutResponse']; + }; + }; + responses: { + /** @description Created */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; + }; + }; + /** @description Invalid body - Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden - Given Invalid orgId or the user doesn't have access for the given flagCategory or orgId. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. No organization present for given orgId or no contribution definition ID is found. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Conflict. User creates flag category with such title which is already being used in one of the existing category. */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getFlagCategoryByIdOrgId: { + parameters: { + query?: { + /** @description Embed additional attributes if required. */ + embed?: components['parameters']['Embed_FlagCategories']; + }; + header?: { + /** @description Language category names are being returned by the endpoint. */ + 'Accept-Language'?: components['parameters']['Accept-Language_FlagCategories']; + }; + path: { + /** @description OrgId to query for Org. */ + orgId: components['parameters']['OrgId_FlagCategories']; + /** @description CategoryId to query for Category. */ + categoryId: components['parameters']['CategoryId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Returns flag category. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + values?: unknown; + }; + }; + }; + /** @description Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. No organization present for given orgId or given flag category does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateFlagCategoryByIdOrgId: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Organization Id. */ + orgId: components['parameters']['OrgId2_FlagCategories']; + /** @description CategoryId to query for Category. */ + categoryId: components['parameters']['CategoryId2']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PutResponse']; + }; + }; + responses: { + /** @description No Content. Successfully updated. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; + }; + }; + /** @description Invalid body - Bad Request */ 400: { headers: { [name: string]: unknown; @@ -380,7 +828,7 @@ export interface operations { }; content?: never; }; - /** @description Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org */ + /** @description Entity Not found. Missing or incorrect categoryId in the org Or incorrect org */ 404: { headers: { [name: string]: unknown; @@ -389,21 +837,21 @@ export interface operations { }; }; }; - deleteFlagByIdOrgId: { + deleteFlagCategoryByIdOrgId: { parameters: { query?: never; header?: never; path: { - /** @description flagId to query for flag */ - flagId: components['parameters']['FlagId']; - /** @description Org Id to query for Flag */ - orgId: components['parameters']['OrgId']; + /** @description OrgId to query for Category */ + orgId: components['parameters']['OrgId3_FlagCategories']; + /** @description CategoryId to query for Category. */ + categoryId: components['parameters']['CategoryId2']; }; cookie?: never; }; requestBody?: never; responses: { - /** @description No Content. Flag deleted successfully. */ + /** @description No Content. Flag Category deleted successfully. */ 200: { headers: { [name: string]: unknown; @@ -418,14 +866,171 @@ export interface operations { }; }; }; - /** @description Forbidden. - The user has no permission to delete the flag. */ + /** @description Forbidden. - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. - The user has no permission to delete the flag category. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description Entity Not found. Given flag id does not exist or given orgId does not present. */ + /** @description Entity Not found. Given category id does not exist or given orgId does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getFlagCategoryPreferencesByIdOrgId: { + parameters: { + query?: { + /** @description CategoryId to query for preferences */ + prefKey?: components['parameters']['PrefKey']; + }; + header?: never; + path: { + /** @description orgId to query for preferences. */ + organizationId: components['parameters']['OrganizationId']; + /** @description CategoryId to query for preferences. */ + categoryId: components['parameters']['CategoryId_FlagCategoriesPreferences']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Returns the preferences object for the given flag category. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['GetPreferences'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + values?: unknown; + }; + }; + }; + /** @description Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. No category with this id. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getFlagCategoryPreferenceByIdOrgId: { + parameters: { + query?: never; + header?: never; + path: { + /** @description orgId to query for preferences. */ + orgId: components['parameters']['OrgId_FlagCategoriesPreferences']; + /** @description flagCategoryPreferencesId to query for preferences. */ + flagCategoryPreferencesId: components['parameters']['FlagCategoryPreferencesId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Returns the preferences object identified by its global ID. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['GetPreferences'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + values?: unknown; + }; + }; + }; + /** @description Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. No reference category with this id. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateFlagCategoryPreferenceByIdOrgId: { + parameters: { + query?: never; + header?: never; + path: { + /** @description orgId to query for preferences. */ + organizationId: components['parameters']['OrganizationId']; + /** @description flagCategoryPreferencesId to query for preferences. */ + flagCategoryPreferencesId: components['parameters']['FlagCategoryPreferencesId2']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['FlagCategoryPreference']; + }; + }; + responses: { + /** @description No Content. Successfully updated. */ + 204: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['PutPreferences'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + }; + }; + }; + /** @description Invalid body - Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden - Given Invalid orgId or the user dosen't have access for the given flagCategory or orgId. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. Incorrect flagCategoryPreferencesId. */ 404: { headers: { [name: string]: unknown; @@ -521,7 +1126,7 @@ export interface operations { }; }; }; - getOrgFieldFlags: { + getFlagForOrganizationByFlagId: { parameters: { query?: { /** @description Embed additional attributes if required to reduce the number of requests */ @@ -536,6 +1141,8 @@ export interface operations { categoryNames?: components['parameters']['CategoryNames']; /** @description Request flags by archived status */ recordFilter?: components['parameters']['RecordFilter']; + /** @description Specify whether to request global flags, field-related flags or both */ + flagScopes?: components['parameters']['FlagScopes']; /** @description Clients which cannot handle specific geometry types can select only supported ones. Request flags with geometry only of type */ shapeTypes?: components['parameters']['ShapeTypes']; /** @description Populates simplified geometry */ @@ -548,24 +1155,119 @@ export interface operations { 'Accept-Language'?: components['parameters']['Accept-Language']; }; path: { - /** @description Organization Id where the Flag belongs to */ - orgId: components['parameters']['OrgId3']; - /** @description Fields guid of the field. */ - fieldId: components['parameters']['FieldId']; + /** @description Org Id to query for Flag */ + orgId: components['parameters']['OrgId']; + /** @description flagId to query for flag */ + flagId: components['parameters']['FlagId']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['responses']['GetOrgId']; - /** @description Forbidden. The user has no access to the given flag */ + 200: components['responses']['FlagIdGet']; + /** @description Access forbidden. The user does not have permission to access the given organization. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description Entity Not found. No organization and/or field with these ids. */ + /** @description Entity Not found. No organization present for given orgId or no flag id present in the given org id */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateFlagByIdOrgId: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Organization Id */ + orgId: components['parameters']['OrgId2']; + /** @description flagId to query for flag */ + flagId: components['parameters']['FlagId']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ValuesFlagIdPut']; + }; + }; + responses: { + /** @description Update response by Flag Id */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + /** @description - No contributionDefinition link specified - No category link specified */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden Access */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. Missing or incorrect flag id, or contributionDefinition is invalid Or incorrect org */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteFlagByIdOrgId: { + parameters: { + query?: never; + header?: never; + path: { + /** @description flagId to query for flag */ + flagId: components['parameters']['FlagId']; + /** @description Org Id to query for Flag */ + orgId: components['parameters']['OrgId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content. Flag deleted successfully. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; + }; + }; + /** @description Forbidden. - The user has no permission to delete the flag. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Entity Not found. Given flag id does not exist or given orgId does not present. */ 404: { headers: { [name: string]: unknown; diff --git a/src/types/generated/guidance-lines.ts b/src/types/generated/guidance-lines.ts index dbb7e4a..67b3be2 100644 --- a/src/types/generated/guidance-lines.ts +++ b/src/types/generated/guidance-lines.ts @@ -182,20 +182,6 @@ export interface components { invalidValue?: string; }; Errors: components['schemas']['Error'][]; - LinksArrayGet: { - /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c - */ - field?: unknown; - }; - LinkArrayPost: { - /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/orgId/fields/fieldId - */ - field?: unknown; - }; GuidanceLine: { /** * @description Identifies the subclass of guidance line. @@ -315,10 +301,33 @@ export interface components { */ spatialProjection?: Record; }; + LinkArrayPost: { + /** + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/orgId/fields/fieldId + */ + field?: unknown; + }; + LinksArrayGet: { + /** + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/127856/fields/309b4c20-f33a-4c96-9a2c-913def198i0c + */ + field?: unknown; + }; }; responses: { - /** @description A collection of guidance lines */ - GuidanceLinesResponse: { + /** @description Request Validation failure */ + BadRequest: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description Created, with a Location header containing the URI of the newly created resource */ + Created: { headers: { [name: string]: unknown; }; @@ -333,8 +342,15 @@ export interface components { }; }; }; + /** @description The user does not have sufficient privileges to access this resource. */ + Forbidden: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description A collection of guidance lines */ - GuidanceLinesRetrieve: { + GuidanceLinesResponse: { headers: { [name: string]: unknown; }; @@ -349,8 +365,8 @@ export interface components { }; }; }; - /** @description Created, with a Location header containing the URI of the newly created resource */ - Created: { + /** @description A collection of guidance lines */ + GuidanceLinesRetrieve: { headers: { [name: string]: unknown; }; @@ -380,22 +396,6 @@ export interface components { }; }; }; - /** @description Request Validation failure */ - BadRequest: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; - }; - }; - /** @description The user does not have sufficient privileges to access this resource. */ - Forbidden: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; /** @description The specified resource does not exist */ NotFound: { headers: { @@ -405,18 +405,18 @@ export interface components { }; }; parameters: { - /** @description The organization owning the guidance lines. */ - OrgId: string; + /** @description Whether to return the track geometry for AB and Adaptive Curves. See */ + Embed: string; /** @description The field that the guidance lines are associated with. */ FieldId: string; /** @description The identifier of this guidance line. */ GuidanceLineId: string; - /** @description Whether to include archived guidance lines. Valid values are "archived", "available", or "all". Default is "available". */ - Status: string; + /** @description The organization owning the guidance lines. */ + OrgId: string; /** @description Filter results based on status; Will default to active */ RecordFilter: string; - /** @description Whether to return the track geometry for AB and Adaptive Curves. See */ - Embed: string; + /** @description Whether to include archived guidance lines. Valid values are "archived", "available", or "all". Default is "available". */ + Status: string; }; requestBodies: { PostRequest: { diff --git a/src/types/generated/harvest-id.ts b/src/types/generated/harvest-id.ts index 8baf969..185d2cf 100644 --- a/src/types/generated/harvest-id.ts +++ b/src/types/generated/harvest-id.ts @@ -93,60 +93,37 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - LinkHarvestIdentificationModules: { - /** - * @description Self Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules - */ - self?: unknown; - }; - LinkSerialNumber: { - /** - * @description Self Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules/14404565493 - */ - self?: unknown; - /** - * @description Field Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456/field/6547879-adfasdfa-dasf546-551das - */ - field?: unknown; - /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/123456 - */ - organization?: unknown; - }; - /** @description A link provides a URI to access resources that are related to the response. */ - Link: { - '@type'?: string; - /** - * @description The relation of the object to the linked resource. - * @example self - */ - rel: string; - /** - * Format: uri - * @description The URI to the related resource. - * @example https://api.deere.com/platform/organizations/12345/harvestIdentificationModules/MHJL1232564 - */ - uri: string; - }; - Point: { - /** @example Point */ - '@type'?: string; - /** - * Format: double - * @description The latitude of the point - * @example 43.6187 - */ - lat?: number; - /** - * Format: double - * @description The longitude of the point - * @example 116.2146 - */ - lon?: number; + /** Format: Errors/DataValidationException */ + Errors: { + errors?: { + /** @example Error */ + '@type'?: string; + /** + * Format: uuid + * @example 9b331708-10e8-4e15-8097-a9aed7455d6d + */ + guid?: string; + /** + * @description An english description of the error + * @example End date should not be specified without start date + */ + message?: string; + /** + * @description A string constant representing the type of error + * @example validation_constraint_operation_end_date_without_start_date + */ + code?: string; + /** + * @description The name of the property or parameter deemed invalid + * @example startDate + */ + field?: string; + /** + * @description The value that was supplied for this field in the request + * @example null + */ + invalidValue?: string; + }[]; }; /** @description A general representation of quantity and unit. */ EventMeasurement: { @@ -246,66 +223,94 @@ export interface components { */ orgId?: string; }; - /** Format: Errors/DataValidationException */ - Errors: { - errors?: { - /** @example Error */ - '@type'?: string; - /** - * Format: uuid - * @example 9b331708-10e8-4e15-8097-a9aed7455d6d - */ - guid?: string; - /** - * @description An english description of the error - * @example End date should not be specified without start date - */ - message?: string; - /** - * @description A string constant representing the type of error - * @example validation_constraint_operation_end_date_without_start_date - */ - code?: string; - /** - * @description The name of the property or parameter deemed invalid - * @example startDate - */ - field?: string; - /** - * @description The value that was supplied for this field in the request - * @example null - */ - invalidValue?: string; - }[]; + /** @description A link provides a URI to access resources that are related to the response. */ + Link: { + '@type'?: string; + /** + * @description The relation of the object to the linked resource. + * @example self + */ + rel: string; + /** + * Format: uri + * @description The URI to the related resource. + * @example https://api.deere.com/platform/organizations/12345/harvestIdentificationModules/MHJL1232564 + */ + uri: string; + }; + LinkHarvestIdentificationModules: { + /** + * @description Self Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules + */ + self?: unknown; + }; + LinkSerialNumber: { + /** + * @description Self Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/harvestIdentificationModules/14404565493 + */ + self?: unknown; + /** + * @description Field Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456/field/6547879-adfasdfa-dasf546-551das + */ + field?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/123456 + */ + organization?: unknown; + }; + Point: { + /** @example Point */ + '@type'?: string; + /** + * Format: double + * @description The latitude of the point + * @example 43.6187 + */ + lat?: number; + /** + * Format: double + * @description The longitude of the point + * @example 116.2146 + */ + lon?: number; }; }; responses: { - /** @description An array of HID Cotton modules */ - HIDCottonModules: { + /** @description Bad Request - Start Date and End Date must both be present (or neither present), and Start Date should be chronologically first. */ + BadDateRange: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['LinkHarvestIdentificationModules'][]; - /** - * Format: int32 - * @description Number of results in the list - * @example 761 - */ - total?: number; - values?: components['schemas']['HIDCottonModule'][]; - }; + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; }; }; - /** @description A single HID Cotton Module */ - SingleHIDCottonModule: { + /** @description The user has not been provided access to the field operation specified by id. */ + DoesNotHaveAccessToFieldOperation: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user has not been provided access to data in this organization */ + DoesNotHaveAccessToOrg: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description An array of HID Cotton modules */ + HIDCottonModules: { headers: { [name: string]: unknown; }; content: { 'application/vnd.deere.axiom.v3+json': { - links?: components['schemas']['LinkSerialNumber'][]; + links?: components['schemas']['LinkHarvestIdentificationModules'][]; /** * Format: int32 * @description Number of results in the list @@ -316,24 +321,6 @@ export interface components { }; }; }; - /** @description A list of years */ - Years: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': number[]; - }; - }; - /** @description Bad Request - Start Date and End Date must both be present (or neither present), and Start Date should be chronologically first. */ - BadDateRange: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; - }; - }; /** @description The specified organization or HID Cotton module does not exist */ HidModuleIdIsInvalid: { headers: { @@ -341,53 +328,66 @@ export interface components { }; content?: never; }; - /** @description The specified Organization ID does not exist */ - InputOrgIdInvalid: { + /** @description The specified field operation does not exist. */ + InputFieldOpGuidInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The user has not been provided access to data in this organization */ - DoesNotHaveAccessToOrg: { + /** @description The specified Organization ID does not exist */ + InputOrgIdInvalid: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description The user has not been provided access to the field operation specified by id. */ - DoesNotHaveAccessToFieldOperation: { + /** @description A single HID Cotton Module */ + SingleHIDCottonModule: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: components['schemas']['LinkSerialNumber'][]; + /** + * Format: int32 + * @description Number of results in the list + * @example 761 + */ + total?: number; + values?: components['schemas']['HIDCottonModule'][]; + }; + }; }; - /** @description The specified field operation does not exist. */ - InputFieldOpGuidInvalid: { + /** @description A list of years */ + Years: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': number[]; + }; }; }; parameters: { - AcceptJSON: 'application/vnd.deere.axiom.v3+json'; - /** @description Module Serial Number */ - ModuleSerialNumber: string; - /** @description Organization ID */ - OrgId: string; - /** @description Related entities to embed. Possible values include clients, farms and field. (Note: embedding of clients and farms requires field to be embedded as well.) */ - Embed: string; /** @description Desired unit system. Takes ENGLISH or METRIC. */ 'Accept-UOM-System': 'ENGLISH' | 'METRIC' | 'MIXED'; /** @description Desired yield representation (unit) type. Takes VOLUME or MASS. */ 'Accept-Yield-Preference': string; + AcceptJSON: 'application/vnd.deere.axiom.v3+json'; /** @description Refer to https://developer.deere.com/#!help&doc=.%2Fgetstarted%2FHELPdeereTags.htm */ DeereTags: string; - /** @description Start of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the endDate parameter. */ - WrapStartDate: string; + /** @description Related entities to embed. Possible values include clients, farms and field. (Note: embedding of clients and farms requires field to be embedded as well.) */ + Embed: string; + /** @description Module Serial Number */ + ModuleSerialNumber: string; + /** @description Organization ID */ + OrgId: string; /** @description End of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the startDate parameter. */ WrapEndDate: string; + /** @description Start of the date-time range for wrap-timestamp filtering, in RFC 3339 format. Must be accompanied by the endDate parameter. */ + WrapStartDate: string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/index.ts b/src/types/generated/index.ts index e4a61b2..93f3fc1 100644 --- a/src/types/generated/index.ts +++ b/src/types/generated/index.ts @@ -2,7 +2,7 @@ * John Deere API TypeScript Types * Auto-generated from OpenAPI specifications * - * @generated 2026-06-19T08:01:58.850Z + * @generated */ export type { components as AempComponents, paths as AempPaths } from './aemp.js'; diff --git a/src/types/generated/machine-alerts.ts b/src/types/generated/machine-alerts.ts index bc3828f..3450ba6 100644 --- a/src/types/generated/machine-alerts.ts +++ b/src/types/generated/machine-alerts.ts @@ -54,104 +54,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - BadRequestResponseBody: components['schemas']['ErrorResponseBody'] & { - /** - * Format: numeric - * @enum {string} - */ - code?: '400'; - /** @example The provided payload was invalid or malformed. */ - message?: string; - }; - UnauthorizedResponseBody: components['schemas']['ErrorResponseBody'] & { - /** - * Format: numeric - * @enum {string} - */ - code?: '401'; - /** @example The request could not be authorized with the given credentials. */ - message?: string; - }; - ForbiddenResponseBody: components['schemas']['ErrorResponseBody'] & { - /** - * Format: numeric - * @enum {string} - */ - code?: '403'; - /** @example The provided authorization is not allowed to access this resource. */ - message?: string; - }; - NotAcceptableResponseBody: components['schemas']['ErrorResponseBody'] & { - /** - * Format: numeric - * @enum {string} - */ - code?: '406'; - /** @example The requested resource could not be produced in any acceptable format. */ - message?: string; - }; - NotFoundResponseBody: components['schemas']['ErrorResponseBody'] & { - /** - * Format: numeric - * @enum {string} - */ - code?: '404'; - /** @example The requested resource could not be found. */ - message?: string; - }; - /** - * Format: uuid - * @description A unique string identifier. - * @example e7c52f93-4bb6-48bb-b808-11b7b4f23059 - */ - UID: string; - ErrorResponseBody: { - /** - * @description This is the type definition for this reference object. - * @enum {string} - */ - readonly '@type'?: 'Errors'; - errors?: { - /** - * @description This is the type definition for this reference object. - * @enum {string} - */ - readonly '@type'?: 'Error'; - /** - * Format: numeric - * @example 400 - */ - code?: string; - /** - * @description The field in the request body that is invalid. - * @example id - */ - field?: string; - guid: components['schemas']['UID']; - /** - * @description The invalid value present in the field. - * @example b48da18c-c0e6-4bcc-a00e-581035beab3d - */ - invalidValue?: string; - /** @example There was a problem with the request. */ - message: string; - }[]; - otherAttributes?: { - /** @example example_name */ - name?: string; - /** @example example_value */ - value?: string; - }; - }; - TooManyRequestsResponseBody: components['schemas']['ErrorResponseBody'] & { - /** - * Format: numeric - * @enum {string} - */ - code?: '429'; - /** @example The server has received too many requests. Try again at a later time. */ - message?: string; - }; AlertLink: { /** * @description Machines Link. @@ -302,6 +204,104 @@ export interface components { description?: string; }; }; + BadRequestResponseBody: components['schemas']['ErrorResponseBody'] & { + /** + * Format: numeric + * @enum {string} + */ + code?: '400'; + /** @example The provided payload was invalid or malformed. */ + message?: string; + }; + ErrorResponseBody: { + /** + * @description This is the type definition for this reference object. + * @enum {string} + */ + readonly '@type'?: 'Errors'; + errors?: { + /** + * @description This is the type definition for this reference object. + * @enum {string} + */ + readonly '@type'?: 'Error'; + /** + * Format: numeric + * @example 400 + */ + code?: string; + /** + * @description The field in the request body that is invalid. + * @example id + */ + field?: string; + guid: components['schemas']['UID']; + /** + * @description The invalid value present in the field. + * @example b48da18c-c0e6-4bcc-a00e-581035beab3d + */ + invalidValue?: string; + /** @example There was a problem with the request. */ + message: string; + }[]; + otherAttributes?: { + /** @example example_name */ + name?: string; + /** @example example_value */ + value?: string; + }; + }; + ForbiddenResponseBody: components['schemas']['ErrorResponseBody'] & { + /** + * Format: numeric + * @enum {string} + */ + code?: '403'; + /** @example The provided authorization is not allowed to access this resource. */ + message?: string; + }; + NotAcceptableResponseBody: components['schemas']['ErrorResponseBody'] & { + /** + * Format: numeric + * @enum {string} + */ + code?: '406'; + /** @example The requested resource could not be produced in any acceptable format. */ + message?: string; + }; + NotFoundResponseBody: components['schemas']['ErrorResponseBody'] & { + /** + * Format: numeric + * @enum {string} + */ + code?: '404'; + /** @example The requested resource could not be found. */ + message?: string; + }; + TooManyRequestsResponseBody: components['schemas']['ErrorResponseBody'] & { + /** + * Format: numeric + * @enum {string} + */ + code?: '429'; + /** @example The server has received too many requests. Try again at a later time. */ + message?: string; + }; + /** + * Format: uuid + * @description A unique string identifier. + * @example e7c52f93-4bb6-48bb-b808-11b7b4f23059 + */ + UID: string; + UnauthorizedResponseBody: components['schemas']['ErrorResponseBody'] & { + /** + * Format: numeric + * @enum {string} + */ + code?: '401'; + /** @example The request could not be authorized with the given credentials. */ + message?: string; + }; }; responses: { /** @description The list of machines for a organization. */ @@ -331,22 +331,22 @@ export interface components { 'application/vnd.deere.axiom.v3+json': components['schemas']['BadRequestResponseBody']; }; }; - /** @description The request could not be authorized with the given credentials. */ - Unauthorized: { + /** @description The provided authorization is not allowed to access this resource. */ + Forbidden: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['UnauthorizedResponseBody']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['ForbiddenResponseBody']; }; }; - /** @description The provided authorization is not allowed to access this resource. */ - Forbidden: { + /** @description The given Accept headers did not allow for the content type this resource produces. */ + NotAcceptable: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ForbiddenResponseBody']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['NotAcceptableResponseBody']; }; }; /** @description The requested resource could not be found. */ @@ -358,34 +358,34 @@ export interface components { 'application/vnd.deere.axiom.v3+json': components['schemas']['NotFoundResponseBody']; }; }; - /** @description The given Accept headers did not allow for the content type this resource produces. */ - NotAcceptable: { + /** @description The server has received too many requests and cannot fulfill them. Try again at a later time. */ + TooManyRequests: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['NotAcceptableResponseBody']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['TooManyRequestsResponseBody']; }; }; - /** @description The server has received too many requests and cannot fulfill them. Try again at a later time. */ - TooManyRequests: { + /** @description The request could not be authorized with the given credentials. */ + Unauthorized: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['TooManyRequestsResponseBody']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['UnauthorizedResponseBody']; }; }; }; parameters: { - /** @description Principal ID of the machine/equipment. */ - principalId: string; - /** @description Returns alerts from a specified date onward. Requests are time-based with a maximum length of seven days. */ - StartDate: string; /** @description Returns alerts until a specific date. Requests are time-based with a maximum length of seven days. */ EndDate: string; /** @description Excludes acknowledged alerts if "true." */ ExcludeAcknowledged: boolean; + /** @description Returns alerts from a specified date onward. Requests are time-based with a maximum length of seven days. */ + StartDate: string; + /** @description Principal ID of the machine/equipment. */ + principalId: string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/machine-device-state-reports.ts b/src/types/generated/machine-device-state-reports.ts index 227e49a..9466825 100644 --- a/src/types/generated/machine-device-state-reports.ts +++ b/src/types/generated/machine-device-state-reports.ts @@ -28,14 +28,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** @description The link object provides links to ressources which are related to the response */ - MyJD_links: { - /** - * @description Device State Report Link. - * @example https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports - */ - self?: unknown; - }; /** @description Device State Report */ DeviceStateReport: { /** @@ -255,17 +247,25 @@ export interface components { */ vehiclePowerState?: Record; }; + /** @description The link object provides links to ressources which are related to the response */ + MyJD_links: { + /** + * @description Device State Report Link. + * @example https://sandboxapi.deere.com/platform/machines/5432/deviceStateReports + */ + self?: unknown; + }; }; responses: never; parameters: { - /** @description Principal ID of the machine/equipment. */ - principalId: string; - /** @description Return DSR from the specified startDate. */ - startDate: string; /** @description Return DSR till the specified endDate. */ endDate: string; /** @description If true, startDate and endDate won't be used. Send true to fetch lastKnown call History. */ lastKnown: boolean; + /** @description Principal ID of the machine/equipment. */ + principalId: string; + /** @description Return DSR from the specified startDate. */ + startDate: string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/machine-engine-hours.ts b/src/types/generated/machine-engine-hours.ts index cd29a0c..687c9c0 100644 --- a/src/types/generated/machine-engine-hours.ts +++ b/src/types/generated/machine-engine-hours.ts @@ -28,6 +28,25 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + /** @description Engine Hours */ + EngineHours: { + /** + * @description The number of hours the engine has been running. + * @example <valueAsDouble>523.5166666666667</valueAsDouble> + */ + reading?: Record; + /** + * Format: date-time + * @description Timestamp at which the report was created. + * @example 2010-10-04T14:35:05.000Z + */ + reportTime?: string; + /** + * @description Device which collected the data. + * @example CI + */ + source?: string; + }; /** @description Page of engineHours information for the machine. */ EngineHours_Response: { /** @description Link list */ @@ -48,25 +67,6 @@ export interface components { */ machine?: unknown; }; - /** @description Engine Hours */ - EngineHours: { - /** - * @description The number of hours the engine has been running. - * @example <valueAsDouble>523.5166666666667</valueAsDouble> - */ - reading?: Record; - /** - * Format: date-time - * @description Timestamp at which the report was created. - * @example 2010-10-04T14:35:05.000Z - */ - reportTime?: string; - /** - * @description Device which collected the data. - * @example CI - */ - source?: string; - }; }; responses: never; parameters: never; diff --git a/src/types/generated/machine-hours-of-operation.ts b/src/types/generated/machine-hours-of-operation.ts index 1a4667e..3f5ba08 100644 --- a/src/types/generated/machine-hours-of-operation.ts +++ b/src/types/generated/machine-hours-of-operation.ts @@ -28,26 +28,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** @description Page of hoursOfOperation information for the machine. */ - HoursOfOperation_Response: { - /** @description Link list */ - links?: components['schemas']['MyJD_links'][]; - /** - * Format: int64 - * @description Number of results in the list - * @example 1 - */ - total?: number; - values?: components['schemas']['HoursOfOperation'][]; - }; - /** @description The link object provides links to ressources which are related to the response */ - MyJD_links: { - /** - * @description Machines Link. - * @example https://sandboxapi.deere.com/platform/machines/5432 - */ - machine?: unknown; - }; /** @description Hours Of Operation */ HoursOfOperation: { /** @@ -74,6 +54,26 @@ export interface components { */ detailedState?: string; }; + /** @description Page of hoursOfOperation information for the machine. */ + HoursOfOperation_Response: { + /** @description Link list */ + links?: components['schemas']['MyJD_links'][]; + /** + * Format: int64 + * @description Number of results in the list + * @example 1 + */ + total?: number; + values?: components['schemas']['HoursOfOperation'][]; + }; + /** @description The link object provides links to ressources which are related to the response */ + MyJD_links: { + /** + * @description Machines Link. + * @example https://sandboxapi.deere.com/platform/machines/5432 + */ + machine?: unknown; + }; }; responses: never; parameters: never; diff --git a/src/types/generated/machine-locations.ts b/src/types/generated/machine-locations.ts index 54f009e..f3f8fc4 100644 --- a/src/types/generated/machine-locations.ts +++ b/src/types/generated/machine-locations.ts @@ -4,6 +4,26 @@ */ export interface paths { + '/machines/{principalId}/breadcrumbs': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Machine Breadcrumbs + * @description This resource allows the client to get the following details of a Machine: SpeedFuel LevelDirection of Machine (heading)Machine StateMachine State Defined Type IdCorrelation IdLocation AltitudeOriginCreated TimeStamp + */ + get: operations['getBreadcrumbsByMachineId']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; '/machines/{principalId}/locationHistory': { parameters: { query?: never; @@ -77,6 +97,122 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + /** @description Breadcrumb object containing location information and location-relevant machine data. */ + Breadcrumb: { + machineState?: components['schemas']['BreadcrumbMachineState']; + /** + * @description The origin of the breadcrumb + * @default BREADCRUMB + * @example BREADCRUMB + * @enum {string} + */ + origin: 'JDLINK' | 'BREADCRUMB'; + links?: components['schemas']['Breadcrumb_links'][]; + } & components['schemas']['Breadcrumb_POST']; + /** @description Human readable title for the machine state */ + BreadcrumbMachineState: { + /** + * @default Breadcrumb$MachineState + * @example Breadcrumb$MachineState + */ + '@type': string; + /** + * @example Idle + * @enum {string} + */ + value?: 'Idle' | 'Working' | 'Transporting'; + }; + /** @description Breadcrumb object containing location information and location-relevant machine data. */ + Breadcrumb_POST: { + /** + * @description Object type + * @default Breadcrumb + * @example Breadcrumb + */ + '@type': string; + /** + * Format: date-time + * @description The timestamp of the breadcrumb creation + * @example 2018-08-07T10:12:50.911Z + */ + createTimestamp: string; + /** + * Format: date-time + * @description The timestamp of the event when the position was changed + * @example 2018-08-07T10:12:50.911Z + */ + eventTimestamp: string; + point: components['schemas']['Point']; + speed?: components['schemas']['MeasurementAsDouble']; + heading?: components['schemas']['MeasurementAsInteger']; + fuelLevel?: components['schemas']['MeasurementAsDouble']; + /** + * @description Principal/Equipment id of which the location corresponds to. + * @example 123456 + */ + principalId?: number; + /** + * Format: guid + * @description Correlation ID has to be submitted with location or breadcrumb information when uploading to the server. Corellation ID information can be used by clients for diagnostics of the parallel assignment of the same machine to 2 or more devices. Workflow for detection: - My app subscribed to the machine locations changes of my org - If selecting a machine on my mobile device my app checks whether some device sent locations recently which was not mine (not one of my previous or current correlationIDs) - Prevention! - If I detected that another device sent location - the app warns me and I'm able to decide to select the machine or not - I started MLT and my app sends the breadcrumb/location with my correlationID to the server - My app is still subscribed to machine locations changes of the org and receives a location of machine selected in my app with a correlation ID which is not one of mines - My app warns me that another user reports locations to My machine as well - BTW - empty Correlation ID is not allowed when contributing a location or breadcrumb using the API or IoT - Recommendation - the app shall create a new correlationID (guid) when the user selects a new machine Correlation ID can be used for cleaning up recorded locations data on the server side in case the client erroneously submitted location data for a wrong machine. + * @example c1429d12-17db-4fd5-a27f-50ba62e81c8c + */ + correlationId?: string; + links: components['schemas']['Breadcrumb_links'][]; + }; + /** + * @description Links related to the breadcrumb + * @example [ + * { + * "@type": "Link", + * "rel": "contributionDefinition", + * "uri": "https://partnerapi.deere.com/platform/contributionDefinitions/70df8ced-b6df-458e-b6f2-2d705cb9a2bf" + * }, + * { + * "@type": "Link", + * "rel": "machine", + * "uri": "https://partnerapi.deere.com/platform/machines/482754" + * } + * ] + */ + Breadcrumb_links: { + /** + * @description This is the @type definition for this reference object. + * @default Link + * @example Link + */ + '@type': string; + /** @description Defines the relation from the object to the link. The minimum response is the self link. Please refere to the individual example and object definition (the allOf keyword which is only visibile in the YAMl code) to see all required links for the instance of the object. */ + rel: string; + /** + * Format: uri + * @description The URL to the ressource which is related + */ + uri: string; + }; + /** @description Page of bredacrumb information for the machine */ + Breadcrumbs_Response: { + /** @description Link list */ + links?: components['schemas']['MyJD_links_Breadcrumbs'][]; + /** + * @description Number of results in the list + * @example 1 + */ + total?: number; + values?: components['schemas']['Breadcrumb'][]; + }; + /** @description Measurement as double value */ + MeasurementAsDouble: { + /** Format: float */ + valueAsDouble: number; + unit?: string; + vrDomainId?: string; + }; + /** @description Measurement as integer value */ + MeasurementAsInteger: { + valueAsInteger: number; + unit?: string; + vrDomainId?: string; + }; MyJD_links: { /** * @description Machines Link. @@ -84,6 +220,66 @@ export interface components { */ machine?: unknown; }; + /** + * @description The link object provides links to ressources which are related to the response + * @example [ + * { + * "@type": "Link", + * "rel": "self", + * "uri": "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs" + * }, + * { + * "@type": "Link", + * "rel": "nextPage", + * "uri": "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs;start=30;count=10" + * }, + * { + * "@type": "Link", + * "rel": "nextPage", + * "uri": "https://partnerapi.deere.com/platform/machines/482754/breadcrumbs;start=10;count=10" + * } + * ] + */ + MyJD_links_Breadcrumbs: { + /** + * @description This is the @type definition for this reference object. + * @default Link + * @example Link + */ + '@type': string; + /** + * @description Defines the relation from the object to the link. The minimum response is the self link. Please refere to the individual example and object definition (the allOf keyword which is only visibile in the YAMl code) to see all required links for the instance of the object. + * @default self + */ + rel: string; + /** + * Format: uri + * @description The URL to the ressource which is related + */ + uri?: string; + }; + /** @description Point. */ + Point: { + /** + * @description Object type + * @default Point + * @example Point + */ + '@type': string; + /** + * Format: float + * @description Latitude in range of -90 to +90 + * @example 7.801324 + */ + lat: number; + /** + * Format: float + * @description longitude in range of -180 to +180 + * @example 49.456166 + */ + lon: number; + altitude?: components['schemas']['MeasurementAsDouble']; + }; ReportedLocation: { /** * @description Contains the <lat>, <lon>, and <altitude> tags. @@ -129,4 +325,54 @@ export interface components { pathItems: never; } export type $defs = Record; -export type operations = Record; +export interface operations { + getBreadcrumbsByMachineId: { + parameters: { + query?: { + /** @description OrganizationId */ + orgId?: string; + /** @description UTC format Start Date.If null, 'current time - 24 hours' will be treated as startDate. */ + startDate?: string; + /** @description UTC format End Date. If null, current time will be treated as endDate. */ + endDate?: string; + /** @description Default value: false. Valid values: true or false. If true, then date parameters are not used and the last known location of the machine will be sent in the response. */ + lastKnown?: boolean; + }; + header?: { + /** @description Accept Language. If not provided, the default Locale is US. Else, Locale will be searched on the basis of language. */ + 'Accept-Language'?: string; + }; + path: { + /** @description principalId of Machine/Equipment. */ + principalId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Breadcrumb list for the machine */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Breadcrumbs_Response']; + }; + }; + /** @description The user does not have access to the machine or is not allowed to see machine locations */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Machine not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; +} diff --git a/src/types/generated/map-layers.ts b/src/types/generated/map-layers.ts index 3125879..4407e98 100644 --- a/src/types/generated/map-layers.ts +++ b/src/types/generated/map-layers.ts @@ -4,7 +4,7 @@ */ export interface paths { - '/organizations/{orgId}/fields/{id}/mapLayerSummaries': { + '/fileResources/{id}': { parameters: { query?: never; header?: never; @@ -12,54 +12,73 @@ export interface paths { cookie?: never; }; /** - * List Map Layer Summaries - * @description This resource will list all Map Layer Summaries for a specified field. + * View/Download a File Resource + * @description This resource allows the client to view or download a File Resource. To view a File Resource's metadata, set the application/vnd.deere.axiom.v3+json Accept Header. To download the File Resource itself, choose a zip or octet-stream Accept Header. */ get: { parameters: { - query?: { - /** @description Set includePartialSummaries to true to include Map Layer Summaries without File Resources. */ - includePartialSummaries?: components['parameters']['includePartialSummaries']; - /** @description Takes these values mapLayers. */ - embed?: components['parameters']['embed']; - }; + query?: never; header?: never; path: { - /** @description Organization ID */ - orgId: components['parameters']['OrganizationId']; - /** @description Field ID */ - fieldId: components['parameters']['fieldId']; + /** @description File Resource ID */ + id: components['parameters']['fileId_FileResources']; }; cookie?: never; }; requestBody?: never; responses: { - 200: components['schemas']['MapLayerSummaryCollection']; + 200: components['schemas']['GetFileResponseDetails']; }; }; - put?: never; /** - * Create a map layer summary - * @description Creates a new Map Layer Summary resource. + * Upload a File Resource + * @description Uploads a binary File Resource for a given Map Layer. The client must first create a File Resource ID by calling POST /mapLayers/{id}/fileResources API before uploading. Check the status of the upload by requesting the File Resource's targetResource Link. */ - post: { + put: { parameters: { query?: never; header?: never; path: { - /** @description Organization ID */ - orgId: components['parameters']['OrganizationId']; - /** @description Field ID */ - fieldId: components['parameters']['fieldId']; + /** @description File Resource ID */ + id: components['parameters']['fileId_FileResources']; }; cookie?: never; }; - requestBody?: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['PostRequest']; - 'Create Map Layer Summary': unknown; + requestBody?: never; + responses: { + /** @description Created */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; + }; + }; + }; + }; + post?: never; + /** + * Delete a File Resource + * @description Deletes a file resource. + */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + /** @description File Resource ID */ + id: components['parameters']['fileId_FileResources']; }; + cookie?: never; }; + requestBody?: never; responses: { /** @description Created */ 200: { @@ -67,19 +86,17 @@ export interface paths { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': unknown; + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; }; }; - 400: components['responses']['400']; - 401: components['responses']['401']; - 403: components['responses']['403']; - 404: components['responses']['404']; - 406: components['responses']['406']; - 415: components['responses']['415']; - 429: components['responses']['429']; }; }; - delete?: never; options?: never; head?: never; patch?: never; @@ -172,57 +189,858 @@ export interface paths { patch?: never; trace?: never; }; -} -export type webhooks = Record; -export interface components { - schemas: { - /** @description Provides a reference to an associated object or list. */ - Link: { - /** @example Link */ - '@type'?: string; - /** - * @description The relation of the object to the linked resource. - * @example owningOrganization - */ - rel?: string; - /** - * Format: uri - * @description The URI to the related resource. - * @example https://api.deere.com/platform/organizations/61265 - */ - uri?: string; + '/mapLayerSummaries/{id}/mapLayers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - CollectionBase: { - links?: { - /** - * @description Links relavent to exploring the collection. - * @example self - */ - rel?: string; - /** - * Format: uri - * @description The URI to the related resource. - * @example https://api.deere.com/platform/organizations/61265/fields/42849709-5d54-473a-9eba-adab6f4bc8a8/mapLayerSummaries - */ - uri?: string; - }[]; - /** @example 1 */ - total?: number; + /** + * List Map Layers + * @description This resource lists all Map Layers for a specific Map Layer Summary. Note: This API does not support eTags. + */ + get: { + parameters: { + query?: { + /** @description Set includePartialLayers to true to include Map Layers without File Resources. */ + includePartialLayers?: components['parameters']['includePartialLayers']; + }; + header?: never; + path: { + /** @description Map Layer Summary ID */ + id: components['parameters']['id_MapLayers']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['schemas']['MapLayerCollection_MapLayers']; + }; + }; + put?: never; + /** + * Create a Map Layer + * @description Creates a new Map Layer resource. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Map Layer Summary ID */ + id: components['parameters']['id_MapLayers']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostResponse_MapLayers']; + 'Create Map Layer': unknown; + }; + }; + responses: { + /** @description Created */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @description Number of results in the list + * @example 761 + */ + total?: number; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/mapLayers/{id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View a Map Layer + * @description Returns a specific Map Layer resource. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Map Layer ID */ + id: components['parameters']['getId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Created */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + values?: unknown; + links?: unknown; + }; + }; + }; + }; + }; + put?: never; + post?: never; + /** + * Delete a Map Layer + * @description Deletes a Map Layer and its underlying File Resource. + */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Map Layer ID */ + id: components['parameters']['getMapId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int32 + * @example 1 + */ + total?: number; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/mapLayers/{id}/fileResources': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get a Map Layer File Resource + * @description This resource will return the File Resource associated to the specified Map Layer. Note: This API does not support eTags. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Map Layer ID */ + id: components['parameters']['id_FileResources']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['schemas']['GetFileResponse']; + }; + }; + put?: never; + /** + * Create a Map Layer File Resource + * @description This resource will create a new File Resource for a Map Layer. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Map Layer ID */ + id: components['parameters']['id_FileResources']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['RequestDetails']; + 'Create a new File Resource': unknown; + }; + }; + responses: { + 200: components['schemas']['PostFileResponse']; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/mapLayers/{mapLayerId}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Extract Map Layer Image + * @description Returns the image file associated with the Map Layer resource. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Map Layer ID */ + id: components['parameters']['getMapId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Created */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'image/png OR application/octet-stream': unknown; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{orgId}/fields/{id}/mapLayerSummaries': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Map Layer Summaries + * @description This resource will list all Map Layer Summaries for a specified field. + */ + get: { + parameters: { + query?: { + /** @description Set includePartialSummaries to true to include Map Layer Summaries without File Resources. */ + includePartialSummaries?: components['parameters']['includePartialSummaries']; + /** @description Takes these values mapLayers. */ + embed?: components['parameters']['embed']; + }; + header?: never; + path: { + /** @description Organization ID */ + orgId: components['parameters']['OrganizationId']; + /** @description Field ID */ + fieldId: components['parameters']['fieldId']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['schemas']['MapLayerSummaryCollection']; + }; + }; + put?: never; + /** + * Create a map layer summary + * @description Creates a new Map Layer Summary resource. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Organization ID */ + orgId: components['parameters']['OrganizationId']; + /** @description Field ID */ + fieldId: components['parameters']['fieldId']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostRequest']; + 'Create Map Layer Summary': unknown; + }; + }; + responses: { + /** @description Created */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + 400: components['responses']['400']; + 401: components['responses']['401']; + 403: components['responses']['403']; + 404: components['responses']['404']; + 406: components['responses']['406']; + 415: components['responses']['415']; + 429: components['responses']['429']; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + '400Errors': { + /** @example Errors */ + '@type'?: string; + errors?: { + /** @example Error */ + '@type'?: string; + /** + * Format: uuid + * @example ed292512-1f3c-4285-83c3-1fb084423f9b + */ + guid?: string; + /** @example This field is required. */ + message?: string; + /** @example validation_constraint_required_field */ + code?: string; + /** @example title */ + field?: string; + }[]; + otherAttributes?: Record; + }; + AvailableLinks: { + /** + * @description This Map Layer List Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries + */ + 'self (map layer summaries list)'?: unknown; + /** + * @description This Map Layer Summary Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID + */ + 'self (map layer summary)'?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; + /** + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID + */ + targetResource?: unknown; + /** + * @description Map Layers Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers + */ + mapLayers?: unknown; + /** + * @description Create Map Layers Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers + */ + createMapLayer?: unknown; + }; + AvailableLinks_FileResources: { + /** + * @description This File Resource Link. + * @example https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID + */ + self?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; + /** + * @description Map Layers Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID + */ + targetResource?: unknown; + }; + AvailableLinks_MapLayers: { + /** + * @description This Map Layer List Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers + */ + 'self (map list)'?: unknown; + /** + * @description This Map Layer Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID + */ + 'self (map layer)'?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; + /** + * @description Map Layer Summary Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID + */ + mapLayerSummary?: unknown; + /** + * @description Map Layer's File Resources Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources + */ + fileResources?: unknown; + /** + * @description Map Layer's PNG Image Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image + */ + image?: unknown; + /** + * @description Map Layer's File Resources Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources + */ + createFileResource?: unknown; + }; + CollectionBase: { + links?: { + /** + * @description Links relavent to exploring the collection. + * @example self + */ + rel?: string; + /** + * Format: uri + * @description The URI to the related resource. + * @example https://api.deere.com/platform/organizations/61265/fields/42849709-5d54-473a-9eba-adab6f4bc8a8/mapLayerSummaries + */ + uri?: string; + }[]; + /** @example 1 */ + total?: number; + }; + ContributedMapLayer: { + /** @example ContributedMapLayer */ + '@type'?: string; + /** + * @description The title on the map layer. + * @example Drone Flyover + */ + title: string; + extent?: components['schemas']['MapExtent']; + /** + * @description A value to sort the Map Layer by in Field Analyzer Beta. Defaults to `title` if not provided. + * @example 1 + */ + sortName?: string; + legends: components['schemas']['MapLegend']; + /** + * @description Map layer status. + * @enum {string} + */ + readonly status?: 'VALID' | 'INVALID' | 'QUEUED' | 'NO_FILE_RESOURCE'; + /** + * @description Description of the map layer. + * @example An aerial view of the building. + */ + text?: string; + metadata?: components['schemas']['Metadata'][]; + /** + * @description The primary identifier for the operation. + * @example 8a0011f1-297e-48c2-a030-91a21287e721 + */ + readonly id?: string; + links?: components['schemas']['Link'][]; + }; + ContributedMapLayerSummary: { + /** + * @description Links to other objects in the Deere ecosystem. + * @example See "Available Links" below + */ + links?: unknown[]; + /** + * @description Count of Map Layer Summaries in response. + * @example 3 + */ + total?: number; + /** @description The primary resource listing. */ + values?: unknown[]; + }; + ContributedMapLayer_FileResources: { + /** + * @description Links to other objects in the Deere ecosystem. + * @example See "Available Links" below Readonly: Yes, except owningOrganization + */ + links?: unknown[]; + /** + * @description File Resource ID + * @example 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes + */ + id?: string; + /** + * @description An array of key value pair items about the File Resource. + * @example See sample response below Readonly: No + */ + metadata?: unknown[]; + /** + * @description Valid values are image/png, image/tif, image/tiff and application/zip + * @example image/png Readonly: No + */ + mimeType?: string; + /** + * Format: date-time + * @description ISO 8601 Date and time in UTC this resource was created. + * @example 2019-03-02T16:14:23.421Z Readonly: No + */ + timestamp?: string; + }; + ContributedMapLayer_MapLayers: { + /** + * @description Links to other objects in the Deere ecosystem. + * @example See "Available Links" below + */ + links?: unknown[]; + /** + * @description Count of Map Layer Summaries in response. + * @example 3 + */ + total?: number; + /** @description The primary resource listing. */ + values?: Record; + }; + FileResource: { + /** @example FileResource */ + '@type'?: string; + /** + * @description The mimeType of the FileResource. + * @enum {string} + */ + mimeType?: 'image/png' | 'image/tif' | 'image/tiff' | 'application/zip'; + /** @description The name of the file */ + metadata: { + /** @example filename */ + name?: string; + /** @example a_green_tractor.png */ + value?: string; + }[]; + /** + * @description The primary identifier for the FileResource. + * @example 888d97c6-cd87-48de-88d5-3c2721250a5e + */ + readonly id?: string; + /** @description Links for self, targetResource, and owningOrganization */ + links: components['schemas']['Link'][]; + }; + FileResourceAvailableLinks: { + /** + * @description Map Layers Link. + * @example https://sandboxapi.deere.com/platform/fileResources/FILE_RESOURCE_ID + */ + self?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; + /** + * @description Map Layers Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID + */ + targetResource?: unknown; + }; + FileResourceGetResponse: { + /** + * @description Links to other objects in the Deere ecosystem. + * @example See "Available Links" below Readonly: Yes, except owningOrganization + */ + links?: unknown[]; + /** + * @description Links to other objects in the Deere ecosystem. + * @example See "Available Links" below Readonly: Yes + */ + id?: string; + /** + * @description An array of key value pair items about the File Resource. + * @example See sample response below Readonly: No + */ + metadata?: unknown[]; + /** + * @description Valid values are image/png, image/tif, image/tiff and application/zip + * @example image/png Readonly: No + */ + mimeType?: string; + /** + * Format: date-time + * @description ISO 8601 Date and time in UTC this resource was created. + * @example 2019-03-02T16:14:23.421Z Readonly: No + */ + timestamp?: string; + }; + GenericErrors: { + /** @example Errors */ + '@type'?: string; + errors?: { + /** @example Error */ + '@type'?: string; + /** + * Format: uuid + * @example ed292512-1f3c-4285-83c3-1fb084423f9b + */ + guid?: string; + /** @example The requested resource was not found */ + message?: string; + }[]; + otherAttributes?: Record; + }; + GetAvailableLinks: { + /** + * @description This Map Layer Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID + */ + self?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; + /** + * @description Map Layer Summary Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID + */ + mapLayerSummary?: unknown; + /** + * @description Map Layer's File Resources Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources + */ + fileResources?: unknown; + /** + * @description Map Layer's PNG Image Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/image + */ + image?: unknown; + /** + * @description Map Layer's File Resources Link. + * @example https://sandboxapi.deere.com/platform/mapLayers/MAP_LAYER_ID/fileResources + */ + createFileResource?: unknown; + }; + GetFileResponse: unknown; + GetFileResponseDetails: unknown; + GetMapLayerSummaryAvailableLinks: { + /** + * @description This Map Layer Summary Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID + */ + self?: unknown; + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; + /** + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID + */ + targetResource?: unknown; + /** + * @description Map Layers Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers + */ + mapLayers?: unknown; + /** + * @description Create Map Layers Link. + * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers + */ + createMapLayer?: unknown; + }; + GetResponseDetails: { + /** + * @description Links to other objects in the Deere ecosystem. + * @example See "Map Layer Available Links" below + */ + links?: unknown[]; + /** + * Format: uuid + * @description Map Layer ID + * @example 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd + */ + id?: string; + /** + * @description Top level name of the Map Layer + * @example NDVI Layer + */ + title?: string; + /** + * @description Describes Map Layer. Supports limited . + * @example NDVI Layer for mid-season plant health based on near infrared + */ + text?: string; + /** + * @description An array of key value pair items about the Map Layer. Supports limited . + * @example See sample request below + */ + metadata?: unknown[]; + /** + * @description Maximum and minimum extent of the map. + * @example null + */ + extent?: Record; + /** + * @description Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title. + * @example null + */ + sortName?: string; + /** + * @description Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image. + * @example null + */ + legends?: Record; + /** + * @description Map Layer image processing progress. + * @example VALID + */ + status?: Record; + }; + /** @description Provides a reference to an associated object or list. */ + Link: { + /** @example Link */ + '@type'?: string; + /** + * @description The relation of the object to the linked resource. + * @example owningOrganization + */ + rel?: string; + /** + * Format: uri + * @description The URI to the related resource. + * @example https://api.deere.com/platform/organizations/61265 + */ + uri?: string; + }; + /** @description Extents of the field. If not provided, the FileResource must be of type `image/tiff` or `application/zip` and contain the extents. */ + MapExtent: { + /** @example MapExtent */ + '@type'?: string; + /** + * Format: double + * @example 41.47187948123269 + */ + minimumLatitude: number; + /** + * Format: double + * @example 41.48192734153501 + */ + maximumLatitude: number; + /** + * Format: double + * @example -90.43179946950056 + */ + minimumLongitude: number; + /** + * Format: double + * @example -90.4157062154112 + */ + maximumLongitude: number; + }; + MapLayerCollection: components['schemas']['CollectionBase'] & { + values?: components['schemas']['ContributedMapLayer'][]; + }; + MapLayerCollection_MapLayers: unknown; + MapLayerSummaryCollection: unknown; + MapLegend: { + /** @example MapLegend */ + '@type'?: string; + /** + * @description The unit of Legand + * @example seeds1ha-1 + */ + unitId?: string; + ranges?: components['schemas']['MapLegendItem'][]; + }; + MapLegendItem: { + /** @example MapLegendItem */ + '@type'?: string; + /** + * @description A label for the color + * @example Most profitable + */ + label?: string; + /** + * Format: double + * @example 10.09 + */ + minimum?: number; + /** + * Format: double + * @example 30.18 + */ + maximum?: number; + /** + * @description The hex color code corresponding to a color in the map layer image + * @example #0BA74A + */ + hexColor?: string; + /** + * Format: double + * @example 3.5 + */ + percent?: number; + }; + Metadata: { + /** @example Metadata */ + '@type'?: string; + /** @example Location */ + name: string; + /** @example Moline, IL */ + value: string; }; - MapLayerSummaryCollection: unknown; - ContributedMapLayerSummary: { + PostAvailableLinks: { /** - * @description Links to other objects in the Deere ecosystem. - * @example See "Available Links" below + * @description Organizations Link + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID */ - links?: unknown[]; + owningOrganization?: unknown; /** - * @description Count of Map Layer Summaries in response. - * @example 3 + * @description Contribution Definitions Link. + * @example https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID */ - total?: number; - /** @description The primary resource listing. */ - values?: unknown[]; + contributionDefinition?: unknown; + }; + PostAvailableLinks_FileResources: { + /** + * @description Organizations Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID + */ + owningOrganization?: unknown; }; PostContributedMapLayerSummary: { /** @@ -269,38 +1087,7 @@ export interface components { */ lastModifiedDate?: string; }; - AvailableLinks: { - /** - * @description This Map Layer List Link. - * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID/mapLayerSummaries - */ - 'self (map layer summaries list)'?: unknown; - /** - * @description This Map Layer Summary Link. - * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID - */ - 'self (map layer summary)'?: unknown; - /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID - */ - owningOrganization?: unknown; - /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID - */ - targetResource?: unknown; - /** - * @description Map Layers Link. - * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - */ - mapLayers?: unknown; - /** - * @description Create Map Layers Link. - * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - */ - createMapLayer?: unknown; - }; + PostFileResponse: unknown; PostRequest: { /** * @description Links to other objects in the Deere ecosystem. @@ -367,211 +1154,76 @@ export interface components { */ dateCreated?: string; }; - PostAvailableLinks: { - /** - * @description Organizations Link - * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID - */ - owningOrganization?: unknown; - /** - * @description Contribution Definitions Link. - * @example https://sandboxapi.deere.com/platform/contributionDefinitions/DEFINITION_ID - */ - contributionDefinition?: unknown; - }; - GetMapLayerSummaryAvailableLinks: { - /** - * @description This Map Layer Summary Link. - * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID - */ - self?: unknown; - /** - * @description Organizations Link. - * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID - */ - owningOrganization?: unknown; - /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/ORG_ID/fields/FIELD_ID - */ - targetResource?: unknown; - /** - * @description Map Layers Link. - * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - */ - mapLayers?: unknown; - /** - * @description Create Map Layers Link. - * @example https://sandboxapi.deere.com/platform/mapLayerSummaries/MAP_LAYER_SUMMARY_ID/mapLayers - */ - createMapLayer?: unknown; - }; - Metadata: { - /** @example Metadata */ - '@type'?: string; - /** @example Location */ - name: string; - /** @example Moline, IL */ - value: string; - }; - MapLayerCollection: components['schemas']['CollectionBase'] & { - values?: components['schemas']['ContributedMapLayer'][]; - }; - ContributedMapLayer: { - /** @example ContributedMapLayer */ - '@type'?: string; - /** - * @description The title on the map layer. - * @example Drone Flyover - */ - title: string; - extent?: components['schemas']['MapExtent']; + PostResponse_MapLayers: { /** - * @description A value to sort the Map Layer by in Field Analyzer Beta. Defaults to `title` if not provided. - * @example 1 + * Format: uuid + * @description Map Layer ID + * @example 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes */ - sortName?: string; - legends: components['schemas']['MapLegend']; + id?: string; /** - * @description Map layer status. - * @enum {string} + * @description Top level name of the Map Layer + * @example NDVI Layer Readonly: No */ - readonly status?: 'VALID' | 'INVALID' | 'QUEUED' | 'NO_FILE_RESOURCE'; + title?: string; /** - * @description Description of the map layer. - * @example An aerial view of the building. + * @description Describes Map Layer. Supports limited . + * @example NDVI Layer for mid-season plant health based on near infrared Readonly: No */ text?: string; - metadata?: components['schemas']['Metadata'][]; - /** - * @description The primary identifier for the operation. - * @example 8a0011f1-297e-48c2-a030-91a21287e721 - */ - readonly id?: string; - links?: components['schemas']['Link'][]; - }; - /** @description Extents of the field. If not provided, the FileResource must be of type `image/tiff` or `application/zip` and contain the extents. */ - MapExtent: { - /** @example MapExtent */ - '@type'?: string; /** - * Format: double - * @example 41.47187948123269 + * @description An array of key value pair items about the Map Layer. Supports limited + * @example See sample request below Readonly: No */ - minimumLatitude: number; + metadata?: unknown[]; /** - * Format: double - * @example 41.48192734153501 + * @description Maximum and minimum extent of the map. + * @example See sample request below Readonly: No */ - maximumLatitude: number; + extent?: Record; /** - * Format: double - * @example -90.43179946950056 + * @description Determines the display alphabetical sort order between this Map Layer and its peers (all the Map Layers tied to the same Map Layer Summary). Defaults to the value of title. + * @example 02 Readonly: No */ - minimumLongitude: number; + sortName?: string; /** - * Format: double - * @example -90.4157062154112 + * @description Keys the Map Layer's image data by color. Should represent all possible values and colors found in the Map Layer's File Resource image. + * @example --- Readonly: No */ - maximumLongitude: number; - }; - MapLegend: { - /** @example MapLegend */ - '@type'?: string; + legends?: Record; /** - * @description The unit of Legand - * @example seeds1ha-1 + * @description Map Layer image processing progress. + * @example VALID Readonly: Yes */ - unitId?: string; - ranges?: components['schemas']['MapLegendItem'][]; + status?: string; }; - MapLegendItem: { - /** @example MapLegendItem */ - '@type'?: string; - /** - * @description A label for the color - * @example Most profitable - */ - label?: string; - /** - * Format: double - * @example 10.09 - */ - minimum?: number; + RequestDetails: { /** - * Format: double - * @example 30.18 + * @description Links to other objects in the Deere ecosystem. + * @example See "Available Links" below Readonly: Yes, except owningOrganization */ - maximum?: number; + links?: unknown[]; /** - * @description The hex color code corresponding to a color in the map layer image - * @example #0BA74A + * @description File Resource ID + * @example 83ks9gh3-29fj-9302-837j-92jlsk92jd095kd Readonly: Yes */ - hexColor?: string; + id?: string; /** - * Format: double - * @example 3.5 + * @description An array of key value pair items about the File Resource. + * @example See sample response below Readonly: No */ - percent?: number; - }; - FileResource: { - /** @example FileResource */ - '@type'?: string; + metadata?: unknown[]; /** - * @description The mimeType of the FileResource. - * @enum {string} + * @description Valid values are image/png, image/tif, image/tiff and application/zip + * @example image/png Readonly: No */ - mimeType?: 'image/png' | 'image/tif' | 'image/tiff' | 'application/zip'; - /** @description The name of the file */ - metadata: { - /** @example filename */ - name?: string; - /** @example a_green_tractor.png */ - value?: string; - }[]; + mimeType?: string; /** - * @description The primary identifier for the FileResource. - * @example 888d97c6-cd87-48de-88d5-3c2721250a5e + * Format: date-time + * @description ISO 8601 Date and time in UTC this resource was created. + * @example 2019-03-02T16:14:23.421Z Readonly: No */ - readonly id?: string; - /** @description Links for self, targetResource, and owningOrganization */ - links: components['schemas']['Link'][]; - }; - '400Errors': { - /** @example Errors */ - '@type'?: string; - errors?: { - /** @example Error */ - '@type'?: string; - /** - * Format: uuid - * @example ed292512-1f3c-4285-83c3-1fb084423f9b - */ - guid?: string; - /** @example This field is required. */ - message?: string; - /** @example validation_constraint_required_field */ - code?: string; - /** @example title */ - field?: string; - }[]; - otherAttributes?: Record; - }; - GenericErrors: { - /** @example Errors */ - '@type'?: string; - errors?: { - /** @example Error */ - '@type'?: string; - /** - * Format: uuid - * @example ed292512-1f3c-4285-83c3-1fb084423f9b - */ - guid?: string; - /** @example The requested resource was not found */ - message?: string; - }[]; - otherAttributes?: Record; + timestamp?: string; }; }; responses: { @@ -641,16 +1293,28 @@ export interface components { parameters: { /** @description Organization ID */ OrganizationId: string; - /** @description Field ID */ - fileId: string; - /** @description Set includePartialSummaries to true to include Map Layer Summaries without File Resources. */ - includePartialSummaries: boolean; /** @description Takes these values mapLayers. */ embed: string; /** @description Field ID */ fieldId: string; + /** @description Field ID */ + fileId: string; + /** @description File Resource ID */ + fileId_FileResources: string; + /** @description Map Layer ID */ + getId: string; + /** @description Map Layer ID */ + getMapId: string; /** @description Map Layer Summary ID */ id: string; + /** @description Map Layer ID */ + id_FileResources: string; + /** @description Map Layer Summary ID */ + id_MapLayers: string; + /** @description Set includePartialLayers to true to include Map Layers without File Resources. */ + includePartialLayers: boolean; + /** @description Set includePartialSummaries to true to include Map Layer Summaries without File Resources. */ + includePartialSummaries: boolean; }; requestBodies: never; headers: never; diff --git a/src/types/generated/notifications.ts b/src/types/generated/notifications.ts index d319ef9..6af9a97 100644 --- a/src/types/generated/notifications.ts +++ b/src/types/generated/notifications.ts @@ -4,28 +4,31 @@ */ export interface paths { - '/notifications/{sourceEvent}': { + '/notificationEvents': { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; + get?: never; + put?: never; /** - * Fetch single notification. - * @description Retrieve a single notification by source event. + * Create Notification Event + * @description This resource creates an event that Operations Center will use to generate notifications. These notifications will be received by anyone who is subscribed to your services. Each notification event will include a link to source, which will define the event. */ - get: { + post: { parameters: { query?: never; header?: never; - path: { - /** @description Source event of the notification */ - sourceEvent: string; - }; + path?: never; cookie?: never; }; - requestBody?: never; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostNotifications']; + }; + }; responses: { /** @description Created */ 200: { @@ -34,37 +37,24 @@ export interface paths { }; content: { 'application/vnd.deere.axiom.v3+json': { - values?: unknown; links?: unknown; + /** + * Format: int32 + * @example 1 + */ + total?: number; }; }; }; - 400: components['schemas']['Error']; - /** @description Not authorized */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Not Found */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; }; }; - put?: never; - post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; - '/notificationEvents': { + '/notificationEvents/{sourceEvent}': { parameters: { query?: never; header?: never; @@ -73,22 +63,22 @@ export interface paths { }; get?: never; put?: never; + post?: never; /** - * Create Notification Event - * @description This resource creates an event that Operations Center will use to generate notifications. These notifications will be received by anyone who is subscribed to your services. Each notification event will include a link to source, which will define the event. + * Delete a Notification Event + * @description This resource deletes a notification event that was previously posted to MJD as well as any generated notifications. */ - post: { + delete: { parameters: { query?: never; header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['PostNotifications']; + path: { + /** @description Source Event */ + sourceEvent: components['parameters']['sourceEvent']; }; + cookie?: never; }; + requestBody?: never; responses: { /** @description Created */ 200: { @@ -97,7 +87,6 @@ export interface paths { }; content: { 'application/vnd.deere.axiom.v3+json': { - links?: unknown; /** * Format: int32 * @example 1 @@ -108,33 +97,29 @@ export interface paths { }; }; }; - delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; - '/notificationEvents/{sourceEvent}': { + '/notifications/{sourceEvent}': { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; - get?: never; - put?: never; - post?: never; /** - * Delete a Notification Event - * @description This resource deletes a notification event that was previously posted to MJD as well as any generated notifications. + * Fetch single notification. + * @description Retrieve a single notification by source event. */ - delete: { + get: { parameters: { query?: never; header?: never; path: { - /** @description Source Event */ - sourceEvent: components['parameters']['sourceEvent']; + /** @description Source event of the notification */ + sourceEvent: string; }; cookie?: never; }; @@ -147,16 +132,31 @@ export interface paths { }; content: { 'application/vnd.deere.axiom.v3+json': { - /** - * Format: int32 - * @example 1 - */ - total?: number; + values?: unknown; + links?: unknown; }; }; }; + 400: components['schemas']['Error']; + /** @description Not authorized */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; }; }; + put?: never; + post?: never; + delete?: never; options?: never; head?: never; patch?: never; @@ -256,27 +256,66 @@ export interface components { */ invalidValue?: string; }; - ResponseDetails: { + GetAvailableLinks: { /** - * @description Event ID - * @example b22956b7-0b43-40ea-a396-1fdc816ebb58 + * @description Contribution Definitions Link. + * @example https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6 */ - eventId?: string; + contribution?: unknown; /** - * @description Event status code. - * @example SUCCESS + * @description Machines Link. + * @example https://sandboxapi.deere.com/platform/machines/317783 */ - eventStatusCode?: string; + targetResource?: unknown; + }; + GetResponse: { /** - * @description Number of notifications expected to generate from this event. - * @example 2 + * @description Event title. + * @example Some Title */ - expectedNotificationCount?: number; + title?: string; /** - * @description Actual number of notifications generated from this event. - * @example 2 + * @description GeoJSON representation of the location. + * @example See sample response below. */ - actualNotificationCount?: number; + geometries?: Record; + /** + * @description Event description. + * @example Detailed event text. + */ + text?: string; + /** + * @description Event severity. + * @example HIGH + */ + severity?: string; + /** + * @description Event type. + * @example AGRONOMY + */ + eventType?: string; + /** + * @description Notification Event GUID + * @example 2acf8953-8eaf-4487-9cd0-391059fcbfcf + */ + sourceEvent?: Record; + /** + * @description Minimized version of notification having additionalDetails, notificationState, targetResourceOrgId, dateCreated and link to targetResource. + * @example See sample response below. + */ + minimizedNotifications?: Record; + }; + Links: { + /** + * @description Contribution Definitions Link. + * @example https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID + */ + contributionDefinition?: unknown; + /** + * @description Fields Link. + * @example https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID + */ + targetResource?: unknown; }; PostNotifications: { /** @@ -328,90 +367,51 @@ export interface components { links?: string; }; }; - GetResponse: { - /** - * @description Event title. - * @example Some Title - */ - title?: string; - /** - * @description GeoJSON representation of the location. - * @example See sample response below. - */ - geometries?: Record; - /** - * @description Event description. - * @example Detailed event text. - */ - text?: string; - /** - * @description Event severity. - * @example HIGH - */ - severity?: string; - /** - * @description Event type. - * @example AGRONOMY - */ - eventType?: string; - /** - * @description Notification Event GUID - * @example 2acf8953-8eaf-4487-9cd0-391059fcbfcf - */ - sourceEvent?: Record; - /** - * @description Minimized version of notification having additionalDetails, notificationState, targetResourceOrgId, dateCreated and link to targetResource. - * @example See sample response below. - */ - minimizedNotifications?: Record; - }; - GetAvailableLinks: { + ResponseDetails: { /** - * @description Contribution Definitions Link. - * @example https://sandboxapi.deere.com/platform/contributionDefinitions/3c5be4a7-a839-41c2-8b88-7fc4587a83f6 + * @description Event ID + * @example b22956b7-0b43-40ea-a396-1fdc816ebb58 */ - contribution?: unknown; + eventId?: string; /** - * @description Machines Link. - * @example https://sandboxapi.deere.com/platform/machines/317783 + * @description Event status code. + * @example SUCCESS */ - targetResource?: unknown; - }; - Links: { + eventStatusCode?: string; /** - * @description Contribution Definitions Link. - * @example https://sandboxapi.deere.com/platform/contributionDefinitions/YOUR_DEFINITION_ID + * @description Number of notifications expected to generate from this event. + * @example 2 */ - contributionDefinition?: unknown; + expectedNotificationCount?: number; /** - * @description Fields Link. - * @example https://sandboxapi.deere.com/platform/organizations/ORGANIZATION_ID/fields/FIELD_ID + * @description Actual number of notifications generated from this event. + * @example 2 */ - targetResource?: unknown; + actualNotificationCount?: number; }; }; responses: never; parameters: { - /** @description Source Event */ - sourceEvent: string; - /** @description Organization */ - orgId: string; - /** @description Criteria to search Notifications before event GUID */ - before: Record; /** @description Criteria to search Notifications after event GUID. */ after: Record; + /** @description Criteria to search Notifications before event GUID */ + before: Record; /** @description Number of records, maximum up to 100 supported. */ count: number; + /** @description Criteria to search for end date in time range. */ + endDate: string; /** @description Criteria to search for multiple (comma separated) event types. */ eventTypes: Record; + /** @description Organization */ + orgId: string; /** @description Criteria to search for multiple severities. */ severities: Record; + /** @description Source Event */ + sourceEvent: string; /** @description Criteria to search for multiple event GUID. */ sourceEvents: Record; /** @description Criteria to search for start date in time range. */ startDate: string; - /** @description Criteria to search for end date in time range. */ - endDate: string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/operators.ts b/src/types/generated/operators.ts index d2cd84c..ef0ea5f 100644 --- a/src/types/generated/operators.ts +++ b/src/types/generated/operators.ts @@ -250,6 +250,21 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + ContentType: unknown; + GetAvailableLinks: { + /** + * @description Self Link + * @example https://sandboxapi.deere.com/platform/organizations/123456/operators + */ + self?: unknown; + }; + GetOperatorAvailableLinks: { + /** + * @description Self Link + * @example https://sandboxapi.deere.com/platform/organizations/123456/operators/0235d40e-02d0-44cb-a126-fff21173fc1f + */ + self?: unknown; + }; GetResponseDetails: { /** * @description Operator ID @@ -303,7 +318,6 @@ export interface components { */ name?: string; }; - ContentType: unknown; PutOperator: { /** * @description Operator Name @@ -316,33 +330,19 @@ export interface components { */ archived?: string; }; - GetAvailableLinks: { - /** - * @description Self Link - * @example https://sandboxapi.deere.com/platform/organizations/123456/operators - */ - self?: unknown; - }; - GetOperatorAvailableLinks: { - /** - * @description Self Link - * @example https://sandboxapi.deere.com/platform/organizations/123456/operators/0235d40e-02d0-44cb-a126-fff21173fc1f - */ - self?: unknown; - }; }; responses: never; parameters: { - /** @description Organization ID */ - orgId: string; - /** @description Operator ID */ - id: string; /** @description Include operator metadata in the response. */ embed: string; - /** @description Filter operators by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE */ - recordFilter: string; + /** @description Operator ID */ + id: string; /** @description Start of the range for timestamp filtering */ lastModifiedTime: Record; + /** @description Organization ID */ + orgId: string; + /** @description Filter operators by status. Possible values ACTIVE or ALL or ARCHIVED Default - ACTIVE */ + recordFilter: string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/organizations.ts b/src/types/generated/organizations.ts index a9e0d29..8fcccfe 100644 --- a/src/types/generated/organizations.ts +++ b/src/types/generated/organizations.ts @@ -226,6 +226,33 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + Organization: { + /** + * @description A new x-deere-signature response header will be included if the response has changed since last api call. + * @example 3b5392015e4b4e1c92013026f47109bb + */ + 'x-deere-signature'?: string; + /** + * @description The organization ID. + * @example 1234 + */ + id?: string; + /** + * @description The organization name. + * @example Smith Farms + */ + name?: string; + /** + * @description The organization type: customer or dealer. + * @example customer + */ + type?: string; + /** + * @description TRUE means that the user is a member of the org. + * @example true + */ + member?: boolean; + }; OrganizationLink: { /** * @description Link to organization @@ -260,33 +287,6 @@ export interface components { */ manage_connections?: unknown; }; - Organization: { - /** - * @description A new x-deere-signature response header will be included if the response has changed since last api call. - * @example 3b5392015e4b4e1c92013026f47109bb - */ - 'x-deere-signature'?: string; - /** - * @description The organization ID. - * @example 1234 - */ - id?: string; - /** - * @description The organization name. - * @example Smith Farms - */ - name?: string; - /** - * @description The organization type: customer or dealer. - * @example customer - */ - type?: string; - /** - * @description TRUE means that the user is a member of the org. - * @example true - */ - member?: boolean; - }; OrganizationView: { /** * @description The organization ID. @@ -366,20 +366,20 @@ export interface components { }; responses: never; parameters: { - /** @description Returns a list of organizations of which a particular user is a member. */ - UserName: string; - /** @description User Name. */ - UserName2: string; /** @description Returns the name of the organization that corresponds with the given organization ID. */ OrgId: string; + /** @description Organization */ + OrgIdGet: string; /** @description Returns a list of organizations that contain the given string in their name. */ OrgName: string; + /** @description Returns a list of organizations of which a particular user is a member. */ + UserName: string; + /** @description User Name. */ + UserName2: string; /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ 'X-deere-signature': string; /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ 'X-deere-signature2': string; - /** @description Organization */ - OrgIdGet: string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/partnerships.ts b/src/types/generated/partnerships.ts index 3918d4b..0fd579b 100644 --- a/src/types/generated/partnerships.ts +++ b/src/types/generated/partnerships.ts @@ -236,13 +236,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** @description A list of errors */ - Errors: { - /** @example Errors */ - '@type'?: string; - errors?: components['schemas']['Error'][]; - otherAttributes?: Record; - }; /** @description An error object */ Error: { /** @example Error */ @@ -261,16 +254,12 @@ export interface components { /** @example 1234123412341234 */ invalidValue?: string; }; - /** @description A list of partnerships */ - Partnerships: { - links?: components['schemas']['PartnershipsLink'][]; - /** - * Format: int64 - * @description Number of partnerships found. - * @example 1 - */ - total?: number; - values?: components['schemas']['Partnership'][]; + /** @description A list of errors */ + Errors: { + /** @example Errors */ + '@type'?: string; + errors?: components['schemas']['Error'][]; + otherAttributes?: Record; }; /** @description A partnership object */ Partnership: { @@ -285,6 +274,35 @@ export interface components { */ status?: string; }; + PartnershipId: { + /** + * @description View the status of the partnership + * @example PENDING + */ + status?: string; + }; + /** @description A list of partnerships */ + Partnerships: { + links?: components['schemas']['PartnershipsLink'][]; + /** + * Format: int64 + * @description Number of partnerships found. + * @example 1 + */ + total?: number; + values?: components['schemas']['Partnership'][]; + }; + /** @description A list of partnerships */ + PartnershipsId: { + links?: components['schemas']['PartnershipsLink'][]; + /** + * Format: int64 + * @description Number of partnerships found. + * @example 1 + */ + total?: number; + values?: components['schemas']['PartnershipId'][]; + }; PartnershipsLink: { /** * @description Organizations Link. @@ -307,18 +325,24 @@ export interface components { */ contactInvitation?: unknown; }; - /** @description A list of partnerships */ - PartnershipsId: { - links?: components['schemas']['PartnershipsLink'][]; + PermissionPostValue: { /** - * Format: int64 - * @description Number of partnerships found. - * @example 1 + * @description The type of permission. + * @example viewDetailsAndMapLocation */ - total?: number; - values?: components['schemas']['PartnershipId'][]; + type?: string; + /** + * @description Indicates whether this permission has been granted to the partner org. Possible values are: Not Given, Requested, and Approved. + * @example requested + */ + status?: string; }; - PartnershipId: { + PermissionValue: { + /** + * @description The type of permission. + * @example prescription Files + */ + type?: string; /** * @description View the status of the partnership * @example PENDING @@ -343,45 +367,12 @@ export interface components { */ requestPermissions?: unknown; }; - PermissionValue: { - /** - * @description The type of permission. - * @example prescription Files - */ - type?: string; - /** - * @description View the status of the partnership - * @example PENDING - */ - status?: string; - }; /** @description A list of permissions */ PermissionsPost: { values?: components['schemas']['PermissionPostValue'][]; }; - PermissionPostValue: { - /** - * @description The type of permission. - * @example viewDetailsAndMapLocation - */ - type?: string; - /** - * @description Indicates whether this permission has been granted to the partner org. Possible values are: Not Given, Requested, and Approved. - * @example requested - */ - status?: string; - }; }; responses: { - /** @description Not found */ - TokenNotFound: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; - }; - }; /** @description Request body was invalid */ BadCreateRequests: { headers: { @@ -398,12 +389,21 @@ export interface components { }; content?: never; }; + /** @description Not found */ + TokenNotFound: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; }; parameters: { - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signature': string; /** @description Token Id */ PartnershipId: string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature': string; }; requestBodies: never; headers: never; diff --git a/src/types/generated/products.ts b/src/types/generated/products.ts index 9902b42..c2a0809 100644 --- a/src/types/generated/products.ts +++ b/src/types/generated/products.ts @@ -4,7 +4,7 @@ */ export interface paths { - '/organizations/{organizationId}/varieties': { + '/activeIngredients': { parameters: { query?: never; header?: never; @@ -12,44 +12,32 @@ export interface paths { cookie?: never; }; /** - * View varieties for an org - * @description This endpoint will retrieve a collection of varieties for the specified org. + * List of available active ingredients + * @description Returns a list of all available active ingredients. */ get: { parameters: { query?: { - /** @description Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties. */ - status?: components['parameters']['ArchiveStatus']; - /** @description An embeddable list of properties which are optional by default. */ - embed?: components['parameters']['VarietyEmbed']; + /** @description Filters the results by the provided entity type. Example: CHEMICAL */ + entityType?: components['parameters']['EntityTypeQueryParam']; }; header?: never; - path: { - /** @description The identifier of the Organization. */ - organizationId: components['parameters']['OrganizationID']; - }; + path?: never; cookie?: never; }; requestBody?: never; responses: { - /** @description A collection of your org varieties. If any of the supported embeds are used, the associated data will be present as a field in the variety. */ + /** @description List of available active ingredients. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['VarietyCollection']; - }; - }; - /** @description The user has not been provided access to the varieties for this org */ - 403: { - headers: { - [name: string]: unknown; + 'application/vnd.deere.axiom.v3+json': components['schemas']['ActiveIngredientsCollection']; }; - content?: never; }; - /** @description The specified organization does not exist */ - 404: { + /** @description The user does not have access to the list of active ingredients. */ + 401: { headers: { [name: string]: unknown; }; @@ -58,74 +46,14 @@ export interface paths { }; }; put?: never; - /** - * Add a variety - * @description This endpoint will add a custom variety into the organization. Its name+cropName must be unique within your organization. Its crop name must be a supported crop name (see /cropTypes). There are a number of crop names that are deprecated in the system. If the crop name is set to one of these, then it will be mapped to its corresponding valid crop name. Additionally, POST can be used for supporting offline creation of varieties from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists. - */ - post: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The identifier of the Organization. */ - organizationId: components['parameters']['OrganizationID']; - }; - cookie?: never; - }; - /** @description The product to add. */ - requestBody?: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['PostVariety']; - }; - }; - responses: { - 201: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; - }; - }; - /** @description Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid. */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; - }; - }; - /** @description The user has not been provided write access to the variety list for the org */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description The specified organization does not exist */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description A product already exists in this org with the specified reference Erid */ - 409: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; + post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; - '/organizations/{organizationId}/varieties/{erid}': { + '/chemicals': { parameters: { query?: never; header?: never; @@ -133,46 +61,58 @@ export interface paths { cookie?: never; }; /** - * View a specific variety - * @description This endpoint will return the variety with the specified erid. + * Reference list of all known chemicals + * @description List of all chemicals from industry data sources, such as CDMS. */ get: { parameters: { query?: { - /** @description An embeddable list of properties which are optional by default. */ - embed?: components['parameters']['VarietyEmbed']; + /** @description performs a fuzzy search on product name, manufacturer, and chemical type. The search string must be at least 3 characters long. */ + searchString?: string; + /** @description Specifies the registration number of the chemical based on the country or region/state of use. */ + chemicalType?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** @description Specifies the name of the chemical in the global reference list. */ + productName?: string; + /** @description Specifies the product manufacturer name of the chemical based on the region being used. */ + brandName?: string; + /** @description Specifies the registration number of the chemical based on the region of use. */ + registration?: string; + /** @description Specifies the source system product id of the chemical based on the country of use. */ + sourceSystemProductId?: string; + /** @description Specifies the region the chemical data belongs to. Some data may not be available in certain regions and data will not be included in the response. */ + countryCode?: string; }; header?: never; - path: { - /** @description The identifier of the Organization. */ - organizationId: components['parameters']['OrganizationID']; - /** - * @description A unique identifier for an entity formatted as a uuid. - * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff - */ - erid: components['parameters']['ERID']; - }; + path?: never; cookie?: never; }; requestBody?: never; responses: { - /** @description A variety object */ + /** @description A collection of products matching the specified search criteria. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Variety']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceChemicalCollection']; }; }; - /** @description The user does not have sufficient privileges to access varieties in this org */ + /** @description The user does not have access to manage products. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description There is no variety matching the specified Erid */ + /** @description No chemical found with this country code. */ 404: { headers: { [name: string]: unknown; @@ -181,17 +121,30 @@ export interface paths { }; }; }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/chemicals/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; /** - * Update a single variety - * @description This endpoint allows the custom variety to be renamed, made active/archived, or associated to a different manufacturer or crop type. + * Get a single reference chemical + * @description Single chemical from industry data sources, such as CDMS. */ - put: { + get: { parameters: { query?: never; header?: never; path: { - /** @description The identifier of the Organization. */ - organizationId: components['parameters']['OrganizationID']; /** * @description A unique identifier for an entity formatted as a uuid. * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff @@ -200,39 +153,25 @@ export interface paths { }; cookie?: never; }; - /** @description The updated variety object. */ - requestBody?: { - content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['PutVariety']; - }; - }; + requestBody?: never; responses: { - /** @description The update was completed successfully */ - 204: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/vnd.deere.axiom.v3+json': unknown; - }; - }; - /** @description Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid */ - 400: { + /** @description A single chemical matching the specified erid. */ + 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceChemical']; }; }; - /** @description The user does not have sufficient privileges to update varieties in this org */ + /** @description The user does not have access to manage products. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description There is no variety matching the specified Erid */ + /** @description No chemical found matching this erid. */ 404: { headers: { [name: string]: unknown; @@ -241,6 +180,7 @@ export interface paths { }; }; }; + put?: never; post?: never; delete?: never; options?: never; @@ -248,7 +188,7 @@ export interface paths { patch?: never; trace?: never; }; - '/varieties/{erid}/associateToOrg/{organizationId}': { + '/chemicals/{erid}/associateToOrg/{organizationId}': { parameters: { query?: never; header?: never; @@ -258,8 +198,8 @@ export interface paths { get?: never; put?: never; /** - * Adds a single reference variety to organization - * @description This endpoint will associate a reference variety to your organization from the global reference list. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden. + * Adds a single reference chemical to organization + * @description This endpoint will associate a reference chemical to your organization from the global reference list. The reference chemicals are immutable, however, they can still be archived or made available. If a reference chemical is created as a carrier, it cannot be changed thereafter. The registration of a reference chemical can also be updated. The response headers from the GET endpoints will include the attributes that can be overridden. */ post: { parameters: { @@ -279,17 +219,17 @@ export interface paths { /** @description The product to add. */ requestBody?: { content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductPointerRequest']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostReferenceChemical']; }; }; responses: { - /** @description Successful association of reference variety to org. */ + /** @description Successful association of reference chemical to org. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductOverrideStatus'][]; + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; }; }; /** @description Unresolvable name conflict or other error occurred. */ @@ -315,20 +255,13 @@ export interface paths { }; content?: never; }; - /** @description Organization does not exist. */ + /** @description Organization does not exist */ 404: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description A product already exists in this org with the specified erid. */ - 409: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; }; }; delete?: never; @@ -337,7 +270,7 @@ export interface paths { patch?: never; trace?: never; }; - '/varieties': { + '/chemicals/{erid}/documents': { parameters: { query?: never; header?: never; @@ -345,38 +278,31 @@ export interface paths { cookie?: never; }; /** - * Search reference catalog varieties - * @description This endpoint searches the reference catalog for varieties that match the given search criteria. This data can be used in a subsequent request to create a variety in an organization. Results are limited to 100 items. + * Reference list of documents for an associated chemical + * @description List of all the documents for a chemical from industry data sources, such as CDMS. */ get: { parameters: { - query?: { - /** @description Performs a fuzzy search on variety and manufacturer name. The search string must be at least 3 characters long. */ - searchString?: string; - /** @description Filters the results by crop id (see the /cropTypes API). */ - cropName?: string; - /** @description Specifies the name of the variety from the global reference list. */ - productName?: string; - /** @description Specifies the product manufacturer name of the variety based on the region being used. */ - brandName?: string; - /** @description Specifies the source system product id of the variety based on the country of use. */ - sourceSystemProductId?: string; - /** @description Specifies the region the variety data belongs to. Some data may not be available in certain regions and data will not be included in the response. */ - countryCode?: string; - }; + query?: never; header?: never; - path?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; cookie?: never; }; requestBody?: never; responses: { - /** @description A collection of reference varieties matching the specified search criteria. */ + /** @description A collection of documents for the specified chemical. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVarietyCollection']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['DocumentCollection_Chemicals']; }; }; /** @description The user does not have access to manage products. */ @@ -386,13 +312,6 @@ export interface paths { }; content?: never; }; - /** @description No variety found with this country code. */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; }; }; put?: never; @@ -403,18 +322,24 @@ export interface paths { patch?: never; trace?: never; }; - '/varieties/{erid}': { + '/chemicals/{erid}/setOverridesForOrg/{organizationId}': { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; /** - * Get a single reference variety. - * @description Single variety from industry data sources, such as CDMS. + * Sets organizational attributes such as isCarrier, archived, registration, etc + * @description This endpoint will set attribute overrides while importing a reference chemical to your organization. The reference chemicals are immutable, however, they can still be archived or made available. Once set to true, the carrier attribute cannot be set to false. The registration of a reference chemical can be updated. The response headers from the GET endpoints will include the attributes that can be overridden. */ - get: { + patch: { parameters: { query?: never; header?: never; @@ -424,28 +349,51 @@ export interface paths { * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff */ erid: components['parameters']['ERID']; + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; }; cookie?: never; }; - requestBody?: never; + /** @description The product to add. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['CommonReferenceChemical']; + }; + }; responses: { - /** @description A single variety matching the specified erid. */ + /** @description Successful update of overrides of reference chemical associated to your org. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVariety']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductOverrideStatus_Chemicals'][]; }; }; - /** @description The user does not have access to manage products. */ + /** @description Unresolvable name conflict or other error occurred. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * Format: int64 + * @example 1 + */ + total?: number; + errors?: components['schemas']['Errors'][]; + }; + }; + }; + /** @description Invalid access to reference product associated to organization */ 403: { headers: { [name: string]: unknown; }; content?: never; }; - /** @description No variety found matching this erid. */ + /** @description Organization does not exist */ 404: { headers: { [name: string]: unknown; @@ -454,15 +402,9 @@ export interface paths { }; }; }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; trace?: never; }; - '/varieties/{erid}/documents': { + '/documents/{erid}': { parameters: { query?: never; header?: never; @@ -470,8 +412,8 @@ export interface paths { cookie?: never; }; /** - * Reference list of documents for an associated seed variety. - * @description List of all the documents for a variety from industry data sources, such as CDMS. + * Document details w/ pdf file + * @description Document details for a product with embedded pdf file (gzip+base64). */ get: { parameters: { @@ -488,13 +430,13 @@ export interface paths { }; requestBody?: never; responses: { - /** @description A collection of documents for the specified seed variety. */ + /** @description Document details with included pdf file. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['DocumentCollection']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['DocumentWithPdfFile']; }; }; /** @description The user does not have access to manage products. */ @@ -504,6 +446,13 @@ export interface paths { }; content?: never; }; + /** @description Not Found. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; }; }; put?: never; @@ -514,7 +463,268 @@ export interface paths { patch?: never; trace?: never; }; - '/varieties/{erid}/setOverridesForOrg/{organizationId}': { + '/fertilizers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Reference list of all known fertilizers + * @description List of all fertilizers from industry data sources, such as CDMS. + */ + get: { + parameters: { + query?: { + /** @description performs a fuzzy search on product name, manufacturer, and fertilizer type. The search string must be at least 3 characters long. */ + searchString?: string; + /** @description Specifies the registration number of the fertilizer based on the country or region/state of use. */ + fertilizerType?: 'FERTILIZER' | 'MANURE'; + /** @description Specifies the name of the fertilizer in the global reference list. */ + productName?: string; + /** @description Specifies the product manufacturer name of the fertilizer based on the region being used. */ + brandName?: string; + /** @description Specifies the registration number of the fertilizer based on the region of use. */ + registration?: string; + /** @description Specifies the source system product id of the fertilizer based on the country of use. */ + sourceSystemProductId?: string; + /** @description Specifies the region the fertilizer data belongs to. Some data may not be available in certain regions and data will not be included in the response. */ + countryCode?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of reference fertilizers matching the specified search criteria. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceFertilizerCollection']; + }; + }; + /** @description The user does not have access to manage products. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description No fertilizer found with this country code. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/fertilizers/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Single reference fertilizer + * @description Single fertilizer from industry data sources, such as CDMS. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A single reference fertilizer matching the specified erid. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceFertilizer']; + }; + }; + /** @description The user does not have access to manage products. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description No fertilizer found matching this erid. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/fertilizers/{erid}/associateToOrg/{organizationId}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Adds a single reference fertilizer to organization + * @description This endpoint will associate a reference fertilizer to your organization from the global reference list. The reference fertilizers are immutable, however, they can still be archived or made available. If a reference fertilizer is created as a carrier, it cannot be changed thereafter. The registration of a reference fertilizer can also be updated. The response headers from the GET endpoints will include the attributes that can be overridden. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The product to add. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostReferenceFertilizer']; + }; + }; + responses: { + /** @description Successful association of reference fertilizer to org. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; + }; + }; + /** @description Unresolvable name conflict or other error occurred. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * Format: int64 + * @example 1 + */ + total?: number; + errors?: components['schemas']['Errors'][]; + }; + }; + }; + /** @description Invalid access to products for organization */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/fertilizers/{erid}/documents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Reference list of documents for an associated fertilizer + * @description List of all the documents for a fertilizer from industry data sources, such as CDMS. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of documents for the specified fertilizer. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['DocumentCollection_Fertilizers']; + }; + }; + /** @description The user does not have access to manage products. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/fertilizers/{erid}/setOverridesForOrg/{organizationId}': { parameters: { query?: never; header?: never; @@ -528,8 +738,8 @@ export interface paths { options?: never; head?: never; /** - * Sets organizational attributes such as isCarrier, archived, registration, etc. - * @description This endpoint will set attribute overrides while importing a reference variety to your organization. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden. + * Sets organizational attributes such as isCarrier, archived, registration, etc + * @description This endpoint will set attribute overrides while importing a reference fertilizer to your organization. The reference fertilizers are immutable, however, they can still be archived or made available. Once set to true, the carrier attribute cannot be set to false. The registration of a reference fertilizer can be updated. The response headers from the GET endpoints will include the attributes that can be overridden. */ patch: { parameters: { @@ -549,17 +759,17 @@ export interface paths { /** @description The product to add. */ requestBody?: { content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['CommonProductPointerRequest']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['CommonPostReferenceFertilizer']; }; }; responses: { - /** @description Successful update of overrides of reference variety associated to your org. */ + /** @description Successful update of overrides of reference fertilizer associated to your org. */ 200: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductOverrideStatus'][]; + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductOverrideStatus_Fertilizers'][]; }; }; /** @description Unresolvable name conflict or other error occurred. */ @@ -596,69 +806,4115 @@ export interface paths { }; trace?: never; }; -} -export type webhooks = Record; -export interface components { - schemas: { - BaseResourceWithoutLink: { - /** @example BaseResource */ - '@type'?: string; - /** - * Format: uuid - * @description Primary identifier for resource. - * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 - */ - id?: string; + '/organizations/{organizationId}/chemicals': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve unified list of custom and reference chemicals in your organization. */ + get: { + parameters: { + query?: { + /** @description Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties. */ + status?: components['parameters']['ArchiveStatus']; + /** @description An embeddable list of properties which are optional by default. */ + embed?: components['parameters']['ChemicalEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of your org chemicals. If any of the supported embeds are used, the associated data will be present as a field in the chemical. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ChemicalCollection']; + }; + }; + /** @description The user has not been provided access to the products for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + /** + * Add chemical + * @description This endpoint will add a custom chemical into the organization. Its name+type must be unique within your organization, unless carrier is set to true. If carrier is set to true, then type is disregarded. A chemical's carrier property cannot be changed to false once set to true. A chemical cannot be archived if it is in an active tank mix or dry blend. If a chemical is marked as archived and is used in a tank mix/dry blend, if the tank mix/dry blend is made available, then this chemical will also be made available. If passing in a liquid weight or weight unit, material classification should be set to LIQUID. Additionally, POST can be used for supporting offline creation of chemicals from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The product to add. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostChemical']; + }; + }; + responses: { + /** @description Create Chemicals */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; + }; + }; + /** @description Schema validation error. Missing one or more of the required fields (name, company, type, material classification), or name does not meet length requirements. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user has not been provided write access to the product list for the org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A product already exists in this org with the requested Erid */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/chemicals/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve a specific chemical from an organization's asset list. */ + get: { + parameters: { + query?: { + /** @description An embeddable list of properties which are optional by default. */ + embed?: components['parameters']['ChemicalEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A chemical matching the requested erid. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Chemical']; + }; + }; + /** @description The user does not have sufficient privileges to access products in this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description There is no product matching the specified Erid */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + /** + * Update a single chemical + * @description Allows the custom chemical to be renamed, made active/archived, or flagged as a carrier. + */ + put: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The updated chemical object. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PutChemical']; + }; + }; + responses: { + /** @description The update was completed successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + /** @description An invalid type or material classification was specified. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user does not have sufficient privileges to update products in this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description There is no product matching the specified Erid */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/dryBlends': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve dry blends for an org */ + get: { + parameters: { + query?: { + /** @description The list of Rels, for which objects should be included in the response payload. */ + embed?: components['parameters']['DryBlendEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of dry blends. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['DryBlendCollection']; + }; + }; + /** @description The user has not been provided access to the products for this org. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + /** + * Create a dry blend + * @description Add a dry blend to the asset list of an organization. Any chemicals or fertilizers in the dry blend must exist in the organization before the dry blend is persisted. The name of the dry blend must be unique in your organization. Additionally, POST can be used for supporting offline creation of dry blends from e.g. a mobile app, by sending a payload with an `erid` generated by the client. If an `erid` is present in the payload, the service checks the database for that `erid`. In case no record is found, a new one is created with that `erid` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `erid` already exists. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostDryBlend']; + }; + }; + responses: { + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; + }; + }; + /** @description Missing a required field, or an invalid value is included in a field. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user is not allowed to manage products for this org. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A dry blend already exists in this org with the requested erid. */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/dryBlends/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieves a specific dry blend */ + get: { + parameters: { + query?: { + /** @description The list of Rels, for which objects should be included in the response payload. */ + embed?: components['parameters']['DryBlendEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A dry blend object. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['DryBlend']; + }; + }; + /** @description The user has not been provided access to the products for this org. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist, or does not contain the requested dry blend. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + /** + * Update a dry blend + * @description Allows updates to be made to the name, archival status, and components of a dry blend. + */ + put: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostDryBlend']; + }; + }; + responses: { + /** @description The update was completed successfully. */ + 204: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + /** @description Missing a required field, or an invalid value is included in a field. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user is not allowed to manage products for this org. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified dry blend does not exist in this organization. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/fertilizers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve unified list of custom and reference fertilizers in your organization. */ + get: { + parameters: { + query?: { + /** @description Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties. */ + status?: components['parameters']['ArchiveStatus']; + /** @description An embeddable list of properties which are optional by default. */ + embed?: components['parameters']['FertilizerEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of your org fertilizers. If any of the supported embeds are used, the associated data will be present as a field in the fertilizer.s */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['FertilizerCollection']; + }; + }; + /** @description The user has not been provided access to the products for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + /** + * Add fertilizer + * @description This endpoint will add a custom fertilizer into the organization. Its name+type must be unique within your organization, unless carrier is set to true. If carrier is set to true, then type is disregarded. A fertilizer's carrier property cannot be changed to false once set to true. A fertilizer cannot be archived if it is in an active tank mix or dry blend. If a fertilizer is marked as archived and is used in a tank mix/dry blend, if the tank mix/dry blend is made available, then this fertilizer will also be made available. If passing in a liquid weight or weight unit, material classification should be set to LIQUID. Additionally, POST can be used for supporting offline creation of fertilizers from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The product to add. If an ERID is specified in the request, it should exist as part of the reference data set (/fertilizers); this ERID will be unique only within the context of an organization. If the ERID is omitted, a uuid will be assigned; in this case, the item will be considered a custom product, and there will be no association to any reference product. Using the reference Erid when adding a product will help to maintain a common parentage of products across organizations. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostFertilizer']; + }; + }; + responses: { + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; + }; + }; + /** @description Schema validation error. Missing one or more of the required fields (name, company, type, material classification), or name does not meet length requirements. */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user has not been provided write access to the product list for the org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A product already exists in this org with the requested Erid */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/fertilizers/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve a specific fertilizer from an organization's asset list. */ + get: { + parameters: { + query?: { + /** @description An embeddable list of properties which are optional by default. */ + embed?: components['parameters']['FertilizerEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A product matching the requested Erid */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Fertilizer_Fertilizers']; + }; + }; + /** @description The user does not have sufficient privileges to access products in this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description There is no product matching the specified Erid */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + /** + * Update a single fertilizer + * @description Allows the fertilizer custom to be renamed, made active/archived, or flagged as a carrier. + */ + put: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + /** @description The updated fertilizer object. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PutFertilizer']; + }; + }; + responses: { + /** @description The update was completed successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + /** @description An invalid type or material classification was specified */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user does not have sufficient privileges to update products in this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description There is no product matching the specified Erid */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/productCompanies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve product companies for an org. + * @description A unified list of custom and reference product companies in your organization. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description An collection of Companies */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ProductCompany'][]; + }; + }; + /** @description The user has not been provided access to the products for this org. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/tankMixes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve tank mixes for an org + * @description This endpoint will retrieve tank mixes for an org. + */ + get: { + parameters: { + query?: { + /** @description The list of Rels, for which objects should be included in the response payload. */ + embed?: components['parameters']['TankMixEmbed']; + /** @description Filter results based on status */ + recordFilter?: components['parameters']['RecordFilter']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of tank mixes */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + values?: unknown; + }; + }; + }; + /** @description The user has not been provided access to the products for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + /** + * Create a tank mix + * @description Add a tank mix to the asset list of an organization. Any chemicals or fertilizers in the tank mix must exist in the organization before the tank mix is persisted. The name of the tank mix must be unique in your organization. Additionally, POST can be used for supporting offline creation of tank mixes from e.g. a mobile app, by sending a payload with an `orgUniqueErid` generated by the client. If an `orgUniqueErid` is present in the payload, the service checks the database for that `orgUniqueErid`. In case no record is found, a new one is created with that `orgUniqueErid` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `orgUniqueErid` already exists. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['TankMix']; + }; + }; + responses: { + /** @description Create Tank mix */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; + }; + }; + /** @description Missing a required field, or an invalid value is included in a field. */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user is not allowed to manage products for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A tank mix already exists in this org with the requested orgUniqueErid */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/tankMixes/{id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View a specific tank mix + * @description This endpoint will retrieve a specific tank mix. + */ + get: { + parameters: { + query?: { + /** @description Embeds extra information in the tank mix response */ + embed?: components['parameters']['Embed2_TankMix']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** @description TankMixes id. */ + id: components['parameters']['Id']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A tank mix object */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + values?: unknown; + }; + }; + }; + /** @description The user has not been provided access to the products for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist, or does not contain the requested tank mix */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + /** + * Update a tank mix + * @description This endpoint allows to update the metadata and the composition of a tank mix. + */ + put: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** @description TankMixes id. */ + id: components['parameters']['Id']; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['TankMix']; + }; + }; + responses: { + /** @description The update was completed successfull */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + /** @description Missing a required field, or an invalid value is included in a field. */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user is not allowed to manage products for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified tank mix does not exist in this organization */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/varieties': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View varieties for an org + * @description This endpoint will retrieve a collection of varieties for the specified org. + */ + get: { + parameters: { + query?: { + /** @description Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties. */ + status?: components['parameters']['ArchiveStatus']; + /** @description An embeddable list of properties which are optional by default. */ + embed?: components['parameters']['VarietyEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of your org varieties. If any of the supported embeds are used, the associated data will be present as a field in the variety. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['VarietyCollection']; + }; + }; + /** @description The user has not been provided access to the varieties for this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + /** + * Add a variety + * @description This endpoint will add a custom variety into the organization. Its name+cropName must be unique within your organization. Its crop name must be a supported crop name (see /cropTypes). There are a number of crop names that are deprecated in the system. If the crop name is set to one of these, then it will be mapped to its corresponding valid crop name. Additionally, POST can be used for supporting offline creation of varieties from e.g. a mobile app, by sending a payload with an `id` generated by the client. If an `id` is present in the payload, the service checks the database for that `id`. In case no record is found, a new one is created with that `id` and the request is responded with 201. Otherwise no creation happens and the request is responded with 409 and error message that a resource with that `id` already exists. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The product to add. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PostVariety']; + }; + }; + responses: { + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['responses']['Created']; + }; + }; + /** @description Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user has not been provided write access to the variety list for the org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The specified organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A product already exists in this org with the specified reference Erid */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/organizations/{organizationId}/varieties/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * View a specific variety + * @description This endpoint will return the variety with the specified erid. + */ + get: { + parameters: { + query?: { + /** @description An embeddable list of properties which are optional by default. */ + embed?: components['parameters']['VarietyEmbed']; + }; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A variety object */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Variety']; + }; + }; + /** @description The user does not have sufficient privileges to access varieties in this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description There is no variety matching the specified Erid */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + /** + * Update a single variety + * @description This endpoint allows the custom variety to be renamed, made active/archived, or associated to a different manufacturer or crop type. + */ + put: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + /** @description The updated variety object. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['PutVariety']; + }; + }; + responses: { + /** @description The update was completed successfully */ + 204: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': unknown; + }; + }; + /** @description Schema validation error. Missing one or more of the required fields (name, companyName, cropName), name exceeds length limitation, or crop type is invalid */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + }; + }; + /** @description The user does not have sufficient privileges to update varieties in this org */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description There is no variety matching the specified Erid */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/varieties': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Search reference catalog varieties + * @description This endpoint searches the reference catalog for varieties that match the given search criteria. This data can be used in a subsequent request to create a variety in an organization. Results are limited to 100 items. + */ + get: { + parameters: { + query?: { + /** @description Performs a fuzzy search on variety and manufacturer name. The search string must be at least 3 characters long. */ + searchString?: string; + /** @description Filters the results by crop id (see the /cropTypes API). */ + cropName?: string; + /** @description Specifies the name of the variety from the global reference list. */ + productName?: string; + /** @description Specifies the product manufacturer name of the variety based on the region being used. */ + brandName?: string; + /** @description Specifies the source system product id of the variety based on the country of use. */ + sourceSystemProductId?: string; + /** @description Specifies the region the variety data belongs to. Some data may not be available in certain regions and data will not be included in the response. */ + countryCode?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of reference varieties matching the specified search criteria. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVarietyCollection']; + }; + }; + /** @description The user does not have access to manage products. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description No variety found with this country code. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/varieties/{erid}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get a single reference variety. + * @description Single variety from industry data sources, such as CDMS. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A single variety matching the specified erid. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceVariety']; + }; + }; + /** @description The user does not have access to manage products. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description No variety found matching this erid. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/varieties/{erid}/associateToOrg/{organizationId}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Adds a single reference variety to organization + * @description This endpoint will associate a reference variety to your organization from the global reference list. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden. + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The product to add. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductPointerRequest']; + }; + }; + responses: { + /** @description Successful association of reference variety to org. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductOverrideStatus'][]; + }; + }; + /** @description Unresolvable name conflict or other error occurred. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * Format: int64 + * @example 1 + */ + total?: number; + errors?: components['schemas']['Errors'][]; + }; + }; + }; + /** @description Invalid access to products for organization */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Organization does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description A product already exists in this org with the specified erid. */ + 409: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/varieties/{erid}/documents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Reference list of documents for an associated seed variety. + * @description List of all the documents for a variety from industry data sources, such as CDMS. + */ + get: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A collection of documents for the specified seed variety. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['DocumentCollection']; + }; + }; + /** @description The user does not have access to manage products. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/varieties/{erid}/setOverridesForOrg/{organizationId}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Sets organizational attributes such as isCarrier, archived, registration, etc. + * @description This endpoint will set attribute overrides while importing a reference variety to your organization. The reference varieties are immutable, however, they can still be archived or made available. The response headers from the GET endpoints will include the attributes that can be overridden. + */ + patch: { + parameters: { + query?: never; + header?: never; + path: { + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + erid: components['parameters']['ERID']; + /** @description The identifier of the Organization. */ + organizationId: components['parameters']['OrganizationID']; + }; + cookie?: never; + }; + /** @description The product to add. */ + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['CommonProductPointerRequest']; + }; + }; + responses: { + /** @description Successful update of overrides of reference variety associated to your org. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['ReferenceProductOverrideStatus'][]; + }; + }; + /** @description Unresolvable name conflict or other error occurred. */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * Format: int64 + * @example 1 + */ + total?: number; + errors?: components['schemas']['Errors'][]; + }; + }; + }; + /** @description Invalid access to reference product associated to organization */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Organization does not exist */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + ActiveIngredient: { + /** @example ActiveIngredient */ + '@type'?: string; + /** + * Format: uuid + * @description The primary identifier of the active ingredient. + * @example 30ca101c-e78f-4e45-a248-1ce9622c7f10 + */ + id?: string; + /** + * @description The name of the active ingredient. + * @example Urea Nitrogen + */ + name?: string; + }; + ActiveIngredientEmbed: { + /** @example ActiveIngredient */ + '@type'?: string; + /** + * Format: uuid + * @description The unique identifier for the active ingredient. + * @example 9ab0fd0d-7ed0-49bd-9a61-0277d89b61f4 + */ + guid?: string; + /** + * Format: double + * @description The percentage value of the active ingredient.' + * @example 3.14 + */ + percent?: number; + /** + * @description The name of the active ingredient. + * @example Urea Nitrogen + */ + name?: string; + /** + * @description The unit of measurement used for the value of active ingredient. + * @example % + */ + unit?: string; + /** + * Format: double + * @description The value of the active ingredient in the Chemical/Fertilizer. + * @example 3.14 + */ + value?: number; + }; + ActiveIngredientEmbed_DryBlends: { + /** @example ActiveIngredient */ + '@type'?: string; + /** + * Format: uuid + * @description The primary identifier of the active ingredient. + * @example 30ca101c-e78f-4e45-a248-1ce9622c7f10 + */ + id?: string; + /** + * @description The name of the active ingredient. + * @example Urea Nitrogen + */ + name?: string; + /** + * @description The unit of measurement used for the value of active ingredient. + * @example % + */ + unit?: string; + /** + * Format: double + * @description The value of the active ingredient in the chemical/fertilizer. + * @example 3.14 + */ + value?: number; + }; + ActiveIngredientEmbed_Fertilizers: { + /** @example ActiveIngredient */ + '@type'?: string; + /** + * Format: uuid + * @description The primary identifier of the active ingredient. + * @example 30ca101c-e78f-4e45-a248-1ce9622c7f10 + */ + id?: string; + /** + * @description The name of the active ingredient. + * @example Urea Nitrogen + */ + name?: string; + /** + * @description The unit of measurement used for the value of active ingredient. + * @example % + */ + unit?: string; + /** + * Format: double + * @description The value of the active ingredient in the Chemical/Fertilizer. + * @example 3.14 + */ + value?: number; + }; + ActiveIngredientEmbed_TankMix: { + /** @example ActiveIngredient */ + '@type'?: string; + /** + * Format: uuid + * @description The primary identifier of the active ingredient. + * @example 30ca101c-e78f-4e45-a248-1ce9622c7f10 + */ + id?: string; + /** + * @description The name of the active ingredient. + * @example Urea Nitrogen + */ + name?: string; + /** + * @description The unit of measurement used for the value of active ingredient. + * @example % + */ + unit?: string; + /** + * Format: double + * @description The value of the active ingredient in the chemical/fertilizer. + * @example 3.14 + */ + value?: number; + }; + ActiveIngredientsCollection: components['schemas']['CollectionBase_ActiveIngredients'] & { + values?: components['schemas']['ActiveIngredient'][]; + }; + BaseResource: { + /** @example BaseResource */ + '@type'?: string; + /** + * Format: uuid + * @description Primary identifier for resource. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link'][]; + }; + BaseResourceWithoutLink: { + /** @example BaseResource */ + '@type'?: string; + /** + * Format: uuid + * @description Primary identifier for resource. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + }; + BaseResource_Chemicals: { + /** @example BaseResource */ + '@type'?: string; + /** + * Format: uuid + * @description Primary identifier for resource. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_Chemicals'][]; + }; + BaseResource_Companies: { + /** @example BaseResource */ + '@type'?: string; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_Companies'][]; + }; + BaseResource_Documents: { + /** @example BaseResource */ + '@type'?: string; + /** + * Format: uuid + * @description Primary identifier for resource. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_Documents'][]; + }; + BaseResource_DryBlends: { + /** @example BaseResource */ + '@type'?: string; + /** + * Format: uuid + * @description Primary identifier for resource. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_DryBlends'][]; + }; + BaseResource_TankMix: { + /** @example BaseResource */ + '@type'?: string; + /** + * Format: uuid + * @description Primary identifier for resource. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_TankMix'][]; + }; + Chemical: components['schemas']['BaseResource_Chemicals'] & { + /** @example Chemical */ + '@type'?: unknown; + /** + * Format: uuid + * @deprecated + * @description The primary identifier for the chemical that is unique to your organization. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** + * @description The common name of the chemical. + * @example Round Up + */ + name?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the chemical. + * @example Monsanto + */ + companyName?: string; + /** + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example CHEMICAL + * @enum {string} + */ + category?: 'CHEMICAL'; + /** + * @description Specifies the type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints. + * @example HERBICIDE + * @enum {string} + */ + type?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: uuid + * @description The primary identifier in case it is a carrier. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + carrierId?: string; + /** + * Format: uuid + * @description Optional. Denotes whether this product is from the global reference list. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceGuid?: string; + /** + * Format: uuid + * @description product reference id + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceId?: string; + /** + * Format: double + * @description Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** + * @description Country of the product to which it belongs. + * @example USA + */ + countryCode?: string; + /** + * @description Parent id of the child in which the product is merged + * @example b0241592-c95a-4a8b-a2f9-3e58168ac291 + */ + parentErid?: string; + /** + * @description Showing the status of cleanup. + * @example MERGED + */ + cleanupStatus?: string; + /** + * @description Clean up action time + * @example 2025-09-22T11:24:43.855Z + */ + cleanupActionDate?: string; + /** @description List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed'][]; + /** @description List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used. */ + availableRegistrations?: string[]; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used. */ + documentsList?: components['schemas']['Document_Chemicals'][]; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + epaRegistration?: string; + /** @description Registration detail used for regulatory purposes. */ + agencyRegistrations?: components['schemas']['agencyRegistrations'][]; + /** + * Format: date-time + * @description product creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + /** @description List of child products. */ + childProducts?: components['schemas']['ChildChemical'][]; + }; + ChemicalCollection: components['schemas']['CollectionBase_Chemicals'] & { + values?: components['schemas']['Chemical'][]; + }; + Chemical_DryBlends: components['schemas']['BaseResource_DryBlends'] & { + /** @example Chemical */ + '@type'?: unknown; + /** + * Format: uuid + * @description The primary identifier for the chemical/fertilizer that is unique to your organization. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** + * @description The common name of the chemical/fertilizer. + * @example Round Up + */ + name?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the chemical/fertilizer. + * @example Monsanto + */ + companyName?: string; + /** + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example CHEMICAL + * @enum {string} + */ + category?: 'CHEMICAL'; + /** + * @description Specifies the type of the chemical/fertilizer. + * @example HERBICIDE + * @enum {string} + */ + type?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @default false + */ + restrictedUse: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the chemical/fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @default false + */ + archived: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @default false + */ + carrier: boolean; + /** + * Format: uuid + * @description The primary identifier in case it is a carrier. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + carrierId?: string; + /** + * Format: uuid + * @description Optional. Denotes whether this product is from the global reference list. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceGuid?: string; + /** + * Format: double + * @description Optional. Will be present if the chemical/fertilizer's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Optional. Will be present if the chemical/fertilizer's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** @description List of active ingredients present in the chemical/fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed_DryBlends'][]; + /** @description List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used */ + availableRegistrations?: string[]; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used. */ + documents?: components['schemas']['Document_DryBlends'][]; + }; + ChildChemical: components['schemas']['BaseResource_Chemicals'] & { + /** @example Chemical */ + '@type'?: unknown; + /** + * Format: uuid + * @deprecated + * @description The primary identifier for the chemical that is unique to your organization. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** + * @description The common name of the chemical. + * @example Round Up + */ + name?: string; + /** + * @description The brand of the chemical. + * @example Monsanto + */ + companyName?: string; + /** + * @example CHEMICAL + * @enum {string} + */ + category?: 'CHEMICAL'; + /** + * @description Specifies the type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints. + * @example HERBICIDE + * @enum {string} + */ + type?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: uuid + * @description The primary identifier in case it is a carrier. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + carrierId?: string; + /** @description List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed'][]; + /** @description List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used. */ + availableRegistrations?: string[]; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used. */ + documentsList?: components['schemas']['Document_Chemicals'][]; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + epaRegistration?: string; + /** @description Registration detail used for regulatory purposes. */ + agencyRegistrations?: components['schemas']['agencyRegistrations'][]; + /** + * Format: date-time + * @description product creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + /** + * @description Parent id of the child in which the product is merged + * @example b0241592-c95a-4a8b-a2f9-3e58168ac291 + */ + parentErid?: string; + /** + * @description Showing the status of cleanup. + * @example MERGED + */ + cleanupStatus?: string; + /** + * @description Clean up action time + * @example 2025-09-22T11:24:43.855Z + */ + cleanupActionDate?: string; + /** + * @description Country of the product to which it belongs. + * @example USA + */ + countryCode?: string; + }; + ChildFertilizer: components['schemas']['BaseResource'] & { + /** @example Fertilizer */ + '@type'?: unknown; + /** + * Format: uuid + * @description The primary identifier for the fertilizer that is unique to your organization. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** + * @description The common name of the fertilizer. + * @example Round Up + */ + name?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the fertilizer. + * @example Monsanto + */ + companyName?: string; + /** + * @description Specifies the state of the fertilizer. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example FERTILIZER + * @enum {string} + */ + category?: 'FERTILIZER'; + /** + * @description The type of the fertilizer. + * @example MANURE + * @enum {string} + */ + type?: 'MANURE' | 'FERTILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: uuid + * @description The primary identifier in case it is a carrier. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + carrierId?: string; + /** @description List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed_Fertilizers'][]; + /** @description List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used. */ + availableRegistrations?: string[]; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used. */ + documentsList?: components['schemas']['Document'][]; + /** + * @description Parent id of the child in which the product is merged + * @example b0241592-c95a-4a8b-a2f9-3e58168ac291 + */ + parentErid?: string; + /** + * @description Showing the status of cleanup. + * @example MERGED + */ + cleanupStatus?: string; + /** + * @description Clean up action time + * @example 2025-09-22T11:24:43.855Z + */ + cleanupActionDate?: string; + /** + * @description Country of the product to which it belongs. + * @example USA + */ + countryCode?: string; + /** @description production registration number details */ + agencyRegistrations?: components['schemas']['agencyRegistrations'][]; + /** + * @description production registration number + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description production creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description production modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + }; + ChildVariety: components['schemas']['BaseResource'] & { + /** @example Variety */ + '@type'?: unknown; + /** + * Format: uuid + * @description The primary identifier for the variety that is unique to your organization. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + id?: string; + /** + * @description The common name of the variety. + * @example S73-Z5 - 50lb bag + */ + name?: string; + /** + * @example VARIETY + * @enum {string} + */ + category?: 'VARIETY'; + /** + * @description The identifier of the crop type that this variety is associated with (see the Crop Types API). + * @example SOYBEANS + */ + cropName?: string; + /** + * @description The brand of the variety. + * @example NK + */ + companyName?: string; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. + * @example false + */ + archived?: boolean; + /** + * Format: date-time + * @description product created time + * @example 2017-03-21T21:12:53.865Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modified time + * @example 2018-04-06T15:12:52.910Z + */ + readonly modifiedTime?: string; + /** + * @description Country of the product to which it belongs + * @example USA + */ + countryCode?: string; + /** + * @description Parent id of the child in which the product is merged + * @example b0241592-c95a-4a8b-a2f9-3e58168ac291 + */ + parentErid?: string; + /** + * @description Showing the status of cleanup. + * @example MERGED + */ + cleanupStatus?: string; + /** + * @description Clean up action time + * @example 2025-09-22T11:24:43.855Z + */ + cleanupActionDate?: string; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. */ + documentsList?: components['schemas']['Document'][]; + }; + CollectionBase: { + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link'][]; + /** + * Format: int32 + * @example 100 + */ + total?: number; + }; + CollectionBase_ActiveIngredients: { + /** + * Format: int32 + * @example 100 + */ + total?: number; + links?: components['schemas']['Link_ActiveIngredients'][]; + }; + CollectionBase_Chemicals: { + /** @description Provides a reference to an associated object or list. */ + links?: [components['schemas']['Link_Chemicals']]; + /** + * Format: int32 + * @example 100 + */ + total?: number; + }; + CollectionBase_DryBlends: { + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_DryBlends'][]; + /** + * Format: int32 + * @example 100 + */ + total?: number; + }; + CollectionBase_Fertilizers: { + links?: components['schemas']['Link'][]; + /** + * Format: int32 + * @example 100 + */ + total?: number; + }; + CommonPostReferenceFertilizer: { + overrides?: { + /** + * @description Key for override parameter when setting overrides for a reference product + * @example archived + * @enum {string} + */ + key?: 'isCarrier' | 'archived' | 'registration'; + /** + * @description Value for the override parameter + * @example true + */ + value?: string; + }[]; + }; + CommonProductPointerRequest: { + overrides?: components['schemas']['OverrideKeyValuePair'][] | null; + }; + CommonReferenceChemical: { + overrides?: { + /** + * @description Key for override parameter when setting overrides for a reference product + * @example archived + * @enum {string} + */ + key?: 'isCarrier' | 'archived' | 'registration'; + /** + * @description Value for the override parameter + * @example true + */ + value?: string; + }[]; + }; + Created: { + /** + * @description The common name of this product. + * @example Tide Propiconazole 41.8EC + */ + name?: string; + /** + * @description The name of the input manufacturer. + * @example Tide International USA, Inc.turer + */ + companyName?: string; + /** + * @description The type of chemical + * @example HERBICIDE + */ + type?: string; + /** + * @description Whether or not this product is actively used. + * @example false + */ + archived?: boolean; + /** + * @description Material classification of a product. + * @example DRY + */ + materialClassification?: string; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. + * @example false + */ + carrier?: boolean; + /** + * @description Registration Id + * @example 0084229-00011-AA-0000000 + */ + registrationId?: string; + }; + Created_Fertilizers: { + /** + * @description The common name of this product. + * @example Tide Propiconazole 41.8EC + */ + name?: string; + /** + * @description The name of the input manufacturer. + * @example Tide International USA, Inc. + */ + companyName?: string; + /** + * @description The type of fertilizer + * @example FERTILIZER + */ + type?: string; + /** + * @description Whether or not this product is actively used. + * @example false + */ + archived?: boolean; + /** + * @description Material classification of a product. + * @example DRY + */ + materialClassification?: string; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. + * @example false + */ + carrier?: boolean; + /** + * @description Registration Id + * @example 0084229-00011-AA-0000000 + */ + registrationId?: string; + activeIngredients?: unknown[] & components['schemas']['ActiveIngredientEmbed_Fertilizers']; + }; + Document: { + /** @example Document */ + '@type': unknown; + /** + * @description Unique id of the document + * @example 08e930ee-4c31-41b6-b57e-8c0a8e1284a4 + */ + erid?: string; + /** + * @description Type of document for this product. + * @example 24(c) Registration + */ + docType: string; + /** + * @description The Unique id of the product. + * @example 388ab719-277d-4032-a2c3-40a297d8f482 + */ + productErid: string; + /** + * @description Information about the document. + * @example CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed + */ + description: string; + /** + * @description The filename of the document. + * @example ld7OD026.pdf + */ + fileName: string; + /** + * Format: date + * @example 2017-03-22 + */ + readonly expirationDate?: string | null; + }; + DocumentCollection: components['schemas']['CollectionBase'] & { + values?: components['schemas']['Document'][]; + }; + DocumentCollection_Chemicals: components['schemas']['CollectionBase_Chemicals'] & { + values?: components['schemas']['Document_Chemicals'][]; + }; + DocumentCollection_Fertilizers: components['schemas']['CollectionBase_Fertilizers'] & { + values?: components['schemas']['Document'][]; + }; + DocumentWithPdfFile: components['schemas']['Document_Documents'] & { + /** + * @description The pdf file of the document after compression (gzip) and encoding (base64) + * @example H4sIAAAAAAAAAIy7BVhduxI2XNy1aLFNcYe9cXd3l01xd3eKuzsUd5fiBYq7u0OLe6G4f+05175z7n+/f60nzySTWZPJ5J1kW... + */ + pdfFile?: string; + }; + Document_Chemicals: { + /** @example Document */ + '@type': unknown; + /** + * @description The Unique id of the product where document attached. + * @example 388ab719-277d-4032-a2c3-40a297d8f482 + */ + productErid: string; + /** + * @description The Unique id of the document. + * @example 2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7 + */ + erid?: string; + /** + * @description Type of document for this product. + * @example 24(c) Registration + */ + docType: string; + /** + * @description Information about the document. + * @example CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed + */ + description: string; + /** + * @description The filename of the document. + * @example ld7OD026.pdf + */ + fileName: string; + /** + * Format: date + * @example 2017-03-22 + */ + readonly expirationDate?: string | null; + }; + Document_Documents: { + /** + * @description The type of the document. + * @example Document + */ + '@type'?: string; + /** + * Format: uuid + * @description The unique identifier for the document. + * @example cff5ba0b-1768-48a3-b3ec-dd62aac1cff3 + */ + erid?: string; + /** + * Format: uuid + * @description The unique identifier for the product associated with the document. + * @example 7d9ec6a6-6b8f-4312-92c7-bc022b7f5351 + */ + productErid?: string; + /** + * @description The name of the file. + * @example ld8NF004.pdf + */ + fileName?: string; + /** + * @description The type of the document. + * @example Specimen Label + */ + docType?: string; + /** + * @description A description of the document. + * @example SAL 7/27/11 + */ + description?: string; + /** + * Format: date + * @example 2017-03-22 + */ + readonly expirationDate?: string | null; + }; + Document_DryBlends: WithRequired & { + /** @example Document */ + '@type': unknown; + /** + * @description The Unique id of the product. + * @example 388ab719-277d-4032-a2c3-40a297d8f482 + */ + productId: string; + /** + * @description The Unique id of the document. + * @example 2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7 + */ + erid?: string; + /** + * @description Type of document for this product. + * @example 24(c) Registration + */ + docType: string; + /** + * @description Information about the document. + * @example CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed + */ + description: string; + /** + * @description The filename of the document. + * @example ld7OD026.pdf + */ + fileName: string; + /** + * Format: date + * @example 2017-03-22 + */ + readonly expirationDate?: string | null; + }; + Document_TankMix: WithRequired & { + /** @example Document */ + '@type': unknown; + /** + * @description The Unique id of the product where document attached. + * @example 388ab719-277d-4032-a2c3-40a297d8f482 + */ + productId: string; + /** + * @description The Unique id of the document. + * @example 2e3d70e1-e1c2-40e8-97e8-8e6e095f9da7 + */ + erid?: string; + /** + * @description Type of document for this product. + * @example 24(c) Registration + */ + docType: string; + /** + * @description Information about the document. + * @example CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed + */ + description: string; + /** + * @description The filename of the document. + * @example ld7OD026.pdf + */ + fileName: string; + /** + * Format: date + * @example 2017-03-22 + */ + readonly expirationDate?: string | null; + }; + DryBlend: { + /** + * @description The type of the dry blend. + * @example DryBlend + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/350519/dryBlends/af20cf1a-2def-47ce-9861-35f51afc1ad8 + */ + uri?: string; + }[]; + /** + * @description The unique identifier for the dry blend. + * @example af20cf1a-2def-47ce-9861-35f51afc1ad8 + */ + erid?: string; + /** + * @description The name of the dry blend. + * @example dryblend_alfa + */ + name?: string; + solutionRate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The solution rate value as a double. + * @example 10 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the solution rate measurement. + * @example vrSolutionRateMass + */ + vrDomainId?: string; + /** + * @description The unit of measure for the solution rate. + * @example lb1ac-1 + */ + unit?: string; + }; + /** + * @description Material classification of the dry blend. + * @example DRY + */ + materialClassification?: string; + /** + * @description Whether or not this dry blend is actively used. + * @example false + */ + archived?: boolean; + /** + * @description Notes about the dry blend. + * @example notes + */ + notes?: string; + components?: { + /** + * @description The type of the dry blend component. + * @example DryBlendComponent + */ + '@type'?: string; + rate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The rate value as a double. + * @example 5 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the rate measurement. + * @example vrSolutionRateMass + */ + vrDomainId?: string; + /** + * @description The unit of measure for the rate. + * @example lb1ac-1 + */ + unit?: string; + }; + product?: { + /** + * @description The type of the chemical/fertilizer. + * @example Chemical + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/350519/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + uri?: string; + }[]; + /** + * @description The unique identifier for the chemical/fertilizer. + * @example a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + id?: string; + /** + * @description The name of the chemical/fertilizer. + * @example TELIA + */ + name?: string; + /** + * @description The type of the chemical/fertilizer. + * @example FUNGICIDE + */ + type?: string; + /** + * @description The category of the chemical/fertilizer. + * @example CHEMICAL + */ + category?: string; + /** + * @description The name of the company that manufactures the chemical/fertilizer. + * @example BASF + */ + companyName?: string; + /** + * @description The EPA registration status of the chemical/fertilizer. + * @example EXEMPT + */ + epaRegistration?: string; + /** + * @description The registration status of the chemical/fertilizer. + * @example EXEMPT + */ + registration?: string; + /** + * Format: date-time + * @description The time when the chemical/fertilizer was last modified. + * @example 2024-08-21T09:25:24.220763Z + */ + modifiedTime?: string; + /** + * @description The carrier ID of the chemical/fertilizer. + * @example 58984d7a-126e-4d31-98e9-1ed65a582d91 + */ + carrierId?: string; + /** + * @description The reference ID of the chemical/fertilizer. + * @example a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + referenceId?: string; + /** + * @description The reference GUID of the chemical/fertilizer. + * @example a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + referenceGuid?: string; + /** + * @description Whether or not the chemical/fertilizer is a carrier. + * @example true + */ + carrier?: boolean; + /** + * @description Whether or not the chemical/fertilizer is actively used. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not the chemical/fertilizer is restricted use. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Country of the product to which it belongs + * @example USA + */ + countryCode?: string; + agencyRegistrations?: { + /** + * @description The type of the agency registration. + * @example AgencyRegistration + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example agency + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7 + */ + uri?: string; + }[]; + /** + * @description The registration ID of the agency registration. + * @example EXEMPT + */ + registrationId?: string; + }[]; + }; + }[]; + /** + * @description The name of the crop that this variety is associated with. + * @example [ + * "CORN_WET", + * "ALFALFA" + * ] + */ + targetCrops?: Record; + }; + DryBlendCollection: components['schemas']['CollectionBase_DryBlends'] & { + values?: components['schemas']['DryBlend'][]; + }; + DryBlendComponent: { + /** @example DryBlend Component */ + '@type'?: string; + rate?: components['schemas']['MeasurementAsDouble']; + product?: components['schemas']['Chemical_DryBlends']; + /** @description Provides a reference to an associated object or list. */ + links?: components['schemas']['Link_DryBlends'][]; + }; + /** Format: Errors/DataValidationException */ + Errors: { + /** @example Errors */ + '@type'?: string; + errors?: { + /** @example Error */ + '@type'?: string; + /** + * Format: uuid + * @example 9b331708-10e8-4e15-8097-a9aed7455d6d + */ + guid?: string; + /** + * @description An english description of the error. + * @example The given crop type does not exist + */ + message?: string; + /** + * @description A string constant representing the type of error. + * @example validation_constraint_crop_type_does_not_exist + */ + code?: string; + /** + * @description The name of the property or parameter deemed invalid. + * @example targetCrops + */ + field?: string; + /** + * @description The value that was supplied for this field in the request. + * @example CORN_WET + */ + invalidValue?: string; + }[]; + /** @example {} */ + otherAttributes?: Record; + }; + Fertilizer: components['schemas']['BaseResource_DryBlends'] & { + /** @example Fertilizer */ + '@type'?: unknown; + /** + * Format: uuid + * @description The primary identifier for the fertilizer that is unique to your organization. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** + * @description The common name of the fertilizer. + * @example Round Up + */ + name?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the fertilizer. + * @example Monsanto + */ + companyName?: string; + /** + * @description Specifies the state of the fertilizer. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example FERTILIZER + * @enum {string} + */ + category?: 'FERTILIZER'; + /** + * @description The type of the fertilizer. + * @example MANURE + * @enum {string} + */ + type?: 'MANURE' | 'FERTILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @default false + */ + restrictedUse: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @default false + */ + archived: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @default false + */ + carrier: boolean; + /** + * Format: uuid + * @description The primary identifier in case it is a carrier. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + carrierId?: string; + /** + * Format: uuid + * @description Optional. Denotes whether this product is from the global reference list. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceGuid?: string; + /** + * Format: double + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** @description List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed_DryBlends'][]; + availableRegistrations?: string[]; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used. */ + documents?: components['schemas']['Document_DryBlends'][]; + }; + FertilizerCollection: components['schemas']['CollectionBase_Fertilizers'] & { + values?: components['schemas']['Fertilizer_Fertilizers'][]; + }; + Fertilizer_Fertilizers: components['schemas']['BaseResource'] & { + /** @example Fertilizer */ + '@type'?: unknown; + /** + * Format: uuid + * @description The primary identifier for the fertilizer that is unique to your organization. + * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + */ + id?: string; + /** + * @description The common name of the fertilizer. + * @example Round Up + */ + name?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the fertilizer. + * @example Monsanto + */ + companyName?: string; + /** + * @description Specifies the state of the fertilizer. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example FERTILIZER + * @enum {string} + */ + category?: 'FERTILIZER'; + /** + * @description The type of the fertilizer. + * @example MANURE + * @enum {string} + */ + type?: 'MANURE' | 'FERTILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * Format: uuid + * @description product reference id + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceId?: string; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: uuid + * @description The primary identifier in case it is a carrier. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + carrierId?: string; + /** + * Format: uuid + * @description Optional. Denotes whether this product is from the global reference list. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceGuid?: string; + /** + * Format: double + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** @description List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed_Fertilizers'][]; + /** @description List of available registrations for the countries this product is registered in. Only present when `embed=availableRegistrations` is used. */ + availableRegistrations?: string[]; + /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. Only present when `embed=documents` is used. */ + documentsList?: components['schemas']['Document'][]; + /** + * @description Parent id of the child in which the product is merged + * @example b0241592-c95a-4a8b-a2f9-3e58168ac291 + */ + parentErid?: string; + /** + * @description Showing the status of cleanup. + * @example MERGED + */ + cleanupStatus?: string; + /** + * @description Clean up action time + * @example 2025-09-22T11:24:43.855Z + */ + cleanupActionDate?: string; + /** + * @description Country of the product to which it belongs. + * @example USA + */ + countryCode?: string; + /** @description production registration number details */ + agencyRegistrations?: components['schemas']['agencyRegistrations'][]; + /** + * @description production registration number + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description production creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description production modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + /** @description List of child products. */ + childProducts?: components['schemas']['ChildFertilizer'][]; + }; + Link: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. + * @example self + */ + rel?: string; + /** + * Format: uri + * @description The location of the resource + * @example api_route + */ + uri?: string; + }; + /** @description Provides a reference to an associated object or list. */ + Link_ActiveIngredients: { + /** + * @description The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. + * @example self + */ + rel: string; + /** + * Format: uri + * @description The location of the resource + * @example https://sandboxapi.deere.com/platform/organizations/876542/activeIngredients?itemLimit=10&pageOffset=0 + */ + uri: string; + }; + Link_Chemicals: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the route. + * @example https://sandboxapi.deere.com/platform/{api_route} + */ + uri?: string; + }; + Link_Companies: { + /** + * @description The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. + * @example self + */ + rel: string; + /** + * Format: uri + * @description The location of the resource + * @example https://sandboxapi.deere.com/platform/organizations/876542/productCompanies?itemLimit=10&pageOffset=0 + */ + uri: string; + }; + Link_Documents: { + /** + * @description The identifier for the associated resource. If the resource is embeddable, this is also the 'embed' value. + * @example self + */ + rel?: string; + /** + * Format: uri + * @description The location of the resource + * @example https://sandboxapi.deere.com/platform/ + */ + uri?: string; + }; + Link_DryBlends: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the route. + * @example https://sandboxapi.deere.com/platform/{api_route} + */ + uri?: string; + }[]; + Link_TankMix: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the route. + * @example https://sandboxapi.deere.com/platform/{api_route} + */ + uri?: string; + }[]; + MeasurementAsDouble: { + /** @example MeasurementAsDouble */ + '@type'?: string; + /** + * Format: double + * @example 3.14 + */ + valueAsDouble?: number; + /** + * @description The unit of measure for this value. + * @example gal1ac-1 + */ + unit?: string; + /** + * @description The corresponding domainErid from the EIC/Adapt representation system. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + }; + OverrideKeyValuePair: { + /** + * @description Key for override parameter when setting overrides for a reference product + * @example archived + * @enum {string} + */ + key: 'archived'; + /** + * @description Value for override parameter, can be string, number or boolean + * @example true + */ + value: Record; + }; + PostChemical: { + /** @example Chemical */ + '@type'?: unknown; + /** + * @description The common name of the chemical. + * @example Round Up + */ + name?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the chemical. + * @example Monsanto + */ + companyName?: string; + /** + * @description Specifies the state of the chemical. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example CHEMICAL + * @enum {string} + */ + category?: 'CHEMICAL'; + /** + * @description The type of the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints. + * @example HERBICIDE + * @enum {string} + */ + type?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description product creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + /** @description Registration detail used for regulatory purposes. */ + agencyRegistrations?: components['schemas']['agencyRegistrations'][]; + }; + PostDryBlend: { + DryBlend?: { + /** + * @description The type of the dry blend. + * @example DryBlend + */ + '@type'?: string; + /** + * @description The name of the dry blend. + * @example TestDryBlend + */ + name?: string; + solutionRate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The value of the measurement as a double. + * @example 0 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the measurement. + * @example vrSolutionRateMass + */ + vrDomainId?: string; + /** + * @description The unit of measure for the value. + * @example lb1ac-1 + */ + unit?: string; + }; + /** + * @description Material classification of the dry blend. + * @example DRY + */ + materialClassification?: string; + /** + * @description Whether or not this dry blend is actively used. + * @example false + */ + archived?: boolean; + /** + * @description Notes about the dry blend. + * @example Mix in the carrier last + */ + notes?: string; + components?: { + /** + * @description The type of the dry blend component. + * @example DryBlendComponent + */ + '@type'?: string; + rate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The rate value as a double. + * @example 100 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the rate measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the rate. + * @example gal1ac-1 + */ + unit?: string; + }; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link either fertilizer or chemical. + * @example chemical + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/254751/chemicals/0d373fc5-d2a0-4afc-be6e-f8f34eabaaac + */ + uri?: string; + }[]; + }[]; + /** + * @description The name of the crop that this variety is associated with. + * @example [ + * "CORN_WET", + * "ALFALFA" + * ] + */ + targetCrops?: Record; + }; + }; + PostFertilizer: { + /** @example Fertilizer */ + '@type'?: unknown; + /** + * @description The common name of the fertilizer. + * @example Manure + */ + name: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the fertilizer. + * @example Monsanto + */ + companyName: string; + /** + * @description Specifies the state of the fertilizer. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example FERTILIZER + * @enum {string} + */ + category?: 'FERTILIZER'; + /** + * @description The type for the fertilizer. + * @enum {string} + */ + type: 'MANURE' | 'FERTILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: double + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** @description List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed_Fertilizers'][]; + /** + * @description production registration number + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description production creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description production modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + }; + PostReferenceChemical: { + /** + * @description Country of the product to which it belongs + * @example USA + */ + countryCode: string; + } & components['schemas']['CommonReferenceChemical']; + PostReferenceFertilizer: { + /** + * @description Country of the product to which it belongs + * @example USA + */ + countryCode?: string; + } & components['schemas']['CommonPostReferenceFertilizer']; + PostVariety: { + /** @example Variety */ + '@type'?: unknown; + /** + * @description The common name of the variety. + * @example S73-Z5 - 50lb bag + */ + name: string; + /** + * @description The identifier of the crop type that this variety is associated with (see the Crop Types API). + * @example SOYBEANS + */ + cropName: string; + /** + * @description The brand of the variety. + * @example NK + */ + companyName: string; + /** + * @example VARIETY + * @enum {string} + */ + category?: 'VARIETY'; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. + * @example false + */ + archived?: boolean; + /** + * Format: date-time + * @description product created time + * @example 2017-03-21T21:12:53.865Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modified time + * @example 2018-04-06T15:12:52.910Z + */ + modifiedTime?: string; + }; + ProductCompany: { + /** + * @description The name of the input manufacturer for chemical, fertilizer or variety. + * @example Monsanto + */ + companyName: string; + /** @example ProductCompany */ + '@type': unknown; + }; + PutChemical: { + /** @example Chemical */ + '@type'?: unknown; + /** + * @description The common name of the chemical. + * @example Round Up + */ + name: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description The brand of the chemical. + * @example Monsanto + */ + companyName: string; + /** + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example CHEMICAL + * @enum {string} + */ + category?: 'CHEMICAL'; + /** + * @description The type for the chemical. Manure and Fertilizer are deprecated, please use fertilizer endpoints. + * @example HERBICIDE + * @enum {string} + */ + type: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the chemical from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: double + * @description Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description product creation time + * @example 2017-03-21T21:12:53.865Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modification time + * @example 2018-04-06T15:12:52.910Z + */ + readonly modifiedTime?: string; + /** + * @description Optional. Will be present if the chemical's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** @description List of active ingredients present in the chemical. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed'][]; }; - Document: { - /** @example Document */ - '@type': unknown; + PutFertilizer: { + /** @example Fertilizer */ + '@type'?: unknown; /** - * @description Unique id of the document - * @example 08e930ee-4c31-41b6-b57e-8c0a8e1284a4 + * @description The common name of the fertilizer. + * @example Manure */ - erid?: string; + name: string; /** - * @description Type of document for this product. - * @example 24(c) Registration + * @description Registration id used for regulatory purposes. + * @example a12e9i84 */ - docType: string; + registration?: string; /** - * @description The Unique id of the product. - * @example 388ab719-277d-4032-a2c3-40a297d8f482 + * @description The brand of the fertilizer. + * @example Monsanto */ - productErid: string; + companyName: string; + /** + * @description Specifies the state of the fertilizer. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example FERTILIZER + * @enum {string} + */ + category?: 'FERTILIZER'; + /** + * @description The type for the fertilizer. + * @enum {string} + */ + type: 'MANURE' | 'FERTILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the fertilizer from display in your organization. A carrier cannot be archived if it is being used in an active tank mix. + * @example false + */ + archived?: boolean; + /** + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. **If set to true, cannot subsequently set to false.** Also, carrier names must be unique within the organization regardless of their type. + * @example false + */ + carrier?: boolean; + /** + * Format: double + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example 3.14 + */ + liquidWeight?: number; + /** + * @description Optional. Will be present if the fertilizer's materialClassification is LIQUID and has density information available. + * @example lb/gal + */ + weightUnit?: string; + /** @description List of active ingredients present in the fertilizer. Includes the name and quantity of each ingredient. Only present when `embed=activeIngredients` is used. */ + activeIngredients?: components['schemas']['ActiveIngredientEmbed_Fertilizers'][]; + /** + * @description production registration number + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description production creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description production modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + }; + PutVariety: { + /** @example Variety */ + '@type'?: unknown; + /** + * @description The common name of the variety. + * @example S73-Z5 - 50lb bag + */ + name: string; + /** + * @description The identifier of the crop type that this variety is associated with (see the Crop Types API). **NOTE:** See /cropTypes for the list of available crop types that are supported. + * @example SOYBEANS + */ + cropName: string; + /** + * @description The brand of the variety. + * @example NK + */ + companyName: string; + /** + * @example VARIETY + * @enum {string} + */ + category?: 'VARIETY'; + /** + * @description Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. + * @example false + */ + archived?: boolean; + /** + * Format: date-time + * @description product created time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modified time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + }; + /** @description Data structure for record metadata capturing information about the creation and last update of an entity. For more information on Record Metadata visit [this confluence page](https://confluence.deere.com/x/eSGLDg). NOTES * Some attributes are only visible if the API Client has the required license. * Attributes dealing with modification will be null if the entity has been created but not modified. (Some legacy data may have set the create and modify timestamp at time of creation.) */ + RecordMetadata: { + /** + * @description Timestamp of entity creation + * @example 2018-04-30T10:23:50.000Z + */ + readonly userCreationTimestamp?: string; + /** + * @description Timestamp of entity modification + * @example 2018-05-01T08:11:23.000Z + */ + readonly userLastModifiedTimestamp?: string; + }; + ReferenceChemical: components['schemas']['BaseResource_Chemicals'] & { + /** @example ReferenceChemical */ + '@type'?: unknown; + /** + * Format: uuid + * @description The primary identifier of the reference chemical. + * @example 8fb34898-64f5-5a1e-a698-34ab348220a7 + */ + id?: string; + /** + * @description The common name of the reference chemical. + * @example Round Up + */ + name?: string; + /** + * @description The name of the input manufacturer. + * @example Monsanto + */ + companyName?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * Format: uuid + * @description product reference id + * @example 8fb34898-64f5-5a1e-a698-34ab348220a7 + */ + referenceId?: string; + /** + * @description The state of reference chemical. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example CHEMICAL + * @enum {string} + */ + category?: 'CHEMICAL'; + /** + * @description Specifies the region the reference chemical data belongs to. Some data may not be available in certain regions and data will not be included in the response. + * @example USA + */ + countryCode?: string; + /** + * @description Specifies the type of chemical. + * @example HERBICIDE + * @enum {string} + */ + type?: + | 'ADDITIVE' + | 'ADJUVANT' + | 'DEFOLIANT' + | 'FUNGICIDE' + | 'GROWTH_REGULATOR' + | 'HERBICIDE' + | 'INSECTICIDE' + | 'NITROGEN_STABILIZER'; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * Format: integer + * @description The source system for the reference chemical. + * @example 3 + */ + sourceSystem?: string; + /** + * @description The source system identifier for the reference chemical. + * @example 905P24925 + */ + sourceSystemProductId?: string; + /** + * Format: uuid + * @description Optional. Denotes whether this product is from the global reference list. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceGuid?: string; + /** + * @description product registration id + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description product creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description product modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + }; + ReferenceChemicalCollection: components['schemas']['CollectionBase_Chemicals'] & { + values?: components['schemas']['ReferenceChemical'][]; + }; + ReferenceFertilizer: components['schemas']['BaseResource'] & { + /** @example Fertilizer */ + '@type'?: string; + /** + * @description The primary identifier for the fertilizer. + * @example beaa8d07-1cef-4eea-99b6-19f129e988ed + */ + id?: string; + /** + * @description The common name of the reference fertilizer. + * @example Round Up + */ + name?: string; + /** + * @description The name of the input manufacturer. + * @example Monsanto + */ + companyName?: string; + /** + * @description Registration id used for regulatory purposes. + * @example a12e9i84 + */ + registration?: string; + /** + * @description Specifies the state of the chemical. + * @example LIQUID + * @enum {string} + */ + materialClassification?: 'DRY' | 'LIQUID' | 'GAS'; + /** + * @example FERTILIZER + * @enum {string} + */ + category?: 'FERTILIZER'; + /** + * Format: uuid + * @description Optional. Denotes whether this product is from the global reference list. + * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + */ + referenceGuid?: string; + /** + * @description Specifies the region the reference fertilizer data belongs to. Some data may not be available in certain regions and data will not be included in the response. + * @example USA + */ + countryCode?: string; + /** + * @description Specifies the type of the reference fertilizer. + * @example MANURE + * @enum {string} + */ + type?: 'MANURE' | 'FERTILIZER'; + /** + * Format: uuid + * @description product reference id + * @example beaa8d07-1cef-4eea-99b6-19f129e988ed + */ + referenceId?: string; + /** + * @description production registration number details + * @example a12e9i84 + */ + epaRegistration?: string; + /** + * Format: date-time + * @description production creation time + * @example 2019-03-27T14:59:57.000Z + */ + createdTime?: string; + /** + * Format: date-time + * @description production modification time + * @example 2019-03-27T14:59:57.000Z + */ + modifiedTime?: string; + /** + * @description Whether or not the product is restricted for use by the governing entity. + * @example false + */ + restrictedUse?: boolean; + /** + * Format: integer + * @description The source system for the reference fertilizer. + * @example 3 + */ + sourceSystem?: string; + /** + * @description The source system identifier for the reference fertilizer. + * @example 905P24925 + */ + sourceSystemProductId?: string; + }; + ReferenceFertilizerCollection: components['schemas']['CollectionBase_Fertilizers'] & { + values?: components['schemas']['ReferenceFertilizer'][]; + }; + ReferenceProductOverrideStatus: { + /** + * @description Key for override parameter when setting overrides for a reference product + * @example archived + * @enum {string} + */ + key?: 'archived'; + /** + * @description Whether or not the override was successfully applied + * @example true + */ + success?: boolean; + errors?: components['schemas']['Errors']; + }; + ReferenceProductOverrideStatus_Chemicals: { + /** + * @description Key for override parameter when setting overrides for a reference product + * @example isCarrier + * @enum {string} + */ + key?: 'isCarrier' | 'archived' | 'registration (chemicals and fertilizers only)'; /** - * @description Information about the document. - * @example CO-090003 R-4310 102119 For Use on Alfalfa Grown for Seed + * @description Whether or not the override was successfully applied + * @example true */ - description: string; + success?: boolean; + errors?: components['schemas']['Errors']; + }; + ReferenceProductOverrideStatus_Fertilizers: { /** - * @description The filename of the document. - * @example ld7OD026.pdf + * @description Key for override parameter when setting overrides for a reference product + * @example isCarrier + * @enum {string} */ - fileName: string; + key?: 'isCarrier' | 'archived' | 'registration (chemicals and fertilizers only)'; /** - * Format: date - * @example 2017-03-22 + * @description Whether or not the override was successfully applied + * @example true */ - readonly expirationDate?: string | null; - }; - DocumentCollection: components['schemas']['CollectionBase'] & { - values?: components['schemas']['Document'][]; + success?: boolean; + errors?: components['schemas']['Errors']; }; - BaseResource: { - /** @example BaseResource */ - '@type'?: string; + ReferenceProductPointerRequest: { /** - * Format: uuid - * @description Primary identifier for resource. - * @example 1f8c12b4-126f-11ec-82a8-0242ac130003 + * @description Country of the product to which it belongs. + * @example USA */ - id?: string; - /** @description Provides a reference to an associated object or list. */ - links?: components['schemas']['Link'][]; - }; + countryCode?: string; + } & components['schemas']['CommonProductPointerRequest']; ReferenceVariety: components['schemas']['BaseResource'] & { /** @example ReferenceVariety */ '@type'?: unknown; @@ -729,207 +4985,718 @@ export interface components { */ modifiedTime?: string; }; - Link: { + ReferenceVarietyCollection: components['schemas']['CollectionBase'] & { + values?: components['schemas']['ReferenceVariety'][]; + }; + TankMix: { /** - * @description The type of the link. - * @example Link + * @description The type of the tank mix. + * @example TankMix */ '@type'?: string; /** - * @description The identifier for the associated resource. If the resource is embeddable, this is also the "embed" value. - * @example self - */ - rel?: string; - /** - * Format: uri - * @description The location of the resource - * @example api_route + * @description The name of the tank mix. + * @example TankMix_with_All_Crop */ - uri?: string; - }; - CollectionBase: { - /** @description Provides a reference to an associated object or list. */ - links?: components['schemas']['Link'][]; + name?: string; /** - * Format: int32 - * @example 100 + * @description Notes about the Tank mix. + * @example Mix in the carrier last */ - total?: number; - }; - ReferenceVarietyCollection: components['schemas']['CollectionBase'] & { - values?: components['schemas']['ReferenceVariety'][]; - }; - OverrideKeyValuePair: { + notes?: string; + solutionRate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The value of the measurement as a double. + * @example 5 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the value. + * @example gal1ac-1 + */ + unit?: string; + }; + volume?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The volume value as a double. + * @example 1200 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the volume measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the volume. + * @example gal + */ + unit?: string; + }; + carrier?: { + /** + * @description The type of the tank mix component. + * @example TankMixComponent + */ + '@type'?: string; + rate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The rate value as a double. + * @example 4.465466816647919 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the rate measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the rate. + * @example gal1ac-1 + */ + unit?: string; + }; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example fertilizer + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/57fb0c12-257d-496c-84ef-e300012387d1 + */ + uri?: string; + }[]; + }; + components?: { + /** + * @description The type of the tank mix component. + * @example TankMixComponent + */ + '@type'?: string; + rate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The rate value as a double. + * @example 3 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the rate measurement. + * @example vrSolutionRateMass + */ + vrDomainId?: string; + /** + * @description The unit of measure for the rate. + * @example kg1ha-1 + */ + unit?: string; + }; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link either fertilizer or chemical. + * @example fertilizer + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/254751/fertilizers/00ae89c2-2213-4f34-aa57-40cd0191023b + */ + uri?: string; + }[]; + }[]; /** - * @description Key for override parameter when setting overrides for a reference product - * @example archived - * @enum {string} + * @description Whether or not this tank mix is actively used. + * @example false */ - key: 'archived'; + archived?: boolean; /** - * @description Value for override parameter, can be string, number or boolean - * @example true + * @description Material classification of the tank mix. + * @example LIQUID */ - value: Record; - }; - CommonProductPointerRequest: { - overrides?: components['schemas']['OverrideKeyValuePair'][] | null; - }; - ReferenceProductPointerRequest: { + materialClassification?: string; /** - * @description Country of the product to which it belongs. - * @example USA + * @description The name of the crop that this variety is associated with. + * @example [ + * "CORN_WET", + * "ALFALFA" + * ] */ - countryCode?: string; - } & components['schemas']['CommonProductPointerRequest']; - VarietyCollection: components['schemas']['CollectionBase'] & { - values?: components['schemas']['Variety'][]; + targetCrops?: Record; }; - ReferenceProductOverrideStatus: { - /** - * @description Key for override parameter when setting overrides for a reference product - * @example archived - * @enum {string} - */ - key?: 'archived'; + TankMixCollection: { /** - * @description Whether or not the override was successfully applied - * @example true + * @description A new x-deere-signature response header will be included if the response has changed since last api call. + * @example 3b5392615e4b4e1c92013026f47109bb */ - success?: boolean; - errors?: components['schemas']['Errors']; - }; - PutVariety: { - /** @example Variety */ - '@type'?: unknown; + 'x-deere-signature'?: string; /** - * @description The common name of the variety. - * @example S73-Z5 - 50lb bag + * @description The type of the tank mix. + * @example TankMix */ - name: string; + '@type'?: string; /** - * @description The identifier of the crop type that this variety is associated with (see the Crop Types API). **NOTE:** See /cropTypes for the list of available crop types that are supported. - * @example SOYBEANS + * @description The name of the tank mix. + * @example TankMix_with_All_Crop */ - cropName: string; + name?: string; /** - * @description The brand of the variety. - * @example NK + * @description The unique identifier for the organization. + * @example 0585cd6d-898a-4298-ac09-a61db88d9e7d */ - companyName: string; + orgUniqueId?: string; + solutionRate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The value of the measurement as a double. + * @example 100 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the value. + * @example gal1ac-1 + */ + unit?: string; + }; + volume?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The volume value as a double. + * @example 1200 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the volume measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the volume. + * @example gal + */ + unit?: string; + }; + carrier?: { + /** + * @description The type of the tank mix component. + * @example TankMixComponent + */ + '@type'?: string; + rate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The rate value as a double. + * @example 90 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the rate measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the rate. + * @example gal1ac-1 + */ + unit?: string; + }; + chemical?: { + /** + * @description The type of the chemical/fertilizer. + * @example Fertilizer + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd + */ + uri?: string; + }[]; + /** + * @description The identifier for the chemical/fertilizer. + * @example 3678dedb-55d4-4c6a-a93a-24e909c70bfd + */ + id?: string; + /** + * @description The name of the chemical/fertilizer. + * @example 28-0-0 UAN + */ + name?: string; + /** + * @description The type of the chemical/fertilizer. + * @example FERTILIZER + */ + type?: string; + /** + * @description The category of the chemical/fertilizer. + * @example FERTILIZER + */ + category?: string; + /** + * @description The name of the company. + * @example BASF + */ + companyName?: string; + /** + * @description The EPA registration status. + * @example EXEMPT + */ + epaRegistration?: string; + /** + * @description The registration status. + * @example EXEMPT + */ + registration?: string; + /** + * @description The material classification. + * @example LIQUID + */ + materialClassification?: string; + /** + * Format: date-time + * @description The time when the chemical/fertilizer was created. + * @example 2024-11-07T06:47:38.220Z + */ + createdTime?: string; + /** + * @description The carrier ID. + * @example 274bbd7b-24ae-11ee-9389-123df1de64f7 + */ + carrierId?: string; + /** + * @description The reference ID. + * @example 3678dedb-55d4-4c6a-a93a-24e909c70bfd + */ + referenceId?: string; + /** + * @description The reference GUID. + * @example 3678dedb-55d4-4c6a-a93a-24e909c70bfd + */ + referenceGuid?: string; + /** + * @description Whether the chemical/fertilizer is a carrier. + * @example true + */ + carrier?: boolean; + /** + * @description Whether the chemical/fertilizer is archived. + * @example false + */ + archived?: boolean; + /** + * @description Whether the chemical/fertilizer is restricted use. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Country of the product to which it belongs + * @example USA + */ + countryCode?: string; + agencyRegistrations?: { + /** + * @description The type of the agency registration. + * @example AgencyRegistration + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example agency + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7 + */ + uri?: string; + }[]; + /** + * @description The registration ID. + * @example EXEMPT + */ + registrationId?: string; + }[]; + }; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example fertilizer + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/132456/fertilizers/3678dedb-55d4-4c6a-a93a-24e909c70bfd + */ + uri?: string; + }[]; + }; + components?: { + /** + * @description The type of the tank mix component. + * @example TankMixComponent + */ + '@type'?: string; + rate?: { + /** + * @description The type of the measurement. + * @example MeasurementAsDouble + */ + '@type'?: string; + /** + * Format: double + * @description The rate value as a double. + * @example 10 + */ + valueAsDouble?: number; + /** + * @description The domain ID for the rate measurement. + * @example vrSolutionRateLiquid + */ + vrDomainId?: string; + /** + * @description The unit of measure for the rate. + * @example gal1ac-1 + */ + unit?: string; + }; + chemical?: { + /** + * @description The type of the chemical/fertilizer. + * @example Chemical + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/123456/chemicals/a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + uri?: string; + }[]; + /** + * @description The identifier for the chemical/fertilizer. + * @example a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + id?: string; + /** + * @description The name of the chemical/fertilizer. + * @example TELIA + */ + name?: string; + /** + * @description The type of the chemical/fertilizer. + * @example FUNGICIDE + */ + type?: string; + /** + * @description The category of the chemical/fertilizer. + * @example CHEMICAL + */ + category?: string; + /** + * @description The name of the company. + * @example BASF + */ + companyName?: string; + /** + * @description The EPA registration status. + * @example EXEMPT + */ + epaRegistration?: string; + /** + * @description The registration status. + * @example EXEMPT + */ + registration?: string; + /** + * Format: date-time + * @description The time when the chemical/fertilizer was modified. + * @example 2024-08-21T09:25:24.220763Z + */ + modifiedTime?: string; + /** + * @description The carrier ID. + * @example 58984d7a-126e-4d31-98e9-1ed65a582d91 + */ + carrierId?: string; + /** + * @description The reference ID. + * @example a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + referenceId?: string; + /** + * @description The reference GUID. + * @example a3aaa1b4-6c5b-4b04-ac39-6d316be7fd8d + */ + referenceGuid?: string; + /** + * @description Whether the chemical/fertilizer is a carrier. + * @example true + */ + carrier?: boolean; + /** + * @description Whether the chemical/fertilizer is archived. + * @example false + */ + archived?: boolean; + /** + * @description Whether the chemical/fertilizer is restricted use. + * @example false + */ + restrictedUse?: boolean; + /** + * @description Country of the product to which it belongs + * @example USA + */ + countryCode?: string; + agencyRegistrations?: { + /** + * @description The type of the agency registration. + * @example AgencyRegistration + */ + '@type'?: string; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example agency + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/agencies/8fb34898-64f5-5a1e-a698-34ab348220a7 + */ + uri?: string; + }[]; + /** + * @description The registration ID. + * @example EXEMPT + */ + registrationId?: string; + }[]; + }; + }[]; /** - * @example VARIETY - * @enum {string} + * @description Notes about the tank mix. + * @example this is tankmix notes */ - category?: 'VARIETY'; + notes?: string; /** - * @description Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. + * @description Whether or not this tank mix is actively used. * @example false */ archived?: boolean; /** * Format: date-time - * @description product created time - * @example 2019-03-27T14:59:57.000Z + * @description The time when the tank mix was created. + * @example 2024-11-07T06:47:39.246Z */ createdTime?: string; /** * Format: date-time - * @description product modified time - * @example 2019-03-27T14:59:57.000Z + * @description The time when the tank mix was modified. + * @example 2024-11-07T06:47:39.246Z */ modifiedTime?: string; + /** + * @description Material classification of the tank mix. + * @example LIQUID + */ + materialClassification?: string; + /** + * @description The name of the crop that this variety is associated with. + * @example [ + * "CORN_WET", + * "ALFALFA" + * ] + */ + targetCrops?: Record; + links?: { + /** + * @description The type of the link. + * @example Link + */ + '@type'?: string; + /** + * @description The relationship of the link. + * @example self + */ + rel?: string; + /** + * @description The URI of the linked resource. + * @example https://sandboxapi.deere.com/platform/organizations/123456/tankMixes/0585cd6d-898a-4298-ac09-a61db88d9e7d + */ + uri?: string; + }[]; }; - VarietyIdUpdate: { + Updated: { /** - * @description The common name of the variety. - * @example RL8288HB + * @description The common name of this product. + * @example Tide Propiconazole 41.8EC */ name?: string; /** * @description The name of the input manufacturer. - * @example AgVenture + * @example Tide International USA, Inc.turer */ companyName?: string; /** - * @description The identifier of the crop type that this variety is associated with. - * @example CORN_WET + * @description The type of chemical + * @example HERBICIDE */ - cropName?: string; + type?: string; /** - * @description Whether or not this product is actively used. Defaults to false. + * @description Whether or not this product is actively used. * @example false */ archived?: boolean; - }; - ChildVariety: components['schemas']['BaseResource'] & { - /** @example Variety */ - '@type'?: unknown; /** - * Format: uuid - * @description The primary identifier for the variety that is unique to your organization. - * @example 87b4a1e7-210b-482c-8a7a-19e9f644e914 + * @description The product form. This is required during updates (as it may currently be null), but cannot be changed once set. + * @example DRY */ - id?: string; + materialClassification?: string; /** - * @description The common name of the variety. - * @example S73-Z5 - 50lb bag + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. + * @example false */ - name?: string; + carrier?: boolean; /** - * @example VARIETY - * @enum {string} + * @description Registration Id + * @example 0084229-00011-AA-0000000 */ - category?: 'VARIETY'; + registrationId?: string; + }; + Updated_Fertilizers: { /** - * @description The identifier of the crop type that this variety is associated with (see the Crop Types API). - * @example SOYBEANS + * @description The common name of this product. + * @example Tide Propiconazole 41.8EC */ - cropName?: string; + name?: string; /** - * @description The brand of the variety. - * @example NK + * @description The name of the input manufacturer. + * @example Tide International USA, Inc. */ companyName?: string; /** - * @description Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. - * @example false - */ - archived?: boolean; - /** - * Format: date-time - * @description product created time - * @example 2017-03-21T21:12:53.865Z - */ - createdTime?: string; - /** - * Format: date-time - * @description product modified time - * @example 2018-04-06T15:12:52.910Z + * @description The type of fertilizer + * @example FERTILIZER */ - readonly modifiedTime?: string; + type?: string; /** - * @description Country of the product to which it belongs - * @example USA + * @description Whether or not this product is actively used. + * @example false */ - countryCode?: string; + archived?: boolean; /** - * @description Parent id of the child in which the product is merged - * @example b0241592-c95a-4a8b-a2f9-3e58168ac291 + * @description The product form. This is required during updates (as it may currently be null), but cannot be changed once set. + * @example DRY */ - parentErid?: string; + materialClassification?: string; /** - * @description Showing the status of cleanup. - * @example MERGED + * @description Whether or not this product has been flagged for use as a tank mix carrier. Only applicable in an organizational context. + * @example false */ - cleanupStatus?: string; + carrier?: boolean; /** - * @description Clean up action time - * @example 2025-09-22T11:24:43.855Z + * @description Registration Id + * @example 0084229-00011-AA-0000000 */ - cleanupActionDate?: string; - /** @description List of documents for the variety. For example, Tech Sheet, SDS Label. */ - documentsList?: components['schemas']['Document'][]; + registrationId?: string; + activeIngredients?: unknown[] & components['schemas']['ActiveIngredientEmbed_Fertilizers']; }; Variety: components['schemas']['BaseResource'] & { /** @example Variety */ @@ -1014,92 +5781,45 @@ export interface components { /** @description List of child products. */ childProducts?: components['schemas']['ChildVariety'][]; }; - /** Format: Errors/DataValidationException */ - Errors: { - /** @example Errors */ - '@type'?: string; - errors?: { - /** @example Error */ - '@type'?: string; - /** - * Format: uuid - * @example 9b331708-10e8-4e15-8097-a9aed7455d6d - */ - guid?: string; - /** - * @description An english description of the error. - * @example The given crop type does not exist - */ - message?: string; - /** - * @description A string constant representing the type of error. - * @example validation_constraint_crop_type_does_not_exist - */ - code?: string; - /** - * @description The name of the property or parameter deemed invalid. - * @example targetCrops - */ - field?: string; - /** - * @description The value that was supplied for this field in the request. - * @example CORN_WET - */ - invalidValue?: string; - }[]; - /** @example {} */ - otherAttributes?: Record; + VarietyCollection: components['schemas']['CollectionBase'] & { + values?: components['schemas']['Variety'][]; }; - PostVariety: { - /** @example Variety */ - '@type'?: unknown; + VarietyCreate: { /** * @description The common name of the variety. - * @example S73-Z5 - 50lb bag - */ - name: string; - /** - * @description The identifier of the crop type that this variety is associated with (see the Crop Types API). - * @example SOYBEANS + * @example 2C788A SXRA COR */ - cropName: string; + name?: string; /** - * @description The brand of the variety. - * @example NK + * @description The name of the input manufacturer. + * @example MYCOGEN SEEDS */ - companyName: string; + companyName?: string; /** - * @example VARIETY - * @enum {string} + * @description The identifier of the crop type that this variety is associated with. + * @example CORN_WET */ - category?: 'VARIETY'; + cropName?: string; /** - * @description Whether or not this product is actively used in your organization. A value of true will hide the variety from display in your organization. + * @description Whether or not this product is actively used. * @example false */ archived?: boolean; /** - * Format: date-time - * @description product created time - * @example 2017-03-21T21:12:53.865Z - */ - createdTime?: string; - /** - * Format: date-time - * @description product modified time - * @example 2018-04-06T15:12:52.910Z + * @description The identifier of the associated reference variety, if applicable. This is optional, but helps to capture product lineage and improve consistency across organizations. + * @example 1a63a1fe-b00f-403f-81f7-c157e0234cc4 */ - modifiedTime?: string; + referenceId?: string; }; - VarietyCreate: { + VarietyIdUpdate: { /** * @description The common name of the variety. - * @example 2C788A SXRA COR + * @example RL8288HB */ name?: string; /** * @description The name of the input manufacturer. - * @example MYCOGEN SEEDS + * @example AgVenture */ companyName?: string; /** @@ -1108,16 +5828,12 @@ export interface components { */ cropName?: string; /** - * @description Whether or not this product is actively used. + * @description Whether or not this product is actively used. Defaults to false. * @example false */ archived?: boolean; - /** - * @description The identifier of the associated reference variety, if applicable. This is optional, but helps to capture product lineage and improve consistency across organizations. - * @example 1a63a1fe-b00f-403f-81f7-c157e0234cc4 - */ - referenceId?: string; }; + agencyRegistrations: unknown[]; }; responses: { /** @description Created */ @@ -1129,35 +5845,88 @@ export interface components { }; }; parameters: { - /** @description An embeddable list of properties which are optional by default. */ - VarietyEmbed: 'documents' | 'showMergedProducts'; + /** @description Translates the name to the desired locale if supported. Follows RFC-3282 specifications (https://datatracker.ietf.org/doc/html/rfc3282). */ + AcceptLanguageRequestHeader: string; + /** @description Determines the response schema. */ + AcceptRequestHeader: 'application/json' | 'application/vnd.deere.axiom.v3+json'; /** @description Filters the list based on archive status. Accepted values are ARCHIVED, AVAILABLE, and ALL. The default behavior is to return only available (non-archived) varieties. */ ArchiveStatus: 'AVAILABLE' | 'ARCHIVED' | 'ALL'; - /** @description The identifier of the Organization. */ - OrganizationID: number; - /** @description The organization owning the varieties. */ - OrgId: number; - /** @description Filter results based on status */ - RecordFilter: string; + /** @description An embeddable list of properties which are optional by default. */ + ChemicalEmbed: + | 'activeIngredients' + | 'availableRegistrations' + | 'documents' + | 'showMergedProducts'; + /** @description The chemical Id to find. */ + ChemicalId: string; + /** @description The list of Rels, for which objects should be included in the response payload. */ + DryBlendEmbed: 'product'; + /** + * @description A unique identifier for an entity formatted as a uuid. + * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff + */ + ERID: string; /** @description Embeds extra information in the org varieties response */ Embed: string; /** @description Embeds extra information in the variety response */ Embed2: string; - /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ - 'X-deere-signature': string; + /** @description Embeds extra information in the tank mix response */ + Embed2_TankMix: string; + /** @description Embeds extra information in the org chemical response */ + Embed_Chemicals: string; + /** @description Embeds extra information in the fertilizer response. */ + Embed_Fertilizers: string; + /** @description Embeds extra information in the org tank mixes response */ + Embed_TankMix: string; + /** @description Filters the results by the provided entity type. Example: CHEMICAL */ + EntityTypeQueryParam: 'CHEMICAL' | 'FERTILIZER'; + /** @description An embeddable list of properties which are optional by default. */ + FertilizerEmbed: + | 'activeIngredients' + | 'availableRegistrations' + | 'documents' + | 'showMergedProducts'; + /** @description The fertilizer Id to find. */ + FertilizerId: string; + /** @description TankMixes id. */ + Id: string; + /** @description The organization owning the varieties. */ + OrgId: number; + /** @description The organization owning the chemicals. */ + OrgId2: number; + /** @description The owning organization of the product. */ + OrgId2_Fertilizers: number; + /** @description The organization owning the chemicals. */ + OrgId_Chemicals: number; + /** @description The organization owning the fertilizers. */ + OrgId_Fertilizers: number; + /** @description The organization owning the tank mix. */ + OrgId_TankMix: number; + /** @description The identifier of the Organization. */ + OrganizationID: number; + /** @description Filter results based on status */ + RecordFilter: string; + /** @description The list of Rels, for which objects should be included in the response payload. */ + TankMixEmbed: 'chemical'; + /** @description An embeddable list of properties which are optional by default. */ + VarietyEmbed: 'documents' | 'showMergedProducts'; /** @description The variety Id to find. */ VarietyId: string; /** @description The variety Id */ VarietyId2: string; - /** - * @description A unique identifier for an entity formatted as a uuid. - * @example cf09acfc-9196-4dbb-9b38-1be02673c5ff - */ - ERID: string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature': string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same GUID next time. */ + 'X-deere-signature_Chemicals': string; + /** @description x-deere-signature should be managed by the client per user per API. For a new user/new API, the first request will have a blank value for x-deere-signature. Changes can be tracked with the x-deere-signature returned in the response. If the response has not changed since the last API call, the value of x-deere-signature is not changed and the client should use the same String Token next time. */ + 'X-deere-signature_Fertilizers': string; }; requestBodies: never; headers: never; pathItems: never; } export type $defs = Record; +type WithRequired = T & { + [P in K]-?: T[P]; +}; export type operations = Record; diff --git a/src/types/generated/webhook.ts b/src/types/generated/webhook.ts index ad05fc3..384ee59 100644 --- a/src/types/generated/webhook.ts +++ b/src/types/generated/webhook.ts @@ -4,6 +4,30 @@ */ export interface paths { + '/eventSubscriptionDelivery': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Event Subscription Delivery + * @description This resource will return your event subscription delivery status + */ + get: operations['getDelivery']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update Event Subscription Delivery + * @description This resource will update an event subscription delivery + */ + patch: operations['updateDelivery']; + trace?: never; + }; '/eventSubscriptions': { parameters: { query?: never; @@ -56,46 +80,11 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** @description A list of events */ - HTTPTargetEndpointEventsContent: components['schemas']['HTTPTargetEndpointEventContent'][]; - /** @description An event */ - HTTPTargetEndpointEventContent: { - /** - * @description The client key that made the subscription - * @example johndeere-abcdef - */ - clientKey: string; - /** @example fieldOperation */ - eventTypeId: string; - /** - * Format: url - * @example https://sandboxapi.deere.com/platform/fieldOperations/795b80cf-eb03-4c43-a9e1-f46eb0fbf912 - */ - targetResource: string; - /** - * @description a string that will be sent with each delivery to validate the sender. Accepts the base 64 character set. - * @example abc123ABC+/= - */ - token?: string; - metadata: components['schemas']['HTTPTargetEndpointEventMetadata'][]; - links: components['schemas']['Links']; - }; - /** @description Generic key value pair */ - HTTPTargetEndpointEventMetadata: { - /** @example orgId */ - key?: string; - /** @example 12345 */ - value?: string; - }; - Links: components['schemas']['Link'][]; - /** @description Link to another resource */ - Link: { - /** @example self */ - rel: string; - /** @example https://sandboxapi.deere.com/platform/users/USER */ - uri: string; - }; - Errors: components['schemas']['Error'][]; + /** + * @description If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. + * @example Bearer + */ + AuthorizationHeader: string | null; CreatedSubscriptionLinks: { /** * @description The link back to the subscribed user. @@ -156,6 +145,26 @@ export interface components { */ links?: unknown[]; }; + /** @description Delivery */ + DeliveryContent: { + /** @example johndeere-abcdef */ + readonly clientKey?: string; + status?: components['schemas']['DeliveryStatus']; + authorizationHeaderValue?: components['schemas']['AuthorizationHeader']; + /** + * Format: int32 + * @example 5 + */ + concurrentDeliveries?: number; + /** + * Format: int32 + * @example 5 + */ + maxBatchSize?: number; + links?: components['schemas']['Links']; + }; + /** @enum {string} */ + DeliveryStatus: 'Active' | 'Paused'; Error: { /** * Format: guid @@ -183,6 +192,107 @@ export interface components { */ invalidValue?: string; }; + Error_EventSubscriptionDelivery: { + /** + * @description An english description of the error + * @example was invalid because + */ + message?: string; + /** + * @description A string constant representing the type of error + * @example 400 + */ + code?: string; + /** + * @description The name of the property or parameter deemed invalid + * @example Machine.serialNumber + */ + field?: string; + /** + * Format: uuid + * @description A reference to this encounter of the error, for traceability and troubleshooting + * @example 9b331708-10e8-4e15-8097-a9aed7455d6d + */ + gud?: string; + /** + * @description The value that was supplied for this field in the request + * @example null + */ + invalidValue?: string; + }; + Errors: components['schemas']['Error'][]; + Errors_EventSubscriptionDelivery: components['schemas']['Error_EventSubscriptionDelivery'][]; + /** + * @description See [Event Types](https://developer-portal.deere.com/#/myjohndeere/data-subscription-service/event-types) for valid event names + * @example exampleEvent + */ + EventTypeId: string; + /** @description Consists of a key and list of values used to filter events based on metadata. */ + Filter: { + /** @example orgId */ + key: string; + values: string[]; + }; + /** @description An event */ + HTTPTargetEndpointEventContent: { + /** + * @description The client key that made the subscription + * @example johndeere-abcdef + */ + clientKey: string; + /** @example fieldOperation */ + eventTypeId: string; + /** + * Format: url + * @example https://sandboxapi.deere.com/platform/fieldOperations/795b80cf-eb03-4c43-a9e1-f46eb0fbf912 + */ + targetResource: string; + /** + * @description a string that will be sent with each delivery to validate the sender. Accepts the base 64 character set. + * @example abc123ABC+/= + */ + token?: string; + metadata: components['schemas']['HTTPTargetEndpointEventMetadata'][]; + links: components['schemas']['Links']; + }; + /** @description Generic key value pair */ + HTTPTargetEndpointEventMetadata: { + /** @example orgId */ + key?: string; + /** @example 12345 */ + value?: string; + }; + /** @description A list of events */ + HTTPTargetEndpointEventsContent: components['schemas']['HTTPTargetEndpointEventContent'][]; + /** @description A HTTPS subscription */ + HttpsSubscription: { + /** @example https */ + targetType: string; + /** @example https//example.com/callme */ + uri: string; + }; + /** @description Link to another resource */ + Link: { + /** @example self */ + rel: string; + /** @example https://sandboxapi.deere.com/platform/users/USER */ + uri: string; + }; + Links: components['schemas']['Link'][]; + SubscriptionCollectionResponseContent: { + /** + * @description The link of the request. + * @example https://sandboxapi.deere.com/platform/eventSubscriptions + */ + self?: unknown; + }; + SubscriptionDeliveryLink: { + /** + * @description The link to the event subscription's delivery status. + * @example https://sandboxapi.deere.com/platform/eventSubscriptionDelivery + */ + self?: unknown; + }; /** @description A subscription request */ SubscriptionRequestContent: { eventTypeId: components['schemas']['EventTypeId']; @@ -201,18 +311,28 @@ export interface components { */ token?: string; }; - /** @description Consists of a key and list of values used to filter events based on metadata. */ - Filter: { - /** @example orgId */ - key: string; - values: string[]; - }; - SubscriptionCollectionResponseContent: { + /** @description A subscription response */ + SubscriptionResponseContent: { /** - * @description The link of the request. - * @example https://sandboxapi.deere.com/platform/eventSubscriptions + * @description The postback endpoint that receives the event(s). + * @example See the sample request below Editable: Yes */ - self?: unknown; + targetEndpoint?: Record; + /** + * @description The status of the event subscription. + * @example active Editable: Yes + */ + status?: string; + /** + * @description Human-readable name to easily identify the event subscription. + * @example My Data Subscription Editable: Yes + */ + displayName?: string; + /** + * @description A string that was sent with each delivery to validate the sender. + * @example Follows pattern '^[A-Za-z0-9+/=]{0,256}$' Editable: Yes + */ + token?: string; }; /** @description A subscription response */ SubscriptionResponseContentPut: { @@ -242,89 +362,58 @@ export interface components { */ token?: string; }; - /** @description A subscription response */ - SubscriptionResponseContent: { + SubscriptionUpdateResponse: { /** - * @description The postback endpoint that receives the event(s). - * @example See the sample request below Editable: Yes + * @description Concurrency of the event subscription delivery (default: 1, min: 1, max: 10). + * @example 5 Editable: Yes */ - targetEndpoint?: Record; - /** - * @description The status of the event subscription. - * @example active Editable: Yes - */ - status?: string; + concurrentDeliveries?: number; /** - * @description Human-readable name to easily identify the event subscription. - * @example My Data Subscription Editable: Yes + * @description The client key used to create the subscription. + * @example johndeere-1234567898765432123456789876543212345678 Editable: No */ - displayName?: string; + clientKey?: string; /** - * @description A string that was sent with each delivery to validate the sender. - * @example Follows pattern '^[A-Za-z0-9+/=]{0,256}$' Editable: Yes + * @description Links to other resources. + * @example See the sample request below Editable: No */ - token?: string; - }; - /** @description A HTTPS subscription */ - HttpsSubscription: { - /** @example https */ - targetType: string; - /** @example https//example.com/callme */ - uri: string; + links?: unknown[]; }; - /** - * @description See [Event Types](https://developer-portal.deere.com/#/myjohndeere/data-subscription-service/event-types) for valid event names - * @example exampleEvent - */ - EventTypeId: string; - /** @description Delivery */ - DeliveryContent: { - /** @example johndeere-abcdef */ - readonly clientKey?: string; - status?: components['schemas']['DeliveryStatus']; - authorizationHeaderValue?: components['schemas']['AuthorizationHeader']; + SubscriptionUpdateResponseGet: { /** - * Format: int32 + * @description Concurrency of the event subscription delivery (default: 1, min: 1, max: 10). * @example 5 */ concurrentDeliveries?: number; /** - * Format: int32 - * @example 5 + * @description The client key used to create the subscription. + * @example REDACTED */ - maxBatchSize?: number; - links?: components['schemas']['Links']; + clientKey?: string; + /** + * @description Links to other resources. + * @example See the sample request below + */ + links?: unknown[]; }; - /** @enum {string} */ - DeliveryStatus: 'Active' | 'Paused'; - /** - * @description If provided, we will include an authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. - * @example Bearer - */ - AuthorizationHeader: string | null; }; responses: { - /** @description Subscription */ - SubscriptionResponse: { + /** @description Bad Request */ + BadRequestResponse: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - links?: unknown; - values?: unknown; - }; + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; }; }; - /** @description Subscriptions */ - SubscriptionCollectionResponse: { + /** @description Bad Request */ + BadRequestResponse_EventSubscriptionDelivery: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': { - links?: unknown; - }; + 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors_EventSubscriptionDelivery']; }; }; /** @description Created */ @@ -348,22 +437,25 @@ export interface components { 'application/vnd.deere.axiom.v3+json': unknown; }; }; - /** @description Subscription */ - UpdatedResponse: { + /** @description Delivery */ + DeliveryResponse: { headers: { [name: string]: unknown; }; content: { 'application/vnd.deere.axiom.v3+json': { - /** - * Format: int64 - * @description Number of results in the list - * @example 70 - */ - total?: number; + values?: unknown; + links?: unknown; }; }; }; + /** @description Does not have access */ + DoesNotHaveAccessResponse: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Not found */ InputValueIsInvalidResponse: { headers: { @@ -371,60 +463,99 @@ export interface components { }; content?: never; }; - /** @description Does not have access */ - DoesNotHaveAccessResponse: { + /** @description Subscriptions */ + SubscriptionCollectionResponse: { headers: { [name: string]: unknown; }; - content?: never; + content: { + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + }; + }; }; - /** @description Bad Request */ - BadRequestResponse: { + /** @description Subscription */ + SubscriptionResponse: { headers: { [name: string]: unknown; }; content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['Errors']; + 'application/vnd.deere.axiom.v3+json': { + links?: unknown; + values?: unknown; + }; + }; + }; + /** @description Subscription */ + UpdatedResponse: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + }; + }; + }; + /** @description Update Subscriptions delivery */ + UpdatedResponse_EventSubscriptionDelivery: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/vnd.deere.axiom.v3+json': { + /** + * Format: int64 + * @description Number of results in the list + * @example 70 + */ + total?: number; + }; }; }; }; parameters: { - /** @description Event Subscription ID as a GUID. */ - Id: string; + /** @description Human-readable name to easily identify the event subscription. */ + DisplayName: string; /** @description See for valid event type names. */ EventTypeId: string; /** @description List of MetadataFilters to filter events on metadata. */ Filters: unknown[]; - /** @description The postback endpoint that receives the event(s). */ - TargetEndpoint: Record; + /** @description If set via the eventSubscriptionDelivery endpoint, we will include an Authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. */ + HTTPTargetEndpointAuthorizationHeader: components['schemas']['AuthorizationHeader']; + /** @description Event Subscription ID as a GUID. */ + Id: string; /** @description The status of the event subscription. Only a status of Active can be specified on subscription creation. */ Status: string; - /** @description Human-readable name to easily identify the event subscription. */ - DisplayName: string; + /** @description The postback endpoint that receives the event(s). */ + TargetEndpoint: Record; /** @description A string that was sent with each delivery to validate the sender. */ Token: string; - /** @description If set via the eventSubscriptionDelivery endpoint, we will include an Authorization header on every HTTP Post callback for this client with the complete content provided in this property. For more information, see RFC 7235, section 4.2 and RCF 7617. You may choose to rotate this value on a regular basis. The max size for this value is 4 kb. */ - HTTPTargetEndpointAuthorizationHeader: components['schemas']['AuthorizationHeader']; }; requestBodies: { - SubscriptionRequest: { + DeliveryUpdateRequest: { content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['SubscriptionRequestContent']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['DeliveryContent']; }; }; - SubscriptionUpdateRequest: { + HTTPTargetEndpointRequest: { content: { - '*/*'?: never; + 'application/json': components['schemas']['HTTPTargetEndpointEventsContent']; }; }; - DeliveryUpdateRequest: { + SubscriptionRequest: { content: { - 'application/vnd.deere.axiom.v3+json': components['schemas']['DeliveryContent']; + 'application/vnd.deere.axiom.v3+json': components['schemas']['SubscriptionRequestContent']; }; }; - HTTPTargetEndpointRequest: { + SubscriptionUpdateRequest: { content: { - 'application/json': components['schemas']['HTTPTargetEndpointEventsContent']; + '*/*'?: never; }; }; }; @@ -433,6 +564,37 @@ export interface components { } export type $defs = Record; export interface operations { + getDelivery: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + 200: components['responses']['DeliveryResponse']; + 403: components['responses']['DoesNotHaveAccessResponse']; + }; + }; + updateDelivery: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + 'application/vnd.deere.axiom.v3+json': components['schemas']['SubscriptionUpdateResponse']; + }; + }; + responses: { + 200: components['responses']['UpdatedResponse_EventSubscriptionDelivery']; + 400: components['responses']['BadRequestResponse_EventSubscriptionDelivery']; + 403: components['responses']['DoesNotHaveAccessResponse']; + }; + }; getSubscriptions: { parameters: { query?: never; diff --git a/tests/api-surface-manifest.test.ts b/tests/api-surface-manifest.test.ts new file mode 100644 index 0000000..a0efcbd --- /dev/null +++ b/tests/api-surface-manifest.test.ts @@ -0,0 +1,90 @@ +/** + * Permanent regression test for the COMMITTED scripts/api-surface.yaml + * manifest (not a fixture). Loading the real file means CI validates every + * future hand edit or generator auto-append against the same rules + * loadApiSurface enforces (see scripts/lib/api-surface.ts). This file also + * locks a handful of publicly shipped method names that must never silently + * rebind if an upstream spec ever reorders its paths block. + * + * Tests run from the repo root, so the default cwd-based path in + * loadApiSurface() resolves to the real scripts/api-surface.yaml. The + * manifest itself is produced by scripts/seed-api-surface.ts (a one-time + * entrypoint, not unit tested); see that file for provenance. + * + * Pinned pairs were verified against the "@generated from" JSDoc lines in + * the committed src/api/field-operations-api.ts, src/api/equipment.ts, + * src/api/products.ts, and src/api/crop-types.ts before being written here. + * + * Lookups below match by the entry's exact "op" string (method + raw path + * with real param names), never by normalized opKey. crop-types declares two + * sibling operations, GET /cropTypes/{name} and GET /cropTypes/{id}, that + * collapse to the same normalized identity; a normalized-key lookup could + * silently return the wrong sibling. Exact-string matching is unambiguous + * for every entry, since loadApiSurface already rejects a duplicate raw op + * within one spec. + */ + +import assert from 'node:assert'; +import { describe, it } from 'node:test'; +import { loadApiSurface } from '../scripts/lib/api-surface.js'; + +describe('committed api-surface manifest', () => { + it('loads without throwing', () => { + assert.doesNotThrow(() => loadApiSurface()); + }); + + const pinned: ReadonlyArray<{ spec: string; op: string; name: string }> = [ + { spec: 'field-operations-api', op: 'GET /fieldOperations/{operationId}', name: 'get' }, + { spec: 'field-operations-api', op: 'GET /fieldOps/{operationId}', name: 'getFieldops' }, + { + spec: 'field-operations-api', + op: 'GET /organizations/{orgId}/fields/{fieldId}/fieldOperations', + name: 'list', + }, + { spec: 'equipment', op: 'GET /equipment', name: 'get' }, + { spec: 'equipment', op: 'GET /equipment/{id}', name: 'getEquipment' }, + { spec: 'products', op: 'GET /organizations/{organizationId}/varieties', name: 'list' }, + { + spec: 'products', + op: 'GET /organizations/{organizationId}/varieties/{erid}', + name: 'get', + }, + // Sibling operations sharing a normalized identity (GET /cropTypes/{_}), + // distinguished only by exact raw path: the real-world case the + // manifest's ambiguous-group rule exists to support. + { spec: 'crop-types', op: 'GET /cropTypes/{name}', name: 'get' }, + { spec: 'crop-types', op: 'GET /cropTypes/{id}', name: 'getCroptypes' }, + ]; + + for (const { spec, op, name } of pinned) { + it(`pins ${spec}: ${op} -> ${name}`, () => { + const surface = loadApiSurface(); + const entry = (surface.specs[spec] ?? []).find((e) => e.op === op); + assert.ok(entry, `no entry found for ${op} in spec "${spec}"`); + assert.strictEqual(entry?.name, name); + }); + } + + it('pins the equipment counter-quirk names (getEquipmentisgtypes, getEquipmentisgtypes2, getEquipmentmodels2)', () => { + const surface = loadApiSurface(); + const names = new Set((surface.specs.equipment ?? []).map((entry) => entry.name)); + assert.ok(names.has('getEquipmentisgtypes'), 'missing getEquipmentisgtypes'); + assert.ok(names.has('getEquipmentisgtypes2'), 'missing getEquipmentisgtypes2'); + assert.ok(names.has('getEquipmentmodels2'), 'missing getEquipmentmodels2'); + }); + + it('no spec contains an entry named listAll (always a derived twin, never pinned)', () => { + const surface = loadApiSurface(); + for (const [specName, entries] of Object.entries(surface.specs)) { + for (const entry of entries) { + assert.notStrictEqual(entry.name, 'listAll', `${specName}: ${entry.op} is named listAll`); + } + } + }); + + it('has at least 120 total entries across all specs (floor, not exact match, so future additive syncs do not break this test)', () => { + const surface = loadApiSurface(); + const total = Object.values(surface.specs).reduce((sum, entries) => sum + entries.length, 0); + assert.ok(total >= 120, `expected >= 120 total entries, got ${total}`); + }); +}); diff --git a/tests/api-surface.test.ts b/tests/api-surface.test.ts new file mode 100644 index 0000000..1d1b253 --- /dev/null +++ b/tests/api-surface.test.ts @@ -0,0 +1,995 @@ +/** + * Unit + property tests for scripts/lib/api-surface.ts. + * + * The library is the committed operation-identity manifest: it maps + * (HTTP method, normalized path) to public method names so an upstream spec + * reorder cannot silently rebind a name. These tests cover loader validation, + * deterministic serialization + round-trip, shared op extraction, the + * deterministic name proposer, order-independent resolution, and run + * classification. Style follows tests/fix-specs-embed.test.ts (node:test + + * node:assert + mkdtempSync for the file-backed cases) and tests/fuzz.test.ts + * (fast-check properties). + */ + +import assert from 'node:assert'; +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { describe, it } from 'node:test'; +import * as fc from 'fast-check'; +import { + type ApiSurface, + buildSyncReport, + classifyRun, + extractOps, + loadApiSurface, + normalizePathPattern, + opKey, + proposeName, + resolveMethodNames, + type SurfaceOp, + serializeApiSurface, +} from '../scripts/lib/api-surface.js'; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +function withTempDir(fn: (dir: string) => T): T { + const dir = mkdtempSync(join(tmpdir(), 'api-surface-test-')); + try { + return fn(dir); + } finally { + rmSync(dir, { recursive: true, force: true }); + } +} + +/** Write manifest YAML text to a temp file and load it through loadApiSurface. */ +function loadYaml(text: string): ApiSurface { + return withTempDir((dir) => { + const p = join(dir, 'api-surface.yaml'); + writeFileSync(p, text, 'utf-8'); + return loadApiSurface(p); + }); +} + +/** Deterministic LCG-backed Fisher-Yates shuffle for order-independence checks. */ +function seededShuffle(arr: readonly T[], seed: number): T[] { + const out = [...arr]; + let state = seed >>> 0 || 1; + const next = (): number => { + state = (Math.imul(state, 1664525) + 1013904223) >>> 0; + return state / 4294967296; + }; + for (let i = out.length - 1; i > 0; i--) { + const j = Math.floor(next() * (i + 1)); + const tmp = out[i]; + out[i] = out[j]; + out[j] = tmp; + } + return out; +} + +// --------------------------------------------------------------------------- +// normalizePathPattern + opKey +// --------------------------------------------------------------------------- + +describe('normalizePathPattern + opKey', () => { + it('collapses every path param to {_}', () => { + assert.strictEqual( + normalizePathPattern('/orgs/{orgId}/fields/{fieldId}'), + '/orgs/{_}/fields/{_}' + ); + assert.strictEqual(normalizePathPattern('/equipment'), '/equipment'); + }); + + it('opKey uppercases the method and normalizes the path', () => { + assert.strictEqual(opKey('get', '/fieldOperations/{operationId}'), 'GET /fieldOperations/{_}'); + }); + + it('param-name churn does not change identity ({orgId} == {organizationId})', () => { + assert.strictEqual(opKey('GET', '/orgs/{orgId}'), opKey('get', '/orgs/{organizationId}')); + }); +}); + +// --------------------------------------------------------------------------- +// loadApiSurface: happy path + validation failures +// --------------------------------------------------------------------------- + +describe('loadApiSurface', () => { + it('parses a valid manifest', () => { + const surface = loadYaml(` +version: 1 +specs: + field-operations-api: + - op: GET /fieldOperations/{operationId} + name: get + - op: POST /fieldOperations + name: create + organizations: + - op: GET /organizations + name: list +`); + assert.strictEqual(surface.version, 1); + assert.deepStrictEqual(Object.keys(surface.specs).sort(), [ + 'field-operations-api', + 'organizations', + ]); + assert.deepStrictEqual(surface.specs['field-operations-api'], [ + { op: 'GET /fieldOperations/{operationId}', name: 'get' }, + { op: 'POST /fieldOperations', name: 'create' }, + ]); + }); + + it('throws a clear error when the manifest file is missing (points at git history, not a seed script)', () => { + withTempDir((dir) => { + const missing = join(dir, 'nope.yaml'); + assert.throws( + () => loadApiSurface(missing), + (err: Error) => { + assert.match(err.message, /manifest file missing/); + assert.match(err.message, /committed and version-controlled/); + assert.match(err.message, /git history/); + // The seed script was deleted; the remediation must not point at it. + assert.doesNotMatch(err.message, /seed-api-surface/); + assert.match(err.message, /nope\.yaml/); + return true; + } + ); + }); + }); + + it('throws on unparseable YAML', () => { + assert.throws(() => loadYaml('version: 1\nspecs:\n : broken:\n : :'), /unparseable YAML/); + }); + + it('throws when version is not 1', () => { + assert.throws(() => loadYaml('version: 2\nspecs: {}'), /unsupported version/); + }); + + it('throws when specs is not a mapping', () => { + assert.throws(() => loadYaml('version: 1\nspecs: not-a-map'), /"specs".*must be a mapping/); + }); + + it('throws when a spec does not map to an array', () => { + assert.throws( + () => loadYaml('version: 1\nspecs:\n equipment: not-an-array'), + /spec "equipment".*must map to an array/ + ); + }); + + it('throws when an entry is missing op', () => { + assert.throws( + () => loadYaml('version: 1\nspecs:\n equipment:\n - name: get'), + (err: Error) => { + assert.match(err.message, /spec "equipment" entry\[0\]/); + assert.match(err.message, /"op" must be a non-empty string/); + return true; + } + ); + }); + + it('throws when an entry is missing name', () => { + assert.throws( + () => loadYaml('version: 1\nspecs:\n equipment:\n - op: GET /equipment'), + /"name" must be a non-empty string/ + ); + }); + + it('throws when op is not METHOD /path (bad method)', () => { + assert.throws( + () => + loadYaml('version: 1\nspecs:\n equipment:\n - op: FETCH /equipment\n name: get'), + (err: Error) => { + assert.match(err.message, /spec "equipment" entry\[0\]/); + assert.match(err.message, /must be "METHOD \/path"/); + return true; + } + ); + }); + + it('throws when op has no leading-slash path', () => { + assert.throws( + () => loadYaml('version: 1\nspecs:\n equipment:\n - op: GET equipment\n name: get'), + /must be "METHOD \/path"/ + ); + }); + + it('loads sibling entries sharing a normalized key when their raw paths differ', () => { + // crop-types declares GET /cropTypes/{name} and GET /cropTypes/{id} as two + // distinct operations. Both normalize to GET /cropTypes/{_}, but their raw + // paths differ, so the manifest may legally carry both: param names are the + // only feature distinguishing these siblings. + const surface = loadYaml(` +version: 1 +specs: + crop-types: + - op: GET /cropTypes/{name} + name: get + - op: GET /cropTypes/{id} + name: getCroptypes +`); + assert.deepStrictEqual(surface.specs['crop-types'], [ + { op: 'GET /cropTypes/{name}', name: 'get' }, + { op: 'GET /cropTypes/{id}', name: 'getCroptypes' }, + ]); + }); + + it('throws on a duplicate raw op string within a spec (identical method + exact path)', () => { + assert.throws( + () => + loadYaml(` +version: 1 +specs: + crop-types: + - op: GET /cropTypes/{name} + name: getA + - op: GET /cropTypes/{name} + name: getB +`), + (err: Error) => { + assert.match(err.message, /spec "crop-types"/); + assert.match(err.message, /duplicate operation/); + return true; + } + ); + }); + + it('throws on duplicate name within a spec', () => { + assert.throws( + () => + loadYaml(` +version: 1 +specs: + organizations: + - op: GET /a + name: same + - op: GET /b + name: same +`), + (err: Error) => { + assert.match(err.message, /spec "organizations"/); + assert.match(err.message, /duplicate method name "same"/); + return true; + } + ); + }); + + it('throws when name does not match /^[a-z][a-zA-Z0-9]*$/', () => { + assert.throws( + () => loadYaml('version: 1\nspecs:\n equipment:\n - op: GET /equipment\n name: Bad'), + /name "Bad" must match/ + ); + }); + + it('throws when name collides with a generated class field (spec)', () => { + assert.throws( + () => + loadYaml('version: 1\nspecs:\n equipment:\n - op: GET /equipment\n name: spec'), + (err: Error) => { + assert.match(err.message, /collides with a generated class field/); + assert.match(err.message, /"spec"/); + return true; + } + ); + }); + + it('throws when a name is listAll (reserved for the derived twin)', () => { + assert.throws( + () => + loadYaml('version: 1\nspecs:\n equipment:\n - op: GET /equipment\n name: listAll'), + (err: Error) => { + assert.match(err.message, /listAll/); + assert.match(err.message, /derived/); + return true; + } + ); + }); +}); + +// --------------------------------------------------------------------------- +// serializeApiSurface + round-trip +// --------------------------------------------------------------------------- + +describe('serializeApiSurface', () => { + const canonical: ApiSurface = { + version: 1, + specs: { + equipment: [ + { op: 'GET /equipment', name: 'get' }, + { op: 'GET /equipmentMakes', name: 'list' }, + ], + 'field-operations-api': [ + { op: 'GET /fieldOperations/{operationId}', name: 'get' }, + { op: 'POST /fieldOperations', name: 'create' }, + ], + }, + }; + + it('round-trips: load(serialize(x)) deep-equals a canonical x', () => { + const loaded = loadYaml(serializeApiSurface(canonical)); + assert.deepStrictEqual(loaded, canonical); + }); + + it('canonicalizes ordering: specs sorted, entries sorted by opKey', () => { + const shuffled: ApiSurface = { + version: 1, + specs: { + 'field-operations-api': [ + { op: 'POST /fieldOperations', name: 'create' }, + { op: 'GET /fieldOperations/{operationId}', name: 'get' }, + ], + equipment: [ + { op: 'GET /equipmentMakes', name: 'list' }, + { op: 'GET /equipment', name: 'get' }, + ], + }, + }; + // Same content in a different order serializes byte-identically. + assert.strictEqual(serializeApiSurface(shuffled), serializeApiSurface(canonical)); + // And is stable across repeated calls. + assert.strictEqual(serializeApiSurface(canonical), serializeApiSurface(canonical)); + }); + + it('emits the fixed header runbook and never a dash', () => { + const out = serializeApiSurface(canonical); + assert.match(out, /Operation identity/); + assert.match(out, /REGENERATED/); + assert.match(out, /renamed/); + assert.match(out, /removed/); + assert.match(out, /camel/); + assert.match(out, /listAll/); + // The identity paragraph states the sibling-param exception (crop-types). + assert.match(out, /sibling operations/); + assert.match(out, /cropTypes/); + assert.ok(!out.includes('—') && !out.includes('–'), 'no em or en dashes in header'); + assert.ok(!out.includes(' -- '), 'no dash-substitute in header'); + }); +}); + +// --------------------------------------------------------------------------- +// extractOps +// --------------------------------------------------------------------------- + +describe('extractOps', () => { + it('synthesizes operationIds, flags isCollection, and honors explicit ids', () => { + const spec = { + paths: { + '/widgets': { + get: {}, // no operationId -> synthesized; collection GET + post: { operationId: 'createWidget' }, // POST -> not a collection + }, + '/widgets/{id}': { + get: { operationId: 'getWidgetById' }, // item GET -> not a collection + }, + }, + }; + const ops = extractOps(spec); + const byKey = new Map(ops.map((o) => [`${o.method.toUpperCase()} ${o.path}`, o])); + + const list = byKey.get('GET /widgets'); + assert.ok(list); + assert.strictEqual(list.operationId, 'getwidgets'); + assert.strictEqual(list.isCollection, true); + + const create = byKey.get('POST /widgets'); + assert.ok(create); + assert.strictEqual(create.operationId, 'createWidget'); + assert.strictEqual(create.isCollection, false); + + const item = byKey.get('GET /widgets/{id}'); + assert.ok(item); + assert.strictEqual(item.operationId, 'getWidgetById'); + assert.strictEqual(item.isCollection, false); + }); + + it('tolerates missing / empty / malformed paths', () => { + assert.deepStrictEqual(extractOps({}), []); + assert.deepStrictEqual(extractOps({ paths: {} }), []); + assert.deepStrictEqual(extractOps({ paths: null }), []); + assert.deepStrictEqual(extractOps(null), []); + assert.deepStrictEqual(extractOps('nope'), []); + }); +}); + +// --------------------------------------------------------------------------- +// proposeName +// --------------------------------------------------------------------------- + +describe('proposeName', () => { + const empty = new Set(); + + it('maps verbs by method, splitting GET on isCollection', () => { + assert.strictEqual( + proposeName({ operationId: '', method: 'get', path: '/widgets', isCollection: true }, empty), + 'listWidgets' + ); + assert.strictEqual( + proposeName( + { operationId: '', method: 'get', path: '/widgets/{id}', isCollection: false }, + empty + ), + 'getWidgets' + ); + assert.strictEqual( + proposeName( + { operationId: '', method: 'post', path: '/widgets', isCollection: false }, + empty + ), + 'createWidgets' + ); + assert.strictEqual( + proposeName( + { operationId: '', method: 'put', path: '/widgets/{id}', isCollection: false }, + empty + ), + 'updateWidgets' + ); + assert.strictEqual( + proposeName( + { operationId: '', method: 'patch', path: '/widgets/{id}', isCollection: false }, + empty + ), + 'patchWidgets' + ); + assert.strictEqual( + proposeName( + { operationId: '', method: 'delete', path: '/widgets/{id}', isCollection: false }, + empty + ), + 'deleteWidgets' + ); + }); + + it('preserves interior camel humps (unlike legacy toPascalCase)', () => { + assert.strictEqual( + proposeName( + { operationId: '', method: 'get', path: '/measurementTypes', isCollection: true }, + empty + ), + 'listMeasurementTypes' + ); + assert.strictEqual( + proposeName( + { operationId: '', method: 'get', path: '/equipmentISGTypes', isCollection: true }, + empty + ), + 'listEquipmentISGTypes' + ); + }); + + it('walks the tiebreak chain: base -> two-segment -> full path -> By', () => { + const op: SurfaceOp = { + operationId: '', + method: 'get', + path: '/alpha/beta/gamma/{id}', + isCollection: false, + }; + assert.strictEqual(proposeName(op, new Set()), 'getGamma'); + assert.strictEqual(proposeName(op, new Set(['getGamma'])), 'getBetaGamma'); + assert.strictEqual(proposeName(op, new Set(['getGamma', 'getBetaGamma'])), 'getAlphaBetaGamma'); + assert.strictEqual( + proposeName(op, new Set(['getGamma', 'getBetaGamma', 'getAlphaBetaGamma'])), + 'getAlphaBetaGammaById' + ); + }); + + it('never returns a bare verb: pathless-of-segments falls back to Item, then By', () => { + const op: SurfaceOp = { operationId: '', method: 'get', path: '/{id}', isCollection: false }; + assert.strictEqual(proposeName(op, new Set()), 'getItem'); + assert.strictEqual(proposeName(op, new Set(['getItem'])), 'getItemById'); + }); + + it('throws when every candidate is taken, naming the op and the candidates', () => { + const op: SurfaceOp = { + operationId: '', + method: 'get', + path: '/alpha/beta/gamma/{id}', + isCollection: false, + }; + const taken = new Set([ + 'getGamma', + 'getBetaGamma', + 'getAlphaBetaGamma', + 'getAlphaBetaGammaById', + ]); + assert.throws( + () => proposeName(op, taken), + (err: Error) => { + assert.match(err.message, /GET \/alpha\/beta\/gamma\/\{_\}/); + assert.match(err.message, /getGamma/); + return true; + } + ); + }); +}); + +// --------------------------------------------------------------------------- +// resolveMethodNames +// --------------------------------------------------------------------------- + +describe('resolveMethodNames', () => { + it('pins to the manifest name even when the heuristic would differ', () => { + const surface: ApiSurface = { + version: 1, + specs: { + 'field-operations-api': [{ op: 'GET /fieldOperations/{operationId}', name: 'get' }], + }, + }; + const ops: SurfaceOp[] = [ + { + operationId: 'x', + method: 'get', + path: '/fieldOperations/{operationId}', + isCollection: false, + }, + ]; + const { names, newEntries, missing } = resolveMethodNames('field-operations-api', ops, surface); + // Heuristic would say getFieldOperations; the manifest pins it to get. + // names is keyed by the op's raw path (real param names), not the normalized key. + assert.strictEqual(names.get('GET /fieldOperations/{operationId}'), 'get'); + assert.deepStrictEqual(newEntries, []); + assert.deepStrictEqual(missing, []); + }); + + it('pins both sibling ops sharing a normalized key by exact raw path (crop-types shape)', () => { + const surface: ApiSurface = { + version: 1, + specs: { + 'crop-types': [ + { op: 'GET /cropTypes/{name}', name: 'get' }, + { op: 'GET /cropTypes/{id}', name: 'getCroptypes' }, + ], + }, + }; + const ops: SurfaceOp[] = [ + { operationId: 'a', method: 'get', path: '/cropTypes/{name}', isCollection: false }, + { operationId: 'b', method: 'get', path: '/cropTypes/{id}', isCollection: false }, + ]; + const { names, newEntries, missing } = resolveMethodNames('crop-types', ops, surface); + assert.strictEqual(names.get('GET /cropTypes/{name}'), 'get'); + assert.strictEqual(names.get('GET /cropTypes/{id}'), 'getCroptypes'); + assert.deepStrictEqual(newEntries, []); + assert.deepStrictEqual(missing, []); + }); + + it('surfaces a param rename inside an ambiguous group as breaking (exact match only)', () => { + // Manifest still declares both siblings; upstream renamed {id} -> {code}. + const surface: ApiSurface = { + version: 1, + specs: { + 'crop-types': [ + { op: 'GET /cropTypes/{name}', name: 'get' }, + { op: 'GET /cropTypes/{id}', name: 'getCroptypes' }, + ], + }, + }; + const ops: SurfaceOp[] = [ + { operationId: 'a', method: 'get', path: '/cropTypes/{name}', isCollection: false }, + { operationId: 'b', method: 'get', path: '/cropTypes/{code}', isCollection: false }, + ]; + const { names, newEntries, missing } = resolveMethodNames('crop-types', ops, surface); + // {name} still pins by exact match. + assert.strictEqual(names.get('GET /cropTypes/{name}'), 'get'); + // {id} entry has no exact op -> missing (the breaking signal). + assert.deepStrictEqual(missing, [{ op: 'GET /cropTypes/{id}', name: 'getCroptypes' }]); + // {code} op has no exact entry -> new. + assert.strictEqual(newEntries.length, 1); + assert.strictEqual(newEntries[0].op, 'GET /cropTypes/{code}'); + assert.strictEqual(names.get('GET /cropTypes/{code}'), newEntries[0].name); + assert.strictEqual(classifyRun({ newEntries, missing }), 'breaking'); + }); + + it('absorbs a param rename in a single-entry group (orgId -> organizationId)', () => { + const surface: ApiSurface = { + version: 1, + specs: { + 'field-operations-api': [{ op: 'GET /organizations/{orgId}/fields', name: 'listFields' }], + }, + }; + const ops: SurfaceOp[] = [ + { + operationId: 'x', + method: 'get', + path: '/organizations/{organizationId}/fields', + isCollection: true, + }, + ]; + const { names, newEntries, missing } = resolveMethodNames('field-operations-api', ops, surface); + // One entry + one op sharing a normalized key: the rename is absorbed silently. + assert.strictEqual(names.get('GET /organizations/{organizationId}/fields'), 'listFields'); + assert.deepStrictEqual(newEntries, []); + assert.deepStrictEqual(missing, []); + }); + + it('ambiguity growth: one entry vs two ops pins the exact match, flags the other new', () => { + const surface: ApiSurface = { + version: 1, + specs: { spec: [{ op: 'GET /x/{a}', name: 'foo' }] }, + }; + const ops: SurfaceOp[] = [ + { operationId: '1', method: 'get', path: '/x/{a}', isCollection: false }, + { operationId: '2', method: 'get', path: '/x/{b}', isCollection: false }, + ]; + const { names, newEntries, missing } = resolveMethodNames('spec', ops, surface); + assert.strictEqual(names.get('GET /x/{a}'), 'foo'); // exact match pins + assert.deepStrictEqual(missing, []); + assert.strictEqual(newEntries.length, 1); + assert.strictEqual(newEntries[0].op, 'GET /x/{b}'); // no exact entry -> new + assert.strictEqual(classifyRun({ newEntries, missing }), 'additive'); + }); + + it('ambiguity growth with no exact match: the entry is missing and both ops are new', () => { + const surface: ApiSurface = { + version: 1, + specs: { spec: [{ op: 'GET /x/{a}', name: 'foo' }] }, + }; + const ops: SurfaceOp[] = [ + { operationId: '1', method: 'get', path: '/x/{b}', isCollection: false }, + { operationId: '2', method: 'get', path: '/x/{c}', isCollection: false }, + ]; + const { newEntries, missing } = resolveMethodNames('spec', ops, surface); + // Two ops make the group ambiguous; the single entry has no exact-path op. + assert.deepStrictEqual(missing, [{ op: 'GET /x/{a}', name: 'foo' }]); + assert.deepStrictEqual(newEntries.map((e) => e.op).sort(), ['GET /x/{b}', 'GET /x/{c}']); + assert.strictEqual(classifyRun({ newEntries, missing }), 'breaking'); + }); + + it('proposes names for new ops and reports them as newEntries', () => { + const surface: ApiSurface = { version: 1, specs: {} }; + const ops: SurfaceOp[] = [ + { operationId: 'x', method: 'get', path: '/widgets', isCollection: true }, + ]; + const { names, newEntries, missing } = resolveMethodNames('spec', ops, surface); + assert.strictEqual(names.get('GET /widgets'), 'listWidgets'); + assert.deepStrictEqual(newEntries, [{ op: 'GET /widgets', name: 'listWidgets' }]); + assert.deepStrictEqual(missing, []); + assert.strictEqual(classifyRun({ newEntries, missing }), 'additive'); + }); + + it('reports manifest entries with no matching op as missing (breaking)', () => { + const surface: ApiSurface = { + version: 1, + specs: { spec: [{ op: 'GET /gone', name: 'listGone' }] }, + }; + const { missing } = resolveMethodNames('spec', [], surface); + assert.deepStrictEqual(missing, [{ op: 'GET /gone', name: 'listGone' }]); + assert.strictEqual(classifyRun({ newEntries: [], missing }), 'breaking'); + }); + + it('lets an implied listAll twin block a colliding proposal', () => { + const surface: ApiSurface = { + version: 1, + specs: { spec: [{ op: 'GET /widgets', name: 'list' }] }, + }; + const ops: SurfaceOp[] = [ + // Pinned collection GET named list -> reserves the derived listAll twin. + { operationId: 'a', method: 'get', path: '/widgets', isCollection: true }, + // New collection GET whose natural candidate is listAll -> must skip past it. + { operationId: 'b', method: 'get', path: '/things/all', isCollection: true }, + ]; + const { names, newEntries } = resolveMethodNames('spec', ops, surface); + assert.strictEqual(names.get('GET /widgets'), 'list'); + assert.strictEqual(names.get('GET /things/all'), 'listThingsAll'); + assert.deepStrictEqual(newEntries, [{ op: 'GET /things/all', name: 'listThingsAll' }]); + }); +}); + +// --------------------------------------------------------------------------- +// classifyRun +// --------------------------------------------------------------------------- + +describe('classifyRun', () => { + it('is breaking when anything is missing (even with new ops)', () => { + assert.strictEqual(classifyRun({ newEntries: [{}], missing: [{}] }), 'breaking'); + assert.strictEqual(classifyRun({ newEntries: [], missing: [{}] }), 'breaking'); + }); + it('is additive when there are new ops and nothing missing', () => { + assert.strictEqual(classifyRun({ newEntries: [{}], missing: [] }), 'additive'); + }); + it('is benign when nothing is new or missing', () => { + assert.strictEqual(classifyRun({ newEntries: [], missing: [] }), 'benign'); + }); +}); + +// --------------------------------------------------------------------------- +// buildSyncReport +// --------------------------------------------------------------------------- + +describe('buildSyncReport', () => { + it('classifies empty input as benign with two empty arrays', () => { + const report = buildSyncReport([]); + assert.strictEqual(report.classification, 'benign'); + assert.deepStrictEqual(report.newOperations, []); + assert.deepStrictEqual(report.missingOperations, []); + }); + + it('classifies new-only as additive and carries the additions', () => { + const report = buildSyncReport([ + { + specName: 'equipment', + newEntries: [{ op: 'GET /widgets', name: 'listWidgets' }], + missing: [], + }, + ]); + assert.strictEqual(report.classification, 'additive'); + assert.deepStrictEqual(report.newOperations, [ + { spec: 'equipment', method: 'GET', path: '/widgets', name: 'listWidgets' }, + ]); + assert.deepStrictEqual(report.missingOperations, []); + }); + + it('classifies any missing as breaking, even alongside new entries', () => { + const report = buildSyncReport([ + { + specName: 'field-operations-api', + newEntries: [{ op: 'POST /fieldOperations', name: 'create' }], + missing: [{ op: 'GET /fieldOps/{operationId}', name: 'getFieldops' }], + }, + ]); + assert.strictEqual(report.classification, 'breaking'); + assert.deepStrictEqual(report.missingOperations, [ + { + spec: 'field-operations-api', + method: 'GET', + path: '/fieldOps/{operationId}', + name: 'getFieldops', + }, + ]); + }); + + it('splits each op display string into method and path (paths with params intact)', () => { + const report = buildSyncReport([ + { + specName: 'fields', + newEntries: [{ op: 'DELETE /organizations/{orgId}/fields/{fieldId}', name: 'delete' }], + missing: [], + }, + ]); + assert.deepStrictEqual(report.newOperations[0], { + spec: 'fields', + method: 'DELETE', + path: '/organizations/{orgId}/fields/{fieldId}', + name: 'delete', + }); + }); + + it('sorts newOperations by (spec, method, path) across specs', () => { + const report = buildSyncReport([ + { specName: 'zeta', newEntries: [{ op: 'GET /b', name: 'getB' }], missing: [] }, + { + specName: 'alpha', + newEntries: [ + { op: 'POST /a', name: 'createA' }, + { op: 'GET /a', name: 'getA' }, + ], + missing: [], + }, + ]); + assert.deepStrictEqual( + report.newOperations.map((o) => `${o.spec} ${o.method} ${o.path}`), + ['alpha GET /a', 'alpha POST /a', 'zeta GET /b'] + ); + }); + + it('sorts missingOperations by (spec, method, path) across specs', () => { + const report = buildSyncReport([ + { specName: 'zeta', newEntries: [], missing: [{ op: 'GET /z', name: 'getZ' }] }, + { + specName: 'alpha', + newEntries: [], + missing: [ + { op: 'GET /m', name: 'getM' }, + { op: 'DELETE /m', name: 'deleteM' }, + ], + }, + ]); + assert.deepStrictEqual( + report.missingOperations.map((o) => `${o.spec} ${o.method} ${o.path}`), + ['alpha DELETE /m', 'alpha GET /m', 'zeta GET /z'] + ); + }); +}); + +// --------------------------------------------------------------------------- +// Property tests (class-elimination law + collision-freedom) +// --------------------------------------------------------------------------- + +interface OpShape { + method: SurfaceOp['method']; + tailSegs: string[]; + params: string[]; +} + +const methodArb = fc.constantFrom('get', 'post', 'put', 'patch', 'delete'); +const segArb = fc.constantFrom( + 'widgets', + 'fields', + 'equipment', + 'measurementTypes', + 'all', + 'types' +); +const paramArb = fc.constantFrom('id', 'orgId', 'fieldId'); + +const shapeArb = fc.record({ + method: methodArb, + tailSegs: fc.array(segArb, { maxLength: 2 }), + params: fc.array(paramArb, { maxLength: 2 }), +}); + +/** + * A unique per-index leading segment (`r${i}`) guarantees every generated op + * has a distinct opKey and a distinct full-path proposal candidate, so the + * proposer never exhausts (no spurious throws inside the properties). + */ +function shapeToOp(i: number, shape: OpShape): SurfaceOp { + const parts = [`r${i}`, ...shape.tailSegs]; + let path = `/${parts.join('/')}`; + for (const p of shape.params) path += `/{${p}}`; + const lastSegment = path.split('/').pop() || ''; + return { + operationId: `op${i}`, + method: shape.method, + path, + isCollection: shape.method === 'get' && !lastSegment.startsWith('{'), + }; +} + +const opsArb = fc + .array(shapeArb, { minLength: 1, maxLength: 8 }) + .map((shapes) => shapes.map((s, i) => shapeToOp(i, s))); + +function namesObject(spec: string, ops: SurfaceOp[], surface: ApiSurface): Record { + return Object.fromEntries(resolveMethodNames(spec, ops, surface).names); +} + +describe('resolveMethodNames properties', () => { + it('names are invariant under ops order (empty surface)', () => { + fc.assert( + fc.property(opsArb, fc.integer(), (ops, seed) => { + const surface: ApiSurface = { version: 1, specs: {} }; + assert.deepStrictEqual( + namesObject('spec', ops, surface), + namesObject('spec', seededShuffle(ops, seed), surface) + ); + }), + { numRuns: 60 } + ); + }); + + it('names are invariant under ops order (surface pinning a random subset)', () => { + fc.assert( + fc.property(opsArb, fc.integer(), fc.integer(), (ops, pinSeed, shufSeed) => { + const base = resolveMethodNames('spec', ops, { version: 1, specs: {} }).names; + let s = pinSeed >>> 0 || 1; + const pinned = ops + .filter(() => { + s = (Math.imul(s, 1664525) + 1013904223) >>> 0; + return s % 2 === 0; + }) + .map((op) => { + // names is keyed by the op's raw path, so pin against that key. + const raw = `${op.method.toUpperCase()} ${op.path}`; + return { op: raw, name: base.get(raw) as string }; + }); + const surface: ApiSurface = { version: 1, specs: { spec: pinned } }; + assert.deepStrictEqual( + namesObject('spec', ops, surface), + namesObject('spec', seededShuffle(ops, shufSeed), surface) + ); + }), + { numRuns: 60 } + ); + }); + + it('resolved names never collide with each other', () => { + fc.assert( + fc.property(opsArb, (ops) => { + const { names } = resolveMethodNames('spec', ops, { version: 1, specs: {} }); + const values = [...names.values()]; + assert.strictEqual(new Set(values).size, values.length); + }), + { numRuns: 60 } + ); + }); +}); + +// --------------------------------------------------------------------------- +// Property tests with SIBLING ops (same normalized key, distinct param names). +// These exercise the ambiguous-group matching branch: crop-types is the real +// case where two operations differ only by path-param name. +// --------------------------------------------------------------------------- + +/** Param names drawn from a set disjoint from paramArb, so a sibling's last + * param always differs from the base's and their raw paths are guaranteed + * distinct (never a same-raw-path duplicate). */ +const siblingParamArb = fc.constantFrom('name', 'code', 'key'); + +interface SiblingShape { + base: OpShape; + siblingParam: string | null; +} + +const siblingShapeArb = fc.record({ + base: shapeArb, + siblingParam: fc.option(siblingParamArb, { nil: null }), +}); + +/** + * Expand shapes into ops. For any base op that ends in a path param, optionally + * emit a SIBLING op with the last param renamed. The sibling shares the base's + * normalized key (all params collapse to {_}) but has a distinct raw path, so + * some generated ops share a normalized key while others do not. + */ +function shapesToOpsWithSiblings(shapes: SiblingShape[]): SurfaceOp[] { + const ops: SurfaceOp[] = []; + shapes.forEach((shape, i) => { + const base = shapeToOp(i, shape.base); + ops.push(base); + if (shape.siblingParam && base.path.endsWith('}')) { + const siblingPath = base.path.replace(/\{[^}]+\}$/, `{${shape.siblingParam}}`); + ops.push({ + operationId: `op${i}sibling`, + method: base.method, + path: siblingPath, + isCollection: false, + }); + } + }); + return ops; +} + +const opsWithSiblingsArb = fc + .array(siblingShapeArb, { minLength: 1, maxLength: 8 }) + .map(shapesToOpsWithSiblings); + +describe('resolveMethodNames properties with sibling ops', () => { + it('names are invariant under ops order when siblings share a normalized key (empty surface)', () => { + fc.assert( + fc.property(opsWithSiblingsArb, fc.integer(), (ops, seed) => { + const surface: ApiSurface = { version: 1, specs: {} }; + assert.deepStrictEqual( + namesObject('spec', ops, surface), + namesObject('spec', seededShuffle(ops, seed), surface) + ); + }), + { numRuns: 60 } + ); + }); + + it('names are invariant under ops order with siblings (surface pinning a random subset)', () => { + fc.assert( + fc.property(opsWithSiblingsArb, fc.integer(), fc.integer(), (ops, pinSeed, shufSeed) => { + const base = resolveMethodNames('spec', ops, { version: 1, specs: {} }).names; + let s = pinSeed >>> 0 || 1; + const pinned = ops + .filter(() => { + s = (Math.imul(s, 1664525) + 1013904223) >>> 0; + return s % 2 === 0; + }) + .map((op) => { + const raw = `${op.method.toUpperCase()} ${op.path}`; + return { op: raw, name: base.get(raw) as string }; + }); + const surface: ApiSurface = { version: 1, specs: { spec: pinned } }; + assert.deepStrictEqual( + namesObject('spec', ops, surface), + namesObject('spec', seededShuffle(ops, shufSeed), surface) + ); + }), + { numRuns: 60 } + ); + }); + + it('resolved names never collide even with sibling ops', () => { + fc.assert( + fc.property(opsWithSiblingsArb, (ops) => { + const { names } = resolveMethodNames('spec', ops, { version: 1, specs: {} }); + const values = [...names.values()]; + assert.strictEqual(new Set(values).size, values.length); + }), + { numRuns: 60 } + ); + }); +}); diff --git a/tests/fetched-spec-utils.test.ts b/tests/fetched-spec-utils.test.ts index 35f8871..9a367ad 100644 --- a/tests/fetched-spec-utils.test.ts +++ b/tests/fetched-spec-utils.test.ts @@ -1,18 +1,9 @@ import assert from 'node:assert'; import { describe, it } from 'node:test'; -import { normalizeSpecContent, validateFetchedSpec } from '../scripts/lib/fetched-spec-utils.js'; - -const allowedSlugs = new Set(['fields']); - -function validResponse(yml_content = "openapi: '3.0.0'\ninfo:\n title: Fields\npaths: {}\n") { - return [ - { - id: 123, - name: 'Fields', - yml_content, - }, - ]; -} +import { + normalizeSpecContent, + validateFetchedSpecDocs, +} from '../scripts/lib/fetched-spec-utils.js'; describe('fetched spec utilities', () => { describe('normalizeSpecContent', () => { @@ -24,41 +15,111 @@ describe('fetched spec utilities', () => { }); }); - describe('validateFetchedSpec', () => { - it('accepts a known slug with a valid OpenAPI response payload', () => { - assert.deepStrictEqual(validateFetchedSpec('fields', validResponse(), allowedSlugs), { - slug: 'fields', - id: 123, - name: 'Fields', - ymlContent: "openapi: '3.0.0'\ninfo:\n title: Fields\npaths: {}\n", + describe('validateFetchedSpecDocs', () => { + const multiAllowed = new Set(['products']); + const varietiesYml = "openapi: '3.0.0'\ninfo:\n title: Varieties\npaths: {}\n"; + const chemicalsYml = + "openapi: '3.0.0'\ninfo:\n title: Chemicals\npaths:\n /chemicals:\n get:\n description: 'Email someone@deere.com for help'\n responses: {}\n"; + + function element( + id: number, + end_point_name: string, + yml_content: string + ): Record { + return { id, name: 'products', end_point_name, yml_content }; + } + + it('validates a single-document response the same way multi-document slugs are validated', () => { + const body = [element(1, 'varieties', varietiesYml)]; + const result = validateFetchedSpecDocs('products', body, multiAllowed); + assert.ok(result, 'expected a non-null array'); + assert.strictEqual(result.length, 1); + assert.deepStrictEqual(result[0], { + slug: 'products', + id: 1, + name: 'products', + endPointName: 'varieties', + ymlContent: varietiesYml, }); }); - it('rejects unexpected response shapes', () => { - assert.strictEqual(validateFetchedSpec('fields', {}, allowedSlugs), null); - assert.strictEqual(validateFetchedSpec('fields', [], allowedSlugs), null); - assert.strictEqual(validateFetchedSpec('fields', [{ id: '123' }], allowedSlugs), null); + it('validates every element, captures endPointName, and applies redaction', () => { + const body = [element(1, 'varieties', varietiesYml), element(2, 'chemicals', chemicalsYml)]; + const result = validateFetchedSpecDocs('products', body, multiAllowed); + assert.ok(result, 'expected a non-null array'); + assert.strictEqual(result.length, 2); + + assert.deepStrictEqual( + result.map((doc) => doc.endPointName), + ['varieties', 'chemicals'] + ); + assert.strictEqual(result[0].slug, 'products'); + assert.strictEqual(result[0].id, 1); + assert.strictEqual(result[0].name, 'products'); + + // Redaction ran on each element: the example email is rewritten. + assert.ok(result[1].ymlContent.includes('redacted@example.com')); + assert.ok(!result[1].ymlContent.includes('someone@deere.com')); + }); + + it('fails the whole slug (null) when one element is missing end_point_name', () => { + const body = [ + element(1, 'varieties', varietiesYml), + { id: 2, name: 'products', yml_content: varietiesYml }, + ]; + assert.strictEqual(validateFetchedSpecDocs('products', body, multiAllowed), null); }); - it('rejects empty or invalid OpenAPI content', () => { - assert.strictEqual(validateFetchedSpec('fields', validResponse(''), allowedSlugs), null); + it('fails the slug (null) when one element has an empty end_point_name', () => { + const body = [element(1, 'varieties', varietiesYml), element(2, '', varietiesYml)]; + assert.strictEqual(validateFetchedSpecDocs('products', body, multiAllowed), null); + }); + + it('fails the slug (null) when one element has an invalid field type', () => { + const body = [ + element(1, 'varieties', varietiesYml), + { id: '2', name: 'products', end_point_name: 'chemicals', yml_content: chemicalsYml }, + ]; + assert.strictEqual(validateFetchedSpecDocs('products', body, multiAllowed), null); + }); + + it('fails the slug (null) when one element is not an object', () => { + const body = [element(1, 'varieties', varietiesYml), 'not-an-object']; + assert.strictEqual(validateFetchedSpecDocs('products', body, multiAllowed), null); + }); + + it('fails the slug (null) when one element has empty or invalid OpenAPI content', () => { + const bodyWith = (yml_content: string) => [ + element(1, 'varieties', varietiesYml), + element(2, 'chemicals', yml_content), + ]; + assert.strictEqual(validateFetchedSpecDocs('products', bodyWith(''), multiAllowed), null); assert.strictEqual( - validateFetchedSpec('fields', validResponse('openapi: [\n'), allowedSlugs), + validateFetchedSpecDocs('products', bodyWith('openapi: [\n'), multiAllowed), null ); assert.strictEqual( - validateFetchedSpec( - 'fields', - validResponse('info:\n title: Missing version\npaths: {}\n'), - allowedSlugs + validateFetchedSpecDocs( + 'products', + bodyWith('info:\n title: Missing version\npaths: {}\n'), + multiAllowed ), null ); }); + it('returns null for an empty array', () => { + assert.strictEqual(validateFetchedSpecDocs('products', [], multiAllowed), null); + }); + + it('returns null for a non-array response body', () => { + assert.strictEqual(validateFetchedSpecDocs('products', {}, multiAllowed), null); + assert.strictEqual(validateFetchedSpecDocs('products', null, multiAllowed), null); + }); + it('throws on slugs outside the trusted local catalog', () => { assert.throws( - () => validateFetchedSpec('not-a-local-slug', validResponse(), allowedSlugs), + () => validateFetchedSpecDocs('not-a-local-slug', [], multiAllowed), /Unexpected API slug/ ); }); diff --git a/tests/fix-specs.test.ts b/tests/fix-specs.test.ts index e34959d..3f0d050 100644 --- a/tests/fix-specs.test.ts +++ b/tests/fix-specs.test.ts @@ -2,6 +2,7 @@ import assert from 'node:assert'; import { describe, it } from 'node:test'; import { isDocumentationKey, + restoreEquipmentItemRefs, sanitizePropertyKey, stripDocumentationMarkup, stripTypeDiscriminators, @@ -156,4 +157,115 @@ describe('fix-specs utilities', () => { assert.strictEqual(stripTypeDiscriminators({ components: {} }), 0); }); }); + + describe('restoreEquipmentItemRefs', () => { + interface ValuesEnvelope { + type?: string; + items?: { $ref?: string }; + } + type EnvelopeResponse = { + content: Record; + }; + // Mirror the two regressed 200 responses: a values-shaped envelope whose + // items ref JD's 2026-07 doc edit dropped down to a bare `type: array`. + function envelopeResponse(values: ValuesEnvelope = { type: 'array' }): EnvelopeResponse { + return { + content: { + 'application/json': { schema: { type: 'object', properties: { values } } }, + }, + }; + } + function itemsOf(response: EnvelopeResponse): { $ref?: string } | undefined { + return response.content['application/json'].schema.properties.values.items; + } + + it('restores the item ref when it is absent and the target schema is present', () => { + const getEquipment = envelopeResponse(); + const getEquipmentById = envelopeResponse(); + const spec = { + components: { + schemas: { equipmentForList: { type: 'object' }, equipment: { type: 'object' } }, + responses: { GetEquipment: getEquipment, GetEquipmentById: getEquipmentById }, + }, + }; + + const restored = restoreEquipmentItemRefs(spec); + + assert.strictEqual(restored, 2); + assert.deepStrictEqual(itemsOf(getEquipment), { + $ref: '#/components/schemas/equipmentForList', + }); + assert.deepStrictEqual(itemsOf(getEquipmentById), { + $ref: '#/components/schemas/equipment', + }); + }); + + it('no-ops when the item ref is already present (does not overwrite a repaired doc)', () => { + const getEquipment = envelopeResponse({ + items: { $ref: '#/components/schemas/equipmentForList' }, + }); + const spec = { + components: { + schemas: { equipmentForList: { type: 'object' } }, + responses: { GetEquipment: getEquipment }, + }, + }; + + assert.strictEqual(restoreEquipmentItemRefs(spec), 0); + // The pre-existing ref is preserved, not rewritten. + assert.deepStrictEqual(itemsOf(getEquipment), { + $ref: '#/components/schemas/equipmentForList', + }); + }); + + it('no-ops when the target schema is missing (never resurrects a dangling ref)', () => { + const getEquipment = envelopeResponse(); + const spec = { + components: { + schemas: {}, + responses: { GetEquipment: getEquipment }, + }, + }; + + assert.strictEqual(restoreEquipmentItemRefs(spec), 0); + assert.strictEqual(itemsOf(getEquipment), undefined); + }); + + it('touches only the two registered responses, leaving other envelopes alone', () => { + const getEquipment = envelopeResponse(); + const getEquipmentById = envelopeResponse(); + const somethingElse = envelopeResponse(); + const spec = { + components: { + schemas: { + equipmentForList: { type: 'object' }, + equipment: { type: 'object' }, + other: { type: 'object' }, + }, + responses: { + GetEquipment: getEquipment, + GetEquipmentById: getEquipmentById, + SomethingElse: somethingElse, + }, + }, + }; + + const restored = restoreEquipmentItemRefs(spec); + + assert.strictEqual(restored, 2); + assert.deepStrictEqual(itemsOf(getEquipment), { + $ref: '#/components/schemas/equipmentForList', + }); + assert.deepStrictEqual(itemsOf(getEquipmentById), { + $ref: '#/components/schemas/equipment', + }); + // An unregistered values-shaped response is left untouched. + assert.strictEqual(itemsOf(somethingElse), undefined); + }); + + it('is a no-op for specs without components.responses or components.schemas', () => { + assert.strictEqual(restoreEquipmentItemRefs({}), 0); + assert.strictEqual(restoreEquipmentItemRefs({ components: {} }), 0); + }); + }); }); diff --git a/tests/spec-canonicalize.test.ts b/tests/spec-canonicalize.test.ts new file mode 100644 index 0000000..489aef7 --- /dev/null +++ b/tests/spec-canonicalize.test.ts @@ -0,0 +1,431 @@ +/** + * Unit + property tests for scripts/lib/spec-canonicalize.ts. + * + * canonicalizeSpec sorts exactly two kinds of maps in a spec document (the + * top-level `paths` map and every category map under `components`) so a + * semantically null upstream reorder, like the one that started the June + * 2026 field-operations incident, produces a byte-identical file once + * stringified. stringifySpec pins the yaml emission options fix-specs.ts + * already uses, plus `aliasDuplicateObjects: false` so deduplicated shared + * object references never surface as YAML anchors. Style follows + * tests/api-surface.test.ts (node:test + node:assert + fast-check, seeded + * Fisher-Yates shuffle for order-independence checks). + */ + +import assert from 'node:assert'; +import { describe, it } from 'node:test'; +import * as fc from 'fast-check'; +import { canonicalizeSpec, stringifySpec } from '../scripts/lib/spec-canonicalize.js'; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** Deterministic LCG-backed Fisher-Yates shuffle (matches tests/api-surface.test.ts). */ +function seededShuffle(arr: readonly T[], seed: number): T[] { + const out = [...arr]; + let state = seed >>> 0 || 1; + const next = (): number => { + state = (Math.imul(state, 1664525) + 1013904223) >>> 0; + return state / 4294967296; + }; + for (let i = out.length - 1; i > 0; i--) { + const j = Math.floor(next() * (i + 1)); + const tmp = out[i]; + out[i] = out[j]; + out[j] = tmp; + } + return out; +} + +/** Rebuild an object with the same entries in a shuffled key insertion order. */ +function shuffleKeys(obj: Record, seed: number): Record { + const result: Record = {}; + for (const key of seededShuffle(Object.keys(obj), seed)) { + result[key] = obj[key]; + } + return result; +} + +// --------------------------------------------------------------------------- +// Spec-shaped generator, shared by the order-independence and idempotence +// properties. +// --------------------------------------------------------------------------- + +interface PathShape { + segments: string[]; + param: string | null; + methods: string[]; +} + +const segmentArb = fc.constantFrom( + 'orgs', + 'fields', + 'equipment', + 'measurementTypes', + 'operations', + 'assets' +); +const paramArb = fc.constantFrom('orgId', 'fieldId', 'id', 'assetId'); +const methodArb = fc.constantFrom('get', 'post', 'put', 'patch', 'delete'); + +const pathShapeArb: fc.Arbitrary = fc.record({ + segments: fc.array(segmentArb, { minLength: 1, maxLength: 2 }), + param: fc.option(paramArb, { nil: null }), + methods: fc.uniqueArray(methodArb, { minLength: 1, maxLength: 4 }), +}); + +/** A unique per-index leading segment guarantees every generated path is distinct. */ +function pathShapeToEntry(i: number, shape: PathShape): [string, Record] { + const parts = [`r${i}`, ...shape.segments]; + const path = shape.param ? `/${parts.join('/')}/{${shape.param}}` : `/${parts.join('/')}`; + const item: Record = {}; + for (const method of shape.methods) { + item[method] = { summary: `${method} ${path}`, operationId: `${method}${i}` }; + } + return [path, item]; +} + +interface CategoryShape { + category: string; + members: string[]; +} + +const categoryNameArb = fc.constantFrom( + 'schemas', + 'parameters', + 'responses', + 'requestBodies', + 'headers', + 'securitySchemes' +); +const memberNameArb = fc.constantFrom('Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta'); + +const categoryShapeArb: fc.Arbitrary = fc.record({ + category: categoryNameArb, + members: fc.uniqueArray(memberNameArb, { minLength: 1, maxLength: 4 }), +}); + +/** 2-3 categories with distinct names (selector dedupes on `category`). */ +const componentsShapeArb: fc.Arbitrary = fc.uniqueArray(categoryShapeArb, { + selector: (c) => c.category, + minLength: 2, + maxLength: 3, +}); + +function buildComponents(shape: readonly CategoryShape[]): Record { + const components: Record = {}; + for (const { category, members } of shape) { + const categoryObj: Record = {}; + members.forEach((member, i) => { + categoryObj[member] = { type: 'object', description: `${category}.${member}`, 'x-index': i }; + }); + components[category] = categoryObj; + } + return components; +} + +function buildSpec( + pathShapes: readonly PathShape[], + componentsShape: readonly CategoryShape[] +): { + openapi: string; + info: Record; + paths: Record; + components: Record; +} { + const paths: Record = {}; + pathShapes.forEach((shape, i) => { + const [path, item] = pathShapeToEntry(i, shape); + paths[path] = item; + }); + return { + openapi: '3.0.0', + info: { title: 'test-spec', version: '1.0.0' }, + paths, + components: buildComponents(componentsShape), + }; +} + +const specArb = fc.record({ + pathShapes: fc.array(pathShapeArb, { minLength: 1, maxLength: 6 }), + componentsShape: componentsShapeArb, +}); + +// --------------------------------------------------------------------------- +// Property: order independence (the reorder-immunity law the June 2026 +// incident motivated). +// --------------------------------------------------------------------------- + +describe('canonicalizeSpec + stringifySpec: order independence', () => { + it('a pure paths/components key reorder produces byte-identical stringified output', () => { + fc.assert( + fc.property( + specArb, + fc.integer(), + fc.integer(), + fc.integer(), + ({ pathShapes, componentsShape }, pathSeed, categorySeed, memberSeed) => { + const original = buildSpec(pathShapes, componentsShape); + + // Shuffle paths key order, components category order, and each + // category's own member key order: every reorder surface the June + // 2026 incident could recur on. + const shuffledPaths = shuffleKeys(original.paths, pathSeed); + const shuffledComponents = shuffleKeys(original.components, categorySeed); + let memberState = memberSeed >>> 0 || 1; + for (const category of Object.keys(shuffledComponents)) { + memberState = (Math.imul(memberState, 1664525) + 1013904223) >>> 0; + shuffledComponents[category] = shuffleKeys( + shuffledComponents[category] as Record, + memberState + ); + } + const shuffled = { ...original, paths: shuffledPaths, components: shuffledComponents }; + + assert.strictEqual( + stringifySpec(canonicalizeSpec(shuffled)), + stringifySpec(canonicalizeSpec(original)) + ); + } + ), + { numRuns: 60 } + ); + }); +}); + +// --------------------------------------------------------------------------- +// Idempotence +// --------------------------------------------------------------------------- + +describe('canonicalizeSpec: idempotence', () => { + it('canonicalizeSpec(canonicalizeSpec(x)) deep-equals canonicalizeSpec(x); stringify of both matches', () => { + fc.assert( + fc.property(specArb, ({ pathShapes, componentsShape }) => { + const original = buildSpec(pathShapes, componentsShape); + const once = canonicalizeSpec(original); + const twice = canonicalizeSpec(once); + assert.deepStrictEqual(twice, once); + assert.strictEqual(stringifySpec(twice), stringifySpec(once)); + }), + { numRuns: 60 } + ); + }); +}); + +// --------------------------------------------------------------------------- +// Non-target order preserved +// --------------------------------------------------------------------------- + +describe('canonicalizeSpec: preserves non-target ordering', () => { + it('keeps a path item method order exactly as declared (post, get, delete)', () => { + const doc = { + paths: { + '/widgets': { + post: { summary: 'create' }, + get: { summary: 'list' }, + delete: { summary: 'remove' }, + }, + }, + }; + const result = canonicalizeSpec(doc) as { paths: { '/widgets': Record } }; + assert.deepStrictEqual(Object.keys(result.paths['/widgets']), ['post', 'get', 'delete']); + }); + + it('keeps a schema property insertion order exactly as declared', () => { + const doc = { + components: { + schemas: { + Widget: { zeta: { type: 'string' }, alpha: { type: 'string' }, mid: { type: 'string' } }, + }, + }, + }; + const result = canonicalizeSpec(doc) as { + components: { schemas: { Widget: Record } }; + }; + assert.deepStrictEqual(Object.keys(result.components.schemas.Widget), ['zeta', 'alpha', 'mid']); + }); + + it('keeps a parameters array element order exactly as declared', () => { + const params = [{ name: 'z' }, { name: 'a' }, { name: 'm' }]; + const doc = { + paths: { + '/widgets': { + get: { parameters: params }, + }, + }, + }; + const result = canonicalizeSpec(doc) as { + paths: { '/widgets': { get: { parameters: Array<{ name: string }> } } }; + }; + assert.deepStrictEqual( + result.paths['/widgets'].get.parameters.map((p) => p.name), + ['z', 'a', 'm'] + ); + }); + + it('keeps servers array and info field order exactly as declared', () => { + const doc = { + info: { version: '1.0.0', title: 'Z-Spec' }, + servers: [{ url: 'https://b.deere.com' }, { url: 'https://a.deere.com' }], + }; + const result = canonicalizeSpec(doc) as { + info: Record; + servers: Array<{ url: string }>; + }; + assert.deepStrictEqual(Object.keys(result.info), ['version', 'title']); + assert.deepStrictEqual( + result.servers.map((s) => s.url), + ['https://b.deere.com', 'https://a.deere.com'] + ); + }); +}); + +// --------------------------------------------------------------------------- +// Missing / absent / malformed sections +// --------------------------------------------------------------------------- + +describe('canonicalizeSpec: tolerates missing, absent, or malformed sections', () => { + it('a doc without components is returned unchanged (paths still canonicalized)', () => { + const doc = { openapi: '3.0.0', paths: { '/b': {}, '/a': {} } }; + const result = canonicalizeSpec(doc) as { paths: Record }; + assert.deepStrictEqual(Object.keys(result.paths), ['/a', '/b']); + assert.ok(!('components' in (result as object))); + }); + + it('a doc without paths is returned unchanged (components still canonicalized)', () => { + const doc = { openapi: '3.0.0', components: { schemas: { B: {}, A: {} } } }; + const result = canonicalizeSpec(doc) as { components: { schemas: Record } }; + assert.deepStrictEqual(Object.keys(result.components.schemas), ['A', 'B']); + assert.ok(!('paths' in (result as object))); + }); + + it('scalar junk in the paths slot is tolerated and returned as-is, without throwing', () => { + assert.doesNotThrow(() => canonicalizeSpec({ paths: 'not-a-map' })); + const result = canonicalizeSpec({ paths: 'not-a-map' }) as { paths: unknown }; + assert.strictEqual(result.paths, 'not-a-map'); + }); + + it('scalar junk in the components slot is tolerated and returned as-is, without throwing', () => { + assert.doesNotThrow(() => canonicalizeSpec({ components: 42 })); + const result = canonicalizeSpec({ components: 42 }) as { components: unknown }; + assert.strictEqual(result.components, 42); + }); + + it('null paths/components are tolerated and returned as-is', () => { + const result = canonicalizeSpec({ paths: null, components: null }) as { + paths: unknown; + components: unknown; + }; + assert.strictEqual(result.paths, null); + assert.strictEqual(result.components, null); + }); + + // Beyond the paths/components slots: canonicalizeSpec's own signature takes + // `unknown`, so a caller could hand it a non-object doc entirely. It should + // not throw; it should hand the value straight back. + it('a non-object document is returned unchanged without throwing', () => { + assert.strictEqual(canonicalizeSpec('not-a-doc'), 'not-a-doc'); + assert.strictEqual(canonicalizeSpec(null), null); + assert.strictEqual(canonicalizeSpec(undefined), undefined); + assert.strictEqual(canonicalizeSpec(42), 42); + }); +}); + +// --------------------------------------------------------------------------- +// Input not mutated +// --------------------------------------------------------------------------- + +describe('canonicalizeSpec: does not mutate its input', () => { + it('the original document keeps its paths/components key order after canonicalize', () => { + const doc = { + paths: { '/z': {}, '/a': {}, '/m': {} }, + components: { + schemas: { Z: {}, A: {} }, + parameters: { B: {}, A: {} }, + }, + }; + const originalPathKeys = Object.keys(doc.paths); + const originalComponentKeys = Object.keys(doc.components); + const originalSchemaKeys = Object.keys(doc.components.schemas); + const originalParameterKeys = Object.keys(doc.components.parameters); + + const result = canonicalizeSpec(doc); + + // The original is untouched... + assert.deepStrictEqual(Object.keys(doc.paths), originalPathKeys); + assert.deepStrictEqual(Object.keys(doc.components), originalComponentKeys); + assert.deepStrictEqual(Object.keys(doc.components.schemas), originalSchemaKeys); + assert.deepStrictEqual(Object.keys(doc.components.parameters), originalParameterKeys); + // ...while the result actually is canonicalized (so this test would catch + // a no-op implementation that "preserves" input by never touching it). + const canonical = result as { + paths: Record; + components: Record; + }; + assert.deepStrictEqual(Object.keys(canonical.paths), ['/a', '/m', '/z']); + assert.deepStrictEqual(Object.keys(canonical.components), ['parameters', 'schemas']); + }); +}); + +// --------------------------------------------------------------------------- +// Anchor suppression +// --------------------------------------------------------------------------- + +describe('stringifySpec: alias/anchor suppression', () => { + it('a shared object reference in two schema slots is fully duplicated, never anchored/aliased', () => { + const shared = { type: 'object', properties: { name: { type: 'string' } } }; + const doc = { + components: { + schemas: { + A: shared, + B: shared, + }, + }, + }; + // Round-trips through canonicalizeSpec first, matching how task 8 will + // actually call this (canonicalize then stringify), so this also proves + // canonicalizeSpec's "shared by reference" contract survives into output. + const out = stringifySpec(canonicalizeSpec(doc)); + + assert.ok(!out.includes('&'), `expected no YAML anchor, got:\n${out}`); + assert.ok(!out.includes('*'), `expected no YAML alias, got:\n${out}`); + // Both slots carry the full content rather than one being a bare alias. + const nameOccurrences = out.match(/name:/g) ?? []; + assert.strictEqual(nameOccurrences.length, 2); + }); +}); + +// --------------------------------------------------------------------------- +// Options fidelity +// --------------------------------------------------------------------------- + +describe('stringifySpec: emission options fidelity', () => { + it('quotes plain strings with double quotes and never line-wraps a long value', () => { + const longDescription = + 'This description is intentionally long enough that the default eighty column fold width would wrap it onto a second line if lineWidth were not disabled for this stringifier.'; + const doc = { + components: { + schemas: { + Widget: { type: 'object', description: longDescription }, + }, + }, + }; + + const out = stringifySpec(doc); + + // defaultStringType: QUOTE_DOUBLE -> plain string scalars render quoted. + assert.ok(out.includes('type: "object"'), out); + // lineWidth: 0 -> no folding; the whole description stays one physical line. + assert.ok(out.includes(`description: "${longDescription}"`), out); + // defaultKeyType: PLAIN -> ordinary keys stay unquoted. + assert.ok(out.includes('Widget:'), out); + assert.ok(!out.includes('"Widget"'), out); + }); + + it('ends with exactly the trailing newline yaml.stringify itself produces', () => { + const out = stringifySpec({ a: 1 }); + assert.ok(out.endsWith('\n')); + assert.ok(!out.endsWith('\n\n')); + }); +}); diff --git a/tests/spec-merge.test.ts b/tests/spec-merge.test.ts new file mode 100644 index 0000000..31cf1ac --- /dev/null +++ b/tests/spec-merge.test.ts @@ -0,0 +1,810 @@ +/** + * Unit tests for scripts/lib/spec-merge.ts. + * + * mergeSpecDocs structurally merges the multiple OpenAPI documents the John + * Deere portal returns for one slug into a single spec object. The primary + * document (chosen by a repo-owned table, never portal array order) owns + * `info`, wins every deep-equal dedupe, and never has its components renamed, + * which protects the committed public type surface. Conflicting non-primary + * components are renamed with a `$ref` rewrite across that document's whole + * subtree, re-run to a fixpoint. Output is invariant under the input array + * order (the positional-coupling class this branch eliminates). + * + * Style follows tests/spec-canonicalize.ts and tests/api-surface.test.ts + * (node:test + node:assert, no `any`, byte-comparison via stringifySpec). + */ + +import assert from 'node:assert'; +import { describe, it } from 'node:test'; +import { stringifySpec } from '../scripts/lib/spec-canonicalize.js'; +import { mergeSpecDocs } from '../scripts/lib/spec-merge.js'; + +// --------------------------------------------------------------------------- +// Helpers (no `any`: navigate results with typed accessors) +// --------------------------------------------------------------------------- + +interface MergedSpec { + openapi?: string; + info?: Record; + paths?: Record>; + components?: { schemas?: Record; [category: string]: unknown }; + servers?: unknown[]; + tags?: Array<{ name?: string; [key: string]: unknown }>; + 'x-source-documents'?: Array<{ endPointName: string; id: number }>; + [key: string]: unknown; +} + +/** Walk a plain object/array tree by string keys (numeric keys index arrays). */ +function deepGet(root: unknown, path: readonly string[]): unknown { + let cur: unknown = root; + for (const key of path) { + if (Array.isArray(cur)) { + cur = cur[Number(key)]; + } else if (cur !== null && typeof cur === 'object') { + cur = (cur as Record)[key]; + } else { + return undefined; + } + } + return cur; +} + +function schemaNames(merged: MergedSpec): string[] { + return Object.keys(merged.components?.schemas ?? {}).sort(); +} + +function pathNames(merged: MergedSpec): string[] { + return Object.keys(merged.paths ?? {}).sort(); +} + +/** All permutations of a small array (used for the order-independence law). */ +function permutations(arr: readonly T[]): T[][] { + if (arr.length <= 1) return [[...arr]]; + const out: T[][] = []; + for (let i = 0; i < arr.length; i += 1) { + const rest = [...arr.slice(0, i), ...arr.slice(i + 1)]; + for (const p of permutations(rest)) out.push([arr[i], ...p]); + } + return out; +} + +// --------------------------------------------------------------------------- +// Single-doc passthrough and empty input +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: degenerate inputs', () => { + it('returns the single document unchanged and unstamped', () => { + const doc = { + openapi: '3.0.0', + info: { title: 'Fields' }, + paths: { '/fields': { get: { operationId: 'listFields' } } }, + }; + const result = mergeSpecDocs('fields', [{ endPointName: 'fields', id: 7, doc }]); + assert.strictEqual(result, doc, 'single-doc merge must return the same reference'); + assert.ok(!('x-source-documents' in (result as object)), 'single doc must not be stamped'); + }); + + it('throws when given zero documents', () => { + assert.throws(() => mergeSpecDocs('products', []), /no documents/i); + }); +}); + +// --------------------------------------------------------------------------- +// Paths union and method-level merge +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: paths', () => { + it('unions disjoint literal paths across two documents', () => { + const varieties = { + info: { title: 'Varieties' }, + paths: { '/varieties': { get: { operationId: 'listVarieties' } } }, + }; + const chemicals = { + info: { title: 'Chemicals' }, + paths: { '/chemicals': { get: { operationId: 'listChemicals' } } }, + }; + // Deliberately place the secondary first to prove array order is ignored. + const merged = mergeSpecDocs('products', [ + { endPointName: 'chemicals', id: 2, doc: chemicals }, + { endPointName: 'varieties', id: 1, doc: varieties }, + ]) as MergedSpec; + + assert.deepStrictEqual(pathNames(merged), ['/chemicals', '/varieties']); + assert.deepStrictEqual(merged.info, { title: 'Varieties' }, 'primary info wins'); + }); + + it('merges the same literal path method-by-method (GET primary + POST secondary)', () => { + const primary = { + info: { title: 'P' }, + paths: { '/x': { get: { operationId: 'getX' } } }, + }; + const secondary = { + info: { title: 'S' }, + paths: { '/x': { post: { operationId: 'postX' } } }, + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(Object.keys(merged.paths?.['/x'] ?? {}).sort(), ['get', 'post']); + }); + + it('dedupes an identical path+method declared in both docs (key order insensitive)', () => { + const primary = { + info: {}, + paths: { '/x': { get: { operationId: 'getX', summary: 'S', tags: ['a'] } } }, + }; + const secondary = { + info: {}, + // Same GET, keys in a different order: must dedupe to the primary copy. + paths: { '/x': { get: { tags: ['a'], summary: 'S', operationId: 'getX' } } }, + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(Object.keys(merged.paths?.['/x'] ?? {}), ['get']); + assert.strictEqual(deepGet(merged, ['paths', '/x', 'get', 'operationId']), 'getX'); + }); + + it('throws on the same path+method defined differently, naming both endpoints', () => { + const primary = { + info: {}, + paths: { '/x': { get: { operationId: 'getX', summary: 'one' } } }, + }; + const secondary = { + info: {}, + paths: { '/x': { get: { operationId: 'getX', summary: 'two' } } }, + }; + assert.throws( + () => + mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]), + (error: unknown) => + error instanceof Error && + /varieties/.test(error.message) && + /chemicals/.test(error.message) && + /\/x/.test(error.message) + ); + }); + + it('keeps normalized-pattern siblings as two distinct paths without error', () => { + // /x/{name} and /x/{id} share a normalized pattern but are different literal + // paths; the manifest's ambiguous-group matching resolves them downstream. + const primary = { info: {}, paths: { '/x/{name}': { get: { operationId: 'getByName' } } } }; + const secondary = { info: {}, paths: { '/x/{id}': { get: { operationId: 'getById' } } } }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(pathNames(merged), ['/x/{id}', '/x/{name}']); + }); +}); + +// --------------------------------------------------------------------------- +// Components: dedupe, conflict rename + $ref rewrite, fixpoint cascade +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: components', () => { + it('dedupes a deep-equal component (modulo key order), keeping the primary copy', () => { + const primary = { + info: {}, + paths: {}, + components: { + schemas: { + Money: { + type: 'object', + properties: { amount: { type: 'number' }, ccy: { type: 'string' } }, + }, + }, + }, + }; + const secondary = { + info: {}, + paths: {}, + components: { + schemas: { + Money: { + properties: { ccy: { type: 'string' }, amount: { type: 'number' } }, + type: 'object', + }, + }, + }, + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(schemaNames(merged), ['Money']); + }); + + it('renames a conflicting component and rewrites $ref in paths AND nested schemas', () => { + const primary = { + info: { title: 'Field Ops' }, + paths: {}, + components: { + schemas: { Error: { type: 'object', properties: { code: { type: 'integer' } } } }, + }, + }; + const secondary = { + info: {}, + paths: { + '/measurementTypes': { + get: { + responses: { + '400': { + content: { 'application/json': { schema: { $ref: '#/components/schemas/Error' } } }, + }, + }, + }, + }, + }, + components: { + schemas: { + // Differs from the primary Error, so it must be renamed. + Error: { type: 'object', properties: { message: { type: 'string' } } }, + // A nested $ref to Error, reachable only by the doc-wide subtree walk. + Wrapper: { type: 'object', properties: { err: { $ref: '#/components/schemas/Error' } } }, + }, + }, + }; + const merged = mergeSpecDocs('field-operations-api', [ + { endPointName: 'field-operation', id: 1, doc: primary }, + { endPointName: 'measurement-type', id: 2, doc: secondary }, + ]) as MergedSpec; + + // Primary Error kept untouched; secondary Error renamed with its suffix. + assert.deepStrictEqual(deepGet(merged, ['components', 'schemas', 'Error', 'properties']), { + code: { type: 'integer' }, + }); + assert.deepStrictEqual( + deepGet(merged, ['components', 'schemas', 'Error_MeasurementType', 'properties']), + { message: { type: 'string' } } + ); + // The path's $ref was rewritten. + assert.strictEqual( + deepGet(merged, [ + 'paths', + '/measurementTypes', + 'get', + 'responses', + '400', + 'content', + 'application/json', + 'schema', + '$ref', + ]), + '#/components/schemas/Error_MeasurementType' + ); + // The nested schema $ref was rewritten. + assert.strictEqual( + deepGet(merged, ['components', 'schemas', 'Wrapper', 'properties', 'err', '$ref']), + '#/components/schemas/Error_MeasurementType' + ); + }); + + it('runs the rename to a fixpoint (a dependent that was byte-equal is renamed too)', () => { + // Primary: S and X (X refs S). Secondary: S' (differs) and X' (byte-equal to + // primary X). Renaming S -> S_Suffix rewrites X''s ref, so X' now differs + // from primary X and must itself be renamed. + const primary = { + info: {}, + paths: {}, + components: { + schemas: { + S: { type: 'object', properties: { a: { type: 'string' } } }, + X: { type: 'object', properties: { s: { $ref: '#/components/schemas/S' } } }, + }, + }, + }; + const secondary = { + info: {}, + paths: {}, + components: { + schemas: { + S: { type: 'object', properties: { a: { type: 'number' } } }, + X: { type: 'object', properties: { s: { $ref: '#/components/schemas/S' } } }, + }, + }, + }; + const merged = mergeSpecDocs('field-operations-api', [ + { endPointName: 'field-operation', id: 1, doc: primary }, + { endPointName: 'measurement-type', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(schemaNames(merged), [ + 'S', + 'S_MeasurementType', + 'X', + 'X_MeasurementType', + ]); + // Primary copies are intact and still reference the original S. + assert.deepStrictEqual(deepGet(merged, ['components', 'schemas', 'S', 'properties', 'a']), { + type: 'string', + }); + assert.strictEqual( + deepGet(merged, ['components', 'schemas', 'X', 'properties', 's', '$ref']), + '#/components/schemas/S' + ); + // Renamed secondary S and the cascaded X pointing at it. + assert.deepStrictEqual( + deepGet(merged, ['components', 'schemas', 'S_MeasurementType', 'properties', 'a']), + { type: 'number' } + ); + assert.strictEqual( + deepGet(merged, ['components', 'schemas', 'X_MeasurementType', 'properties', 's', '$ref']), + '#/components/schemas/S_MeasurementType' + ); + }); + + it('throws when the rename target name is already taken by a non-equal component', () => { + const primary = { + info: {}, + paths: {}, + components: { + schemas: { + Error: { type: 'object', properties: { code: { type: 'integer' } } }, + // The name the secondary rename would target, already present and different. + Error_MeasurementType: { type: 'object', properties: { taken: { type: 'boolean' } } }, + }, + }, + }; + const secondary = { + info: {}, + paths: {}, + components: { + schemas: { Error: { type: 'object', properties: { message: { type: 'string' } } } }, + }, + }; + assert.throws( + () => + mergeSpecDocs('field-operations-api', [ + { endPointName: 'field-operation', id: 1, doc: primary }, + { endPointName: 'measurement-type', id: 2, doc: secondary }, + ]), + /collides|taken|resolve/i + ); + }); + + it('throws when the rename fixpoint exceeds its iteration cap', () => { + // A conflict that needs one rename, run with the cap forced to zero. + const primary = { + info: {}, + paths: {}, + components: { + schemas: { Error: { type: 'object', properties: { code: { type: 'integer' } } } }, + }, + }; + const secondary = { + info: {}, + paths: {}, + components: { + schemas: { Error: { type: 'object', properties: { message: { type: 'string' } } } }, + }, + }; + assert.throws( + () => + mergeSpecDocs( + 'field-operations-api', + [ + { endPointName: 'field-operation', id: 1, doc: primary }, + { endPointName: 'measurement-type', id: 2, doc: secondary }, + ], + { maxRenameIterations: 0 } + ), + /cap|fixpoint|exceed/i + ); + }); +}); + +// --------------------------------------------------------------------------- +// Servers +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: servers', () => { + it('keeps a servers block declared identically by both docs', () => { + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.servers, [{ url: 'https://api.deere.com/platform' }]); + }); + + it('inherits the declared servers block when a secondary omits servers', () => { + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const secondary = { info: {}, paths: {} }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.servers, [{ url: 'https://api.deere.com/platform' }]); + }); + + it('resolves platform-family host variants (api vs partnerapi) to the primary block', () => { + // The machine-locations case: location-history declares api.deere.com, + // breadcrumbs declares partnerapi.deere.com. Both are environment instances + // of the one platform family, so the primary (api) wins with no throw; + // fix-specs later normalizes the single static block to the templated form. + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://partnerapi.deere.com/platform' }], + }; + const merged = mergeSpecDocs('machine-locations', [ + { endPointName: 'location-history', id: 1, doc: primary }, + { endPointName: 'breadcrumbs', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.servers, [{ url: 'https://api.deere.com/platform' }]); + }); + + it('treats a bare deere.com host (no /platform path) as platform-family', () => { + // active-ingredients ships a defect: a deere.com host with no /platform + // path. It must count as platform-family (not a different family), so + // pairing it with a platform block does not throw and the primary wins. + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://sandboxapi.deere.com' }], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.servers, [{ url: 'https://sandboxapi.deere.com' }]); + }); + + it('resolves a templated + static platform mix to the primary block', () => { + const primary = { + info: {}, + paths: {}, + servers: [ + { + url: 'https://{environment}.deere.com/platform', + variables: { environment: { default: 'api', enum: ['api', 'sandboxapi'] } }, + }, + ], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.servers, [ + { + url: 'https://{environment}.deere.com/platform', + variables: { environment: { default: 'api', enum: ['api', 'sandboxapi'] } }, + }, + ]); + }); + + it('drops a placeholder-only servers block to non-declaring and warns', () => { + // The products `documents` case: a bare `https://server.com` editor default. + // It resolves to no deere.com host, so it is treated as non-declaring (it + // inherits the merged block) and surfaces a warning naming the slug and doc. + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://server.com', description: 'New server' }], + }; + const warnings: string[] = []; + const merged = mergeSpecDocs( + 'products', + [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'documents', id: 2, doc: secondary }, + ], + { onWarning: (message: string) => warnings.push(message) } + ) as MergedSpec; + + // The placeholder block is ignored; the primary's block is the merged servers. + assert.deepStrictEqual(merged.servers, [{ url: 'https://api.deere.com/platform' }]); + // Exactly one warning, naming the slug, the offending doc, and the junk url. + assert.strictEqual(warnings.length, 1); + assert.ok(/products/.test(warnings[0]), 'warning names the slug'); + assert.ok(/documents/.test(warnings[0]), 'warning names the endPointName'); + assert.ok(/server\.com/.test(warnings[0]), 'warning names the placeholder url'); + }); + + it('keeps two identical OTHER-family blocks without throwing', () => { + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://equipmentapi.deere.com/isg' }], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://equipmentapi.deere.com/isg' }], + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.servers, [{ url: 'https://equipmentapi.deere.com/isg' }]); + }); + + it('throws when a declaring doc is a different server family, naming both endpoints', () => { + // Genuine cross-family divergence still refuses to merge: routing one + // family's endpoints through another family's host is the v1-class bug this + // guard prevents. equipmentapi.deere.com/isg is a deere host on a + // non-platform path, so it is OTHER, not a platform-family variant. + const primary = { + info: {}, + paths: {}, + servers: [{ url: 'https://api.deere.com/platform' }], + }; + const secondary = { + info: {}, + paths: {}, + servers: [{ url: 'https://equipmentapi.deere.com/isg' }], + }; + assert.throws( + () => + mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]), + (error: unknown) => + error instanceof Error && /varieties/.test(error.message) && /chemicals/.test(error.message) + ); + }); +}); + +// --------------------------------------------------------------------------- +// Primary selection +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: primary selection', () => { + it('uses the PRIMARY_ENDPOINT_NAME table entry regardless of array order', () => { + const primary = { info: { title: 'Varieties' }, paths: { '/varieties': { get: {} } } }; + const other = { info: { title: 'Chemicals' }, paths: { '/chemicals': { get: {} } } }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'chemicals', id: 2, doc: other }, + { endPointName: 'varieties', id: 1, doc: primary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.info, { title: 'Varieties' }); + }); + + it('falls back to the document whose end_point_name equals the slug', () => { + const primary = { info: { title: 'Primary' }, paths: {} }; + const other = { info: { title: 'Other' }, paths: {} }; + // "custom-slug" is not in the table, but a document carries it as endpoint. + const merged = mergeSpecDocs('custom-slug', [ + { endPointName: 'other', id: 2, doc: other }, + { endPointName: 'custom-slug', id: 1, doc: primary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.info, { title: 'Primary' }); + }); + + it('throws listing the slug and all endpoint names when no primary can be chosen', () => { + const a = { info: {}, paths: {} }; + const b = { info: {}, paths: {} }; + assert.throws( + () => + mergeSpecDocs('unknown-slug', [ + { endPointName: 'alpha', id: 1, doc: a }, + { endPointName: 'beta', id: 2, doc: b }, + ]), + (error: unknown) => + error instanceof Error && + /unknown-slug/.test(error.message) && + /alpha/.test(error.message) && + /beta/.test(error.message) + ); + }); +}); + +// --------------------------------------------------------------------------- +// info / tags / extras / stamping +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: info, tags, and stamping', () => { + it('unions tags by name (primary first), keeps primary info, and stamps sources', () => { + const primary = { + info: { title: 'P' }, + paths: {}, + tags: [{ name: 'a', description: 'A' }, { name: 'b' }], + }; + const secondary = { + info: { title: 'S' }, + paths: {}, + tags: [{ name: 'b', description: 'dup-ignored' }, { name: 'c' }], + }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 11, doc: primary }, + { endPointName: 'chemicals', id: 22, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual( + (merged.tags ?? []).map((t) => t.name), + ['a', 'b', 'c'] + ); + assert.deepStrictEqual(merged.tags?.[1], { name: 'b' }, 'primary tag b wins over the dup'); + assert.deepStrictEqual(merged.info, { title: 'P' }); + assert.deepStrictEqual(merged['x-source-documents'], [ + { endPointName: 'varieties', id: 11 }, + { endPointName: 'chemicals', id: 22 }, + ]); + }); + + it('adds a distinct top-level key from a secondary only if the merged doc lacks it', () => { + const primary = { info: {}, paths: {}, security: [{ oauth: ['read'] }] }; + const secondary = { info: {}, paths: {}, security: [{ oauth: ['write'] }], 'x-extra': 42 }; + const merged = mergeSpecDocs('products', [ + { endPointName: 'varieties', id: 1, doc: primary }, + { endPointName: 'chemicals', id: 2, doc: secondary }, + ]) as MergedSpec; + + assert.deepStrictEqual(merged.security, [{ oauth: ['read'] }], 'primary security wins'); + assert.strictEqual(merged['x-extra'], 42, 'secondary-only key is added'); + }); +}); + +// --------------------------------------------------------------------------- +// A products-shaped 3-doc fixture: dedupe + rename together +// --------------------------------------------------------------------------- + +function threeDocs(): Array<{ endPointName: string; id: number; doc: Record }> { + return [ + { + endPointName: 'varieties', + id: 1, + doc: { + info: { title: 'Varieties' }, + paths: { '/varieties': { get: { operationId: 'listVarieties' } } }, + components: { + schemas: { + Money: { type: 'object', properties: { amount: { type: 'number' } } }, + Variety: { type: 'object', properties: { name: { type: 'string' } } }, + }, + }, + }, + }, + { + endPointName: 'chemicals', + id: 2, + doc: { + info: { title: 'Chemicals' }, + paths: { '/chemicals': { get: { operationId: 'listChemicals' } } }, + components: { + schemas: { + // Deep-equal to varieties Money (different key order) -> dedupes. + Money: { properties: { amount: { type: 'number' } }, type: 'object' }, + Chemical: { + type: 'object', + properties: { cost: { $ref: '#/components/schemas/Money' } }, + }, + }, + }, + }, + }, + { + endPointName: 'fertilizers', + id: 3, + doc: { + info: { title: 'Fertilizers' }, + paths: { '/fertilizers': { get: { operationId: 'listFertilizers' } } }, + components: { + schemas: { + // Conflicts with Money (amount string vs number) -> renamed. + Money: { type: 'object', properties: { amount: { type: 'string' } } }, + Fertilizer: { + type: 'object', + properties: { price: { $ref: '#/components/schemas/Money' } }, + }, + }, + }, + }, + }, + ]; +} + +describe('mergeSpecDocs: products-shaped 3-doc fixture', () => { + it('dedupes the shared boilerplate and renames only the conflicting copy', () => { + const merged = mergeSpecDocs('products', threeDocs()) as MergedSpec; + + assert.deepStrictEqual(schemaNames(merged), [ + 'Chemical', + 'Fertilizer', + 'Money', + 'Money_Fertilizers', + 'Variety', + ]); + assert.deepStrictEqual(pathNames(merged), ['/chemicals', '/fertilizers', '/varieties']); + + // Kept primary Money; renamed fertilizers Money. + assert.deepStrictEqual( + deepGet(merged, ['components', 'schemas', 'Money', 'properties', 'amount']), + { + type: 'number', + } + ); + assert.deepStrictEqual( + deepGet(merged, ['components', 'schemas', 'Money_Fertilizers', 'properties', 'amount']), + { type: 'string' } + ); + // Chemical deduped its Money, so its ref is untouched. + assert.strictEqual( + deepGet(merged, ['components', 'schemas', 'Chemical', 'properties', 'cost', '$ref']), + '#/components/schemas/Money' + ); + // Fertilizer's ref was rewritten to the renamed Money. + assert.strictEqual( + deepGet(merged, ['components', 'schemas', 'Fertilizer', 'properties', 'price', '$ref']), + '#/components/schemas/Money_Fertilizers' + ); + }); +}); + +// --------------------------------------------------------------------------- +// Purity and input-order independence +// --------------------------------------------------------------------------- + +describe('mergeSpecDocs: purity and order independence', () => { + it('never mutates its input documents', () => { + const docs = threeDocs(); + const before = JSON.stringify(docs); + mergeSpecDocs('products', docs); + assert.strictEqual(JSON.stringify(docs), before); + }); + + it('produces byte-identical output for every permutation of the input array', () => { + const base = stringifySpec(mergeSpecDocs('products', threeDocs())); + for (const order of permutations([0, 1, 2])) { + const source = threeDocs(); + const permuted = order.map((i) => source[i]); + assert.strictEqual( + stringifySpec(mergeSpecDocs('products', permuted)), + base, + `permutation ${order.join(',')} produced a different merge` + ); + } + }); +});